Changeset 18 in cheroxy for trunk/src/main.cpp


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

#1 work for CRXProxy and CRXException

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.