00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __CAABSTRACTCONTROLCHANNEL__
00030 #define __CAABSTRACTCONTROLCHANNEL__
00031
00032 #ifndef ONLY_LOCAL_PROXY
00033 #include "CAControlChannelDispatcher.hpp"
00034 #include "xml/DOM_Output.hpp"
00035
00036
00041 class CAAbstractControlChannel
00042 {
00043 public:
00044 CAAbstractControlChannel(UINT8 id, bool bIsEncrypted)
00045 {
00046 m_bIsEncrypted=bIsEncrypted;
00047 m_ID=id;
00048 m_pDispatcher=NULL;
00049 }
00050
00051 virtual ~CAAbstractControlChannel()
00052 {
00053 }
00054
00062 SINT32 sendXMLMessage(const XERCES_CPP_NAMESPACE::DOMDocument* pDocMsg) const
00063 {
00064 UINT32 tlen=0xFFFF;
00065 UINT8* tmpB=new UINT8[tlen];
00066 if(DOM_Output::dumpToMem(pDocMsg,tmpB,&tlen)!=E_SUCCESS || tlen>0xFFFF)
00067 {
00068 delete[]tmpB;
00069 return E_SPACE;
00070 }
00071 SINT32 ret=sendXMLMessage(tmpB,tlen);
00072 delete[] tmpB;
00073 return ret;
00074 }
00075
00084 SINT32 sendXMLMessage(const UINT8* msgXML,UINT32 msgLen) const
00085 {
00086
00087 if(msgLen>0xFFFF)
00088 {
00089 return E_SPACE;
00090 }
00091 UINT32 tmpBLen=msgLen+2+16;
00092 UINT8* tmpB=new UINT8[tmpBLen];
00093 if(m_bIsEncrypted)
00094 {
00095 m_pDispatcher->encryptMessage(msgXML,msgLen,tmpB+2,&tmpBLen);
00096 }
00097 else
00098 {
00099 memcpy(tmpB+2,msgXML,msgLen);
00100 tmpBLen=msgLen;
00101 }
00102 tmpB[0]=(UINT8)(msgLen>>8);
00103 tmpB[1]=(UINT8)(msgLen&0xFF);
00104 SINT32 ret=m_pDispatcher->sendMessages(m_ID,tmpB,tmpBLen+2);
00105 delete[] tmpB;
00106 return ret;
00107 }
00108
00112 UINT32 getID() const
00113 {
00114 return m_ID;
00115 }
00116
00117
00118
00119 protected:
00123 virtual SINT32 proccessMessage(const UINT8* msg, UINT32 msglen)=0;
00124
00127 virtual SINT32 proccessMessageComplete()=0;
00128
00130 SINT32 setDispatcher(CAControlChannelDispatcher* pDispatcher)
00131 {
00132 m_pDispatcher=pDispatcher;
00133 return E_SUCCESS;
00134 }
00135
00136 friend class CAControlChannelDispatcher;
00137 CAControlChannelDispatcher* m_pDispatcher;
00138 bool m_bIsEncrypted;
00139 UINT32 m_ID;
00140 };
00141
00142 #endif
00143
00144 #endif //ONLY_LOCAL_PROXY