/*
* Copyright 2007 Stephen Liu
* For license terms, see the file COPYING along with this library.
*/
#ifndef __sptunnelimpl_hpp__
#define __sptunnelimpl_hpp__
#include <pthread.h>
#include "spmsgdecoder.hpp"
#include "sphandler.hpp"
#include "spresponse.hpp"
class SP_TunnelArg {
public:
static SP_TunnelArg * create();
enum { eCreate, eNormal, eDestroy };
void setTunnelStatus( int status );
int getTunnelStatus();
void setTunnelSid( SP_Sid_t sid );
SP_Sid_t getTunnelSid();
void setBackendStatus( int status );
int getBackendStatus();
void setBackendSid( SP_Sid_t sid );
SP_Sid_t getBackendSid();
void addRef();
void release();
private:
pthread_mutex_t mMutex;
unsigned char mRefCount;
unsigned char mTunnelStatus, mBackendStatus;
SP_Sid_t mTunnelSid, mBackendSid;
SP_TunnelArg();
~SP_TunnelArg();
};
class SP_TunnelDecoder : public SP_MsgDecoder {
public:
SP_TunnelDecoder();
virtual ~SP_TunnelDecoder();
virtual int decode( SP_Buffer * inBuffer );
SP_Buffer * getBuffer();
SP_Buffer * takeBuffer();
private:
SP_Buffer * mBuffer;
};
class SP_BackendHandler : public SP_Handler {
public:
SP_BackendHandler( SP_TunnelArg * tunnelArg );
virtual ~SP_BackendHandler();
// return -1 : terminate session, 0 : continue
virtual int start( SP_Request * request, SP_Response * response );
// return -1 : terminate session, 0 : continue
virtual int handle( SP_Request * request, SP_Response * response );
virtual void error( SP_Response * response );
virtual void timeout( SP_Response * response );
virtual void close();
private:
SP_TunnelArg * mArg;
};
class SP_Dispatcher;
class SP_MsgBlockList;
class SP_TunnelHandler : public SP_Handler {
public:
SP_TunnelHandler( SP_Dispatcher * dispatcher,
const char * dstHost, int dstPort );
virtual ~SP_TunnelHandler();
// return -1 : terminate session, 0 : continue
virtual int start( SP_Request * request, SP_Response * response );
// return -1 : terminate session, 0 : continue
virtual int handle( SP_Request * request, SP_Response * response );
virtual void error( SP_Response * response );
virtual void timeout( SP_Response * response );
virtual void close();
private:
SP_Dispatcher * mDispatcher;
SP_TunnelArg * mArg;
SP_MsgBlockList * mMsgBlockList;
char mHost[ 32 ];
int mPort;
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1