Changeset 18 in cheroxy for trunk/src/main.cpp
- Timestamp:
- 11/08/12 16:39:42 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/main.cpp
r17 r18 4 4 #ifdef _WIN32 5 5 # define _CRT_SECURE_NO_WARNINGS 6 # include <process.h>7 #else8 # include <errno.h>9 6 #endif 10 7 11 8 #include "CRXSocket.h" 12 #include "CRXHttpRequest.h" 13 #include "CRXHttpResponse.h" 9 #include "CRXProxy.h" 14 10 15 11 #include <iostream> … … 22 18 using namespace std; 23 19 24 /*-----------------------------------------------------------------*/25 int CRXCreateThread (int (* aThreadFunc) (void *), void * aThreadArg);26 int CRXProxyThread (void * aThreadArg);27 28 /* error */29 20 #ifdef _WIN32 30 # define CRX_ERROR() GetLastError () 31 # ifndef __func__ 32 # define __func__ __FUNCTION__ 33 # endif 34 #else 35 # define CRX_ERROR() errno 21 # define __func__ __FUNCTION__ 36 22 #endif 37 23 … … 46 32 } while (0) 47 33 48 typedef struct __crx_proxy_thread_argument__49 {50 int mSocket;51 } CRXProxyThreadArgs;52 /*----------------------------------------------------------------*/53 54 34 int main (int argc, char* argv[]) 55 35 { … … 57 37 const unsigned short aPort = 8080; 58 38 59 CRXSocket aSocket;60 CRXProxy ThreadArgs * aThreadArg;39 CRXSocket aSocket; 40 CRXProxy * aProxy = NULL; 61 41 62 42 /*----------------------------------------------------------------*/ … … 80 60 } 81 61 82 if ((a ThreadArg = new(std::nothrow) CRXProxyThreadArgs) == NULL)62 if ((aProxy = new(std::nothrow) CRXProxy (aResult)) == NULL) 83 63 { 84 64 aResult = -1; … … 86 66 } 87 67 88 memset (aThreadArg, 0x0, sizeof (CRXProxyThreadArgs)); 89 aThreadArg->mSocket = aResult; 90 91 aResult = CRXCreateThread (CRXProxyThread, aThreadArg); 68 aResult = aProxy->ForwardMT (); 92 69 if (aResult < 0) 93 70 { 94 aResult = CRX_ERROR ();95 71 CRX_PRINT_ERROR (aResult, "failed to create thread"); 96 72 break; … … 103 79 return aResult; 104 80 } 105 106 int107 CRXCreateThread (int (* aThreadFunc) (void *), void * aThreadArg)108 {109 #ifdef _WIN32110 return _beginthread ((void (*) (void *))aThreadFunc, 0, aThreadArg);111 #else112 pthread_t aThreadID = 0;113 114 return pthread_create (&aThreadID, NULL, (void * (*) (void *))aThreadFunc, aThreadArg);115 #endif116 }117 118 int119 CRXProxyThread (void * aThreadArg)120 {121 int aResult = 0;122 int aReceivedSize = 0;123 124 const unsigned int aBufferSize = 1024 * 16;125 char aBuffer[aBufferSize] = {0x00, };126 127 CRXHttpRequest aHttpRequest;128 CRXHttpResponse aHttpResponse;129 130 CRXSocket aWebServer;131 CRXSocket aWebBrowser = ((CRXProxyThreadArgs *)aThreadArg)->mSocket;132 133 bool aIsMoreRequest = false;134 135 /*----------------------------------------------------------------*/136 delete (CRXProxyThreadArgs *)aThreadArg;137 138 do139 {140 /* BROWSER --- request ---> [PROXY] SERVER */141 aReceivedSize = aWebBrowser.Receive (aBuffer, aBufferSize);142 if (aReceivedSize < 0)143 {144 CRX_PRINT_ERROR (aReceivedSize, "failed to receive from client (" << CRX_ERROR () << ")");145 return aReceivedSize;146 }147 148 /* BROWSER ?--- waiting --- [PROXY] --- connect ---> SERVER */149 if (!aWebServer)150 {151 /* parse http request */152 aHttpRequest = aBuffer;153 154 /* connect */155 aResult = aWebServer.Connect (aHttpRequest.GetHost (), aHttpRequest.GetPort (), 1);156 if (aResult < 0)157 {158 CRX_PRINT_ERROR (aResult, "failed to connect to server ("159 << CRX_ERROR ()160 << ") <"161 << aHttpRequest.GetHost ()162 << ":"163 << aHttpRequest.GetPort ()164 << "><"165 << aHttpRequest.GetURL ()166 << ">");167 return aResult;168 }169 }170 171 /* BROWSER ?--- waiting --- [PROXY] --- request ---> SERVER */172 aResult = aWebServer.Send (aBuffer, aReceivedSize);173 if (aResult != aReceivedSize)174 {175 CRX_PRINT_ERROR (aResult, "failed to send to server <"176 << aHttpRequest.GetHost ()177 << ":"178 << aHttpRequest.GetPort ()179 << CRX_ERROR ()180 << ")");181 return aResult;182 }183 184 /* BROWSER <--- response--- [PROXY] <--- response--- SERVER */185 for (;;)186 {187 memset (aBuffer, 0x00, aBufferSize);188 189 aResult = aWebServer.Receive (aBuffer, aBufferSize);190 if (aResult < 0)191 {192 CRX_PRINT_ERROR (aResult, "failed to receive ("193 << CRX_ERROR ()194 << ") <"195 << aHttpRequest.GetURL ()196 << ">");197 break;198 }199 else if (aResult == 0)200 {201 break;202 }203 aReceivedSize = aResult;204 205 aResult = aWebBrowser.Send (aBuffer, aReceivedSize);206 if (aResult != aReceivedSize)207 {208 CRX_PRINT_ERROR (aResult, "failed to send ("209 << CRX_ERROR ()210 << ") <"211 << aHttpRequest.GetURL ()212 << ">");213 break;214 }215 }216 } while (aIsMoreRequest);217 218 /*----------------------------------------------------------------*/219 aWebBrowser.Close ();220 aWebServer.Close ();221 222 return aResult;223 }
Note:
See TracChangeset
for help on using the changeset viewer.