Changeset 46 in cheroxy for trunk/src/CRXProxy.cpp


Ignore:
Timestamp:
11/26/12 15:23:31 (11 years ago)
Author:
cheese
Message:

#1 rename http message to http header and change way to process response content as binary

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/CRXProxy.cpp

    r45 r46  
    9191
    9292    std::string aHttpHeader;
     93
    9394    /*----------------------------------------------------------------*/
    9495    for (;;)
     
    116117CRXProxy::SendRequest (void)
    117118{
    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)
    140134    {
    141135        CRX_ADD_SUBCLASS_ERROR (mServer);
     
    150144CRXProxy::ReceiveResponse (void)
    151145{
    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;
    156151
    157152    /*----------------------------------------------------------------*/
    158153    for (;;)
    159154    {
    160         memset (aBuffer, 0x00, sizeof (aBuffer));
    161 
    162         aResult = mServer.Receive (aBuffer, aBufferSize);
     155        aResult = mServer.Receive (&aBuffer, 1);
    163156        if (aResult < 0)
    164157        {
     
    169162        }
    170163
    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;
    177184        }
    178185    }
     
    185192CRXProxy::SendResponse (void)
    186193{
    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)
    194200    {
    195201        CRX_ADD_SUBCLASS_ERROR (mClient);
     
    198204    }
    199205
    200     aSize = mHttpResponse.GetContentLength ();
    201     aResult = mClient.Send (mHttpResponse.GetContentBody (), aSize);
    202     if (aResult != aSize)
     206    aLength = mHttpResponse.GetContentLength ();
     207    aResult = mClient.Send (mHttpResponse.GetContentBody (), aLength);
     208    if (aResult != aLength)
    203209    {
    204210        CRX_ADD_SUBCLASS_ERROR (mClient);
Note: See TracChangeset for help on using the changeset viewer.