#ifndef VSP_HANDLER__H_ #define VSP_HANDLER__H_ #ifdef _WIN32 #pragma once #endif #define EXTRACT_NEXT_PARAM(VALIABLE, NEXT, SIZE, OFFSET) \ if ((OFFSET = VALIABLE.Tokenize(NEXT, SIZE, ' ')) <= 1) { \ if (SIZE > 0) { VALIABLE.Assign(NEXT, SIZE); OFFSET = SIZE; } \ else { HLOGF(HLOG_ERROR, "[ERROR], Invalid param, %s\n", NEXT); \ return -1; } } \ NEXT += OFFSET; SIZE -= OFFSET; class HVspHandler : public HProtocolHandler { public: enum { //HH_VSP_MAX_COMMAND_PACKET_SIZE = 8192 HH_VSP_MAX_COMMAND_PACKET_SIZE = 65536 }; HVspHandler(); ~HVspHandler(); int SendCommand(const HString & strCommand); int SendBinary(const char * pData, size_t nSize); protected: int SendBufferCommand(); void OnReceivedStatusFromTransport(int nStatus); int OnReceivedFromTransport(const char * pData, int nSize); int ProcPacketBodyReceive(); int OnSendRetryToTransport(); bool OnPrepareReceive(); virtual void OnInitialize(bool bIsSuccess) = 0; virtual void OnTerminate() = 0; virtual int OnReceivedCommand(const char * pPacket, int nSize) = 0; protected: HStreamBuffer * m_pRecvBuffer; int m_nBodyOffset; long m_nBodySize; long m_nRemainBodySize; HStreamBuffer * m_pSendBuffer; }; #endif // REDUNDANCY__H_