Changeset 28 in cheroxy


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

#1 add filter class

Location:
trunk
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/_win/cheroxy/cheroxy.vcproj

    r18 r28  
    178178            </File>
    179179            <File
     180                RelativePath="..\..\src\CRXFilter.cpp"
     181                >
     182            </File>
     183            <File
    180184                RelativePath="..\..\src\CRXHttpMessage.cpp"
    181185                >
     
    216220            </File>
    217221            <File
     222                RelativePath="..\..\include\CRXFilter.h"
     223                >
     224            </File>
     225            <File
    218226                RelativePath="..\..\include\CRXHttpMessage.h"
    219227                >
  • trunk/include/CRXHttpRequest.h

    r26 r28  
    1212    std::string mMethod;
    1313    std::string mUrl;
     14    std::string mFileExtension;
    1415
    1516    std::string mProtocol;
     
    1819
    1920public:
    20     CRXHttpRequest                  (void);
    21     ~CRXHttpRequest                 (void);
     21    CRXHttpRequest      (void);
     22    ~CRXHttpRequest     (void);
    2223
    2324private:
    24     void                Parse       (void);
    25     void                Reset       (void);
     25    void                Parse               (void);
     26    void                ParseFileExtension  (void);
     27    void                Reset               (void);
    2628
    2729public:
    28     void                SetHeader   (const char * aHttpRequest);
    29     std::string         GetHeader   (void) const;
     30    void                SetHeader           (const char * aHttpRequest);
     31    std::string         GetHeader           (void) const;
    3032
    31     CRXHttpRequest &    operator =  (const char * aHttpRequest);
     33    CRXHttpRequest &    operator =          (const char * aHttpRequest);
    3234
    3335public:
    34     std::string         GetURL      (void) const;
    35     std::string         GetHost     (void) const;
    36     int                 GetPort     (void) const;
     36    std::string         GetURL              (void) const;
     37    std::string         GetHost             (void) const;
     38    int                 GetPort             (void) const;
     39    std::string         GetFileExtension    (void) const;
    3740};
    3841
  • trunk/include/CRXProxy.h

    r24 r28  
    1010#include "CRXHttpRequest.h"
    1111#include "CRXHttpResponse.h"
     12#include "CRXFilter.h"
    1213
    1314#define ERROR_PROXY                             -10000
     
    1718#define ERROR_PROXY_FAILED_TO_SEND_RESPONSE     ERROR_PROXY - 4
    1819#define ERROR_PROXY_FAILED_TO_CONNECT_TO_SERVER ERROR_PROXY - 5
    19 #define ERROR_PROXY_FAILED_TO_SET_RESPONSE      ERROR_PROXY - 5
     20#define ERROR_PROXY_FAILED_TO_SET_RESPONSE      ERROR_PROXY - 6
    2021
    21 typedef enum {
    22     CRX_PROXY_STATUS_ERROR = -1,
    23     CRX_PROXY_STATUS_IDLE,
    24     CRX_PROXY_STATUS_BUSY
    25 } E_CRX_PROXY_STATUS;
    2622
    2723class CRXProxy : public CRXException
    2824{
    2925private:
     26    bool                mIsIntercepted;
     27
    3028    CRXSocket           mClient;
    3129    CRXSocket           mServer;
     
    3432    CRXHttpResponse     mHttpResponse;
    3533
    36     E_CRX_PROXY_STATUS  mProxyStatus;
     34    static CRXFilter    mFilter;
    3735
    3836public:
     
    4341
    4442public:
     43    /* common utilities */
    4544    void    ReleaseInstance             (void);
    4645
     
    4847    void    Close                       (void);
    4948
    50     int     GetStatus                   (void);
     49public:
     50    /* interface to filter */
     51    void    SetRequestFilter            (const E_CRX_FILTER_REQUEST aType,
     52                                         const bool                 aIsMatched,
     53                                         const std::string          aValue);
     54    void    RemoveRequestFilter         (const E_CRX_FILTER_REQUEST aType);
     55    bool    CheckRequestFilter          (const E_CRX_FILTER_REQUEST aType);
    5156
    5257public:
     58    /* for communication */
    5359    int     Forward                     (void);
    5460
  • 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.