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
00030
00031
00032
00033
00034
00035
00036 #include "stdafx.h"
00037 #include "TCPRelayHTTP.h"
00038
00039 #include "ErrorHandlerMacros.h"
00040
00041 #ifdef _MEMORY_DEBUG
00042 #define new DEBUG_NEW
00043 #define malloc DEBUG_MALLOC
00044 static char THIS_FILE[] = __FILE__;
00045 #endif
00046
00047 KOMODIA_NAMESPACE_START
00048
00049 #define CTCPRelayHTTP_Class "CTCPRelayHTTP"
00050
00051 CTCPRelayHTTP::CTCPRelayHTTP() : CTCPRelay()
00052 {
00053 try
00054 {
00055
00056 SetName(CTCPRelayHTTP_Class);
00057 }
00058 ERROR_HANDLER("CTCPRelayHTTP")
00059 }
00060
00061 CTCPRelayHTTP::~CTCPRelayHTTP()
00062 {
00063 }
00064
00065 BOOL CTCPRelayHTTP::Relay(const std::string& rBindAddress,
00066 unsigned short usBindPort,
00067 const std::string& rDestinationAddress,
00068 unsigned short usDestinationPort)
00069 {
00070 try
00071 {
00072
00073 return CTCPRelay::Relay(rBindAddress,
00074 usBindPort,
00075 rDestinationAddress,
00076 usDestinationPort);
00077 }
00078 ERROR_HANDLER_RETURN("Relay",FALSE)
00079 }
00080
00081 BOOL CTCPRelayHTTP::Relay(IP aBindAddress,
00082 unsigned short usBindPort,
00083 IP aDestinationAddress,
00084 unsigned short usDestinationPort)
00085 {
00086 try
00087 {
00088
00089 if (IsRunning())
00090 return FALSE;
00091
00092
00093 m_sBindAddress=CSpoofBase::LongToStdString(aBindAddress);
00094 m_sTargetAddress=CSpoofBase::LongToStdString(aDestinationAddress);
00095
00096
00097 return CTCPRelay::Relay(aBindAddress,
00098 usBindPort,
00099 aDestinationAddress,
00100 usDestinationPort);
00101 }
00102 ERROR_HANDLER_RETURN("Relay",FALSE)
00103 }
00104
00105 std::string CTCPRelayHTTP::ModifyReceiveString(BOOL bIncoming,
00106 const char* pBuffer,
00107 unsigned short usBufferSize)const
00108 {
00109 try
00110 {
00111
00112 if (!bIncoming)
00113 return "";
00114
00115
00116 std::string sData;
00117 sData=pBuffer;
00118
00119
00120 int iModifyCount;
00121 iModifyCount=0;
00122
00123
00124 while (ReplaceString(sData))
00125 ++iModifyCount;
00126
00127
00128 if (iModifyCount)
00129 return sData;
00130 else
00131 return "";
00132 }
00133 ERROR_HANDLER_RETURN("ModifyReceiveString","")
00134 }
00135
00136 BOOL CTCPRelayHTTP::ReplaceString(std::string& rString)const
00137 {
00138 try
00139 {
00140
00141 std::string::size_type aPos;
00142 aPos=rString.find(m_sBindAddress,
00143 0);
00144
00145
00146 if (aPos!=std::string::npos)
00147 {
00148 std::string sNewString;
00149 sNewString.reserve(rString.size()+30);
00150
00151
00152 sNewString=rString.substr(0,
00153 aPos);
00154
00155
00156 sNewString+=m_sTargetAddress;
00157
00158
00159 sNewString+=rString.substr(aPos+
00160 m_sBindAddress.length(),
00161 rString.length()-
00162 aPos-
00163 m_sBindAddress.length());
00164
00165
00166 rString.swap(sNewString);
00167
00168
00169 return TRUE;
00170 }
00171 else
00172 return FALSE;
00173 }
00174 ERROR_HANDLER_RETURN("ReplaceString",FALSE)
00175 }
00176
00177 KOMODIA_NAMESPACE_END