Changeset 18 in cheroxy for trunk/src


Ignore:
Timestamp:
11/08/12 16:39:42 (12 years ago)
Author:
cheese
Message:

#1 work for CRXProxy and CRXException

Location:
trunk/src
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/CRXHttpMessage.cpp

    r17 r18  
    3434}
    3535
    36 CRXHttpMessage::operator const char * (void) const
    37 {
    38     return mHttpMessage.c_str ();
    39 }
    40 
    4136CRXHttpMessage &
    4237CRXHttpMessage::operator = (const char * aHttpMessage)
  • trunk/src/CRXHttpRequest.cpp

    r17 r18  
    1212
    1313CRXHttpRequest::CRXHttpRequest (void)
    14     :
    15       mPort         (0)
     14    : mPort (0)
    1615{
    1716}
  • trunk/src/CRXHttpResponse.cpp

    r17 r18  
    5454    mStatusString.assign (aStatusString);
    5555    mStatusCode = atoi (aStatusCode);
    56 
    5756    /*----------------------------------------------------------------*/
    5857}
  • trunk/src/CRXSocket.cpp

    r14 r18  
    9595    if (aResult != 0)
    9696    {
    97         return ERROR_TCPSOCKET_FAILED_TO_INITIALIZE;
     97        aResult = ERROR_TCPSOCKET_FAILED_TO_INITIALIZE;
     98        return aResult;
    9899    }
    99100#endif
     
    146147    /*----------------------------------------------------------------*/
    147148    if (!IsInitialized () || IsCreated ())
    148         return ERROR_TCPSOCKET_ALREADY_IN_USE;
     149    {
     150        aResult = ERROR_TCPSOCKET_ALREADY_IN_USE;
     151        CRX_ERROR (aResult, "Already in use.");
     152        return aResult;
     153    }
    149154
    150155    aResult = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
    151156    if (aResult < 0)
    152157    {
     158        aResult = ERROR_TCPSOCKET_FAILED_TO_CREATE_SOCKET;
     159        CRX_ERROR (aResult, "Failed to create socket.");
     160        return aResult;
    153161    }
    154162
     
    191199        if (aHostEnt == NULL)
    192200        {
    193             return ERROR_TCPSOCKET_FAILED_TO_GET_HOSTNAME;
     201            aResult = ERROR_TCPSOCKET_FAILED_TO_GET_HOSTNAME;
     202            CRX_ERROR (aResult, "Failed to get hostname.");
     203            return aResult;
    194204        }
    195205        mAddress.sin_family = aHostEnt->h_addrtype;
     
    199209    if (aTimeout > TCPSOCKET_NO_TIMEOUT)
    200210    {
    201 #ifdef _WIN32
    202211        aResult = setsockopt (mSocket,
    203212                              SOL_SOCKET,
    204213                              SO_RCVTIMEO,
     214#ifdef _WIN32
    205215                              (char *) &aTimeMilliSec,
    206216                              sizeof (aTimeMilliSec));
    207217#else
    208         aResult = setsockopt (mSocket,
    209                               SOL_SOCKET,
    210                               SO_RCVTIMEO,
    211218                              &aTimeVal,
    212219                              (socklen_t) sizeof (aTimeVal));
     
    214221        if (aResult < 0)
    215222        {
    216             return ERROR_TCPSOCKET_FAILED_TO_SETSOCKOPT;
     223            aResult = ERROR_TCPSOCKET_FAILED_TO_SETSOCKOPT;
     224            CRX_ERROR (aResult, "Failed to set socket option.");
     225            return aResult;
    217226        }
    218227    }
     
    221230    if (aResult < 0)
    222231    {
    223         return ERROR_TCPSOCKET_FAILED_TO_CONNECT;
     232        aResult = ERROR_TCPSOCKET_FAILED_TO_CONNECT;
     233        CRX_ERROR (aResult, "Failed to connect.");
    224234    }
    225235
     
    249259    if (aResult < 0)
    250260    {
    251         return ERROR_TCPSOCKET_FAILED_TO_BIND;
     261        aResult = ERROR_TCPSOCKET_FAILED_TO_BIND;
     262        CRX_ERROR (aResult, "Failed to bind.");
     263        return aResult;
    252264    }
    253265
     
    255267    if (aResult < 0)
    256268    {
    257         return ERROR_TCPSOCKET_FAILED_TO_LISTEN;
     269        aResult = ERROR_TCPSOCKET_FAILED_TO_LISTEN;
     270        CRX_ERROR (aResult, "Failed to listen.");
     271        return aResult;
    258272    }
    259273
     
    283297    if (aResult < 0)
    284298    {
     299        aResult = ERROR_TCPSOCKET_FAILED_TO_ACCEPT;
     300        CRX_ERROR (aResult, "Failed to accept.");
    285301        return aResult;
    286302    }
     
    311327    if (aResult != aSize)
    312328    {
    313         return ERROR_TCPSOCKET_FAILED_TO_SEND;
     329        aResult = ERROR_TCPSOCKET_FAILED_TO_SEND;
     330        CRX_ERROR (aResult, "Failed to send.");
     331        return aResult;
    314332    }
    315333
     
    330348    if (aResult < 0)
    331349    {
    332         return ERROR_TCPSOCKET_FAILED_TO_RECEIVE;
    333     }
    334 
    335     /*----------------------------------------------------------------*/
    336     return aResult;
    337 }
     350        aResult = ERROR_TCPSOCKET_FAILED_TO_RECEIVE;
     351        CRX_ERROR (aResult, "Failed to receive.");
     352        return aResult;
     353    }
     354
     355    /*----------------------------------------------------------------*/
     356    return aResult;
     357}
  • trunk/src/main.cpp

    r17 r18  
    44#ifdef _WIN32
    55# define _CRT_SECURE_NO_WARNINGS
    6 # include <process.h>
    7 #else
    8 # include <errno.h>
    96#endif
    107
    118#include "CRXSocket.h"
    12 #include "CRXHttpRequest.h"
    13 #include "CRXHttpResponse.h"
     9#include "CRXProxy.h"
    1410
    1511#include <iostream>
     
    2218using namespace std;
    2319
    24 /*-----------------------------------------------------------------*/
    25 int CRXCreateThread (int (* aThreadFunc) (void *), void * aThreadArg);
    26 int CRXProxyThread  (void * aThreadArg);
    27 
    28 /* error */
    2920#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__
    3622#endif
    3723
     
    4632    } while (0)
    4733
    48 typedef struct __crx_proxy_thread_argument__
    49 {
    50     int mSocket;
    51 } CRXProxyThreadArgs;
    52 /*----------------------------------------------------------------*/
    53 
    5434int main (int argc, char* argv[])
    5535{
     
    5737    const unsigned short    aPort   = 8080;
    5838
    59     CRXSocket           aSocket;
    60     CRXProxyThreadArgs  * aThreadArg;
     39    CRXSocket               aSocket;
     40    CRXProxy                * aProxy = NULL;
    6141
    6242    /*----------------------------------------------------------------*/
     
    8060        }
    8161
    82         if ((aThreadArg = new(std::nothrow) CRXProxyThreadArgs) == NULL)
     62        if ((aProxy = new(std::nothrow) CRXProxy (aResult)) == NULL)
    8363        {
    8464            aResult = -1;
     
    8666        }
    8767
    88         memset (aThreadArg, 0x0, sizeof (CRXProxyThreadArgs));
    89         aThreadArg->mSocket = aResult;
    90 
    91         aResult = CRXCreateThread (CRXProxyThread, aThreadArg);
     68        aResult = aProxy->ForwardMT ();
    9269        if (aResult < 0)
    9370        {
    94             aResult = CRX_ERROR ();
    9571            CRX_PRINT_ERROR (aResult, "failed to create thread");
    9672            break;
     
    10379    return aResult;
    10480}
    105 
    106 int
    107 CRXCreateThread (int (* aThreadFunc) (void *), void * aThreadArg)
    108 {
    109 #ifdef _WIN32
    110     return _beginthread ((void (*) (void *))aThreadFunc, 0, aThreadArg);
    111 #else
    112     pthread_t aThreadID = 0;
    113 
    114     return pthread_create (&aThreadID, NULL, (void * (*) (void *))aThreadFunc, aThreadArg);
    115 #endif
    116 }
    117 
    118 int
    119 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     do
    139     {
    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.