Changeset 28 in cheroxy for trunk/src


Ignore:
Timestamp:
11/16/12 13:07:05 (12 years ago)
Author:
cheese
Message:

#1 add filter class

Location:
trunk/src
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/CRXHttpMessage.cpp

    r26 r28  
    6868{
    6969    /*----------------------------------------------------------------*/
    70     SetMessage (aHttpMessage);
    7170    /*----------------------------------------------------------------*/
    7271
  • trunk/src/CRXHttpRequest.cpp

    r26 r28  
    5050}
    5151
    52 std::string
    53 CRXHttpRequest::GetURL (void) const
    54 {
    55     /*----------------------------------------------------------------*/
    56     /*----------------------------------------------------------------*/
    57 
    58     return mUrl;
    59 }
    60 
    61 std::string
    62 CRXHttpRequest::GetHost (void) const
    63 {
    64     /*----------------------------------------------------------------*/
    65     /*----------------------------------------------------------------*/
    66 
    67     return mHost;
    68 }
    69 
    70 int
    71 CRXHttpRequest::GetPort (void) const
    72 {
    73     /*----------------------------------------------------------------*/
    74     /*----------------------------------------------------------------*/
    75 
    76     return mPort;
    77 }
    78 
    7952CRXHttpRequest &
    8053CRXHttpRequest::operator = (const char * aHttpMessage)
     
    9063CRXHttpRequest::Parse (void)
    9164{
    92     std::string aHttpRequestUri     = "";
     65    std::string aHttpRequestUrl;
    9366
    9467    char        aMethod[64]         = {0x00, };
     
    10376
    10477    /*----------------------------------------------------------------*/
    105     aHttpRequestUri = GetHeader ().substr (0, mHttpMessage.find ('\r'));
     78    aHttpRequestUrl = GetHeader ().substr (0, mHttpMessage.find ('\r'));
    10679
    10780    /*----------------------------------------------------------------
    10881     * 1. separate first line to <METHOD>, <URL> and <VERSION>
    10982     *----------------------------------------------------------------*/
    110     sscanf (aHttpRequestUri.c_str (), "%[^ ] %[^ ] %[^ ]\r\n", aMethod, aUrl, aHttpVersion);
     83    sscanf (aHttpRequestUrl.c_str (), "%[^ ] %[^ ] %[^ ]\r\n", aMethod, aUrl, aHttpVersion);
    11184    mMethod.assign (aMethod);
    11285    mUrl.assign (aUrl);
    11386    mHttpVersion.assign (aHttpVersion);
     87
     88    ParseFileExtension ();
    11489
    11590    /*----------------------------------------------------------------
     
    129104    /*----------------------------------------------------------------*/
    130105}
     106
     107void
     108CRXHttpRequest::ParseFileExtension (void)
     109{
     110    std::string aFilename;
     111
     112    size_t      aFilenameOffset     = 0;
     113    size_t      aParameterPosition  = 0;
     114    size_t      aSlashPosition      = 0;
     115    size_t      aDotPosition        = 0;
     116
     117    /*----------------------------------------------------------------*/
     118    /*----------------------------------------------------------------
     119     * 1. get filename
     120     *----------------------------------------------------------------*/
     121    aParameterPosition = mUrl.find ('?');
     122    aSlashPosition = mUrl.rfind ('/', aParameterPosition) + 1;
     123    if (aSlashPosition == mUrl.length ())
     124        return ;
     125
     126    aFilenameOffset = (aParameterPosition != std::string::npos)
     127                    ? aParameterPosition - aSlashPosition
     128                    : std::string::npos;
     129
     130    aFilename = mUrl.substr (aSlashPosition, aFilenameOffset);
     131
     132    /*----------------------------------------------------------------
     133     * 2. get file extension
     134     *----------------------------------------------------------------*/
     135    aDotPosition = aFilename.rfind ('.');
     136    if (aDotPosition != std::string::npos)
     137        mFileExtension = aFilename.substr (aDotPosition + 1);
     138    /*----------------------------------------------------------------*/
     139}
     140
     141std::string CRXHttpRequest::GetURL              (void) const { return mUrl; }
     142std::string CRXHttpRequest::GetHost             (void) const { return mHost; }
     143int         CRXHttpRequest::GetPort             (void) const { return mPort; }
     144std::string CRXHttpRequest::GetFileExtension    (void) const { return mFileExtension; }
  • trunk/src/CRXHttpResponse.cpp

    r26 r28  
    110110
    111111    return GetMessage ();
    112 }
    113 
    114 int
    115 CRXHttpResponse::GetStatusCode (void) const
    116 {
    117     /*----------------------------------------------------------------*/
    118     /*----------------------------------------------------------------*/
    119 
    120     return mStatusCode;
    121 }
    122 
    123 int
    124 CRXHttpResponse::GetContentLength (void) const
    125 {
    126     /*----------------------------------------------------------------*/
    127     /*----------------------------------------------------------------*/
    128 
    129     return mContentLength;
    130 }
    131 
    132 const char *
    133 CRXHttpResponse::GetContentBody (void) const
    134 {
    135     /*----------------------------------------------------------------*/
    136     /*----------------------------------------------------------------*/
    137 
    138     return mContent.mBody;
    139112}
    140113
     
    232205    return aResult;
    233206}
     207
     208int             CRXHttpResponse::GetStatusCode      (void) const { return mStatusCode; }
     209int             CRXHttpResponse::GetContentLength   (void) const { return mContentLength; }
     210const char *    CRXHttpResponse::GetContentBody     (void) const { return mContent.mBody; }
  • trunk/src/CRXProxy.cpp

    r24 r28  
    77#include <string.h>
    88
     9CRXFilter CRXProxy::mFilter;
     10
    911CRXProxy::CRXProxy (void)
    10     : mClient (0),
     12    : mIsIntercepted (false),
     13      mClient (0),
    1114      mServer (0)
    1215{
     
    5962}
    6063
    61 int
    62 CRXProxy::GetStatus (void)
    63 {
    64     /*----------------------------------------------------------------*/
    65     /*----------------------------------------------------------------*/
    66 
    67     return mProxyStatus;
     64void
     65CRXProxy::SetRequestFilter (const E_CRX_FILTER_REQUEST  aType,
     66                            const bool                  aIsMatched,
     67                            const std::string           aValue)
     68{
     69    /*----------------------------------------------------------------*/
     70    mFilter.SetRequestFilter (aType, aIsMatched, aValue);
     71    /*----------------------------------------------------------------*/
     72}
     73
     74void
     75CRXProxy::RemoveRequestFilter (const E_CRX_FILTER_REQUEST aType)
     76{
     77    /*----------------------------------------------------------------*/
     78    mFilter.RemoveRequestFilter (aType);
     79    /*----------------------------------------------------------------*/
     80}
     81
     82bool
     83CRXProxy::CheckRequestFilter (const E_CRX_FILTER_REQUEST aType)
     84{
     85    /*----------------------------------------------------------------*/
     86    /*----------------------------------------------------------------*/
     87
     88    return mFilter.CheckRequestFilter (aType, this->mHttpRequest);
    6889}
    6990
  • trunk/src/main.cpp

    r24 r28  
    7676    CRXProxy    * aProxy = NULL;
    7777
     78    char        * aFilterFileExtension = "exe|gif|jpg|png|css|js|ico|";
     79    char        * aHttpRequest = NULL;
     80    int         aHttpRequestLength = 0;
     81
    7882    /*----------------------------------------------------------------*/
    7983    for (;;)
     
    9498
    9599        aProxy->SetClientSocket (aResult);
     100        aProxy->SetRequestFilter (CRX_FILTER_REQUEST_FILE_EXTENSION,
     101                                  CRX_FILTER_MATCHED,
     102                                  aFilterFileExtension);
    96103
    97104        aResult = aProxy->Forward ();
     
    99106        {
    100107            cerr << aProxy->GetErrorMessage () << endl;
     108        }
     109
     110        if (!aProxy->CheckRequestFilter (CRX_FILTER_REQUEST_FILE_EXTENSION))
     111        {
     112            aHttpRequestLength = aProxy->GetHttpRequestLength ();
     113            aHttpRequest = (char *) calloc (aHttpRequestLength + 1, 1);
     114            cout << aProxy->GetHttpRequest (aHttpRequest, aHttpRequestLength) << endl;
     115            free (aHttpRequest);
    101116        }
    102117
  • trunk/src/makefile

    r19 r28  
    1 
    21#----------------------------------------------------------
    32# platform
Note: See TracChangeset for help on using the changeset viewer.