Changeset 46 in cheroxy for trunk/src/CRXProxy.cpp
- Timestamp:
- 11/26/12 15:23:31 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/CRXProxy.cpp
r45 r46 91 91 92 92 std::string aHttpHeader; 93 93 94 /*----------------------------------------------------------------*/ 94 95 for (;;) … … 116 117 CRXProxy::SendRequest (void) 117 118 { 118 int aResult = 0; 119 int aSize = mHttpRequest.GetHeader ().length (); 120 121 struct sockaddr_in aSockName; 122 socklen_t aSockLen = sizeof (aSockName); 123 124 /*----------------------------------------------------------------*/ 125 if (!mServer) 126 { 127 /* connect */ 128 aResult = mServer.Connect (mHttpRequest.GetHost (), mHttpRequest.GetPort (), mServerTimeout); 129 if (aResult < 0) 130 { 131 aResult = ERROR_PROXY_FAILED_TO_CONNECT_TO_SERVER; 132 CRX_ADD_SUBCLASS_ERROR (mServer); 133 CRX_ERROR_SET (aResult, "Failed to connect to server <%s>.", mHttpRequest.GetURL ().c_str ()); 134 return aResult; 135 } 136 } 137 138 aResult = mServer.Send (mHttpRequest.GetHeader ().c_str (), aSize); 139 if (aResult != aSize) 119 int aResult = 0; 120 int aLength = mHttpRequest.GetHeader ().length (); 121 122 /*----------------------------------------------------------------*/ 123 aResult = mServer.Connect (mHttpRequest.GetHost (), mHttpRequest.GetPort (), mServerTimeout); 124 if (aResult < 0) 125 { 126 aResult = ERROR_PROXY_FAILED_TO_CONNECT_TO_SERVER; 127 CRX_ADD_SUBCLASS_ERROR (mServer); 128 CRX_ERROR_SET (aResult, "Failed to connect to server <%s>.", mHttpRequest.GetURL ().c_str ()); 129 return aResult; 130 } 131 132 aResult = mServer.Send (mHttpRequest.GetHeader ().c_str (), aLength); 133 if (aResult != aLength) 140 134 { 141 135 CRX_ADD_SUBCLASS_ERROR (mServer); … … 150 144 CRXProxy::ReceiveResponse (void) 151 145 { 152 int aResult = 0; 153 154 const unsigned int aBufferSize = 1024 * 64; 155 char aBuffer[aBufferSize + 1] = {0x00, }; 146 int aResult = 0; 147 char aBuffer; 148 149 std::string aHttpHeader; 150 bool aRemainHeader = true; 156 151 157 152 /*----------------------------------------------------------------*/ 158 153 for (;;) 159 154 { 160 memset (aBuffer, 0x00, sizeof (aBuffer)); 161 162 aResult = mServer.Receive (aBuffer, aBufferSize); 155 aResult = mServer.Receive (&aBuffer, 1); 163 156 if (aResult < 0) 164 157 { … … 169 162 } 170 163 171 aResult = mHttpResponse.SetResponseAll (aBuffer, aResult); 172 if (aResult < 0) 173 { 174 aResult = ERROR_PROXY_FAILED_TO_SET_RESPONSE; 175 CRX_ERROR_SET (aResult, "Failed to set response."); 176 return aResult; 164 if (aRemainHeader) 165 { 166 aHttpHeader += aBuffer; 167 if (aHttpHeader.rfind (CRLF2) != std::string::npos) 168 { 169 mHttpResponse.SetHeader (aHttpHeader.c_str ()); 170 aRemainHeader = false; 171 } 172 } 173 else 174 { 175 aResult = mHttpResponse.SetContent (&aBuffer, aResult); 176 if (aResult < 0) 177 { 178 aResult = ERROR_PROXY_FAILED_TO_SET_RESPONSE; 179 CRX_ERROR_SET (aResult, "Failed to set response."); 180 return aResult; 181 } 182 else if (aResult == 0) 183 break; 177 184 } 178 185 } … … 185 192 CRXProxy::SendResponse (void) 186 193 { 187 int aResult = 0; 188 int aSize = 0; 189 190 /*----------------------------------------------------------------*/ 191 aSize = mHttpResponse.GetHeader ().length ();; 192 aResult = mClient.Send (mHttpResponse.GetHeader ().c_str (), aSize); 193 if (aResult != aSize) 194 int aResult = 0; 195 int aLength = 0; 196 /*----------------------------------------------------------------*/ 197 aLength = mHttpResponse.GetHeader ().length (); 198 aResult = mClient.Send (mHttpResponse.GetHeader ().c_str (), aLength); 199 if (aResult != aLength) 194 200 { 195 201 CRX_ADD_SUBCLASS_ERROR (mClient); … … 198 204 } 199 205 200 a Size= mHttpResponse.GetContentLength ();201 aResult = mClient.Send (mHttpResponse.GetContentBody (), a Size);202 if (aResult != a Size)206 aLength = mHttpResponse.GetContentLength (); 207 aResult = mClient.Send (mHttpResponse.GetContentBody (), aLength); 208 if (aResult != aLength) 203 209 { 204 210 CRX_ADD_SUBCLASS_ERROR (mClient);
Note:
See TracChangeset
for help on using the changeset viewer.