source: cheroxy/trunk/src/CRXHttpRequest.cpp@ 24

Last change on this file since 24 was 24, checked in by cheese, 11 years ago

#1 change response, threading and proxy work-flow

File size: 2.3 KB
Line 
1/**
2 * CRXHttpRequest.cpp
3 */
4#ifdef _WIN32
5# pragma warning (disable:4996)
6#endif
7
8#include "CRXHttpRequest.h"
9
10#include <stdio.h>
11#include <stdlib.h>
12
13CRXHttpRequest::CRXHttpRequest (void)
14 : mPort (0)
15{
16}
17
18void
19CRXHttpRequest::SetHeader (const char * aHttpRequest)
20{
21 SetMessage (aHttpRequest);
22}
23
24std::string
25CRXHttpRequest::GetHeader (void) const
26{
27 return GetMessage ();
28}
29
30std::string
31CRXHttpRequest::GetURL (void) const
32{
33 return mUrl;
34}
35
36std::string
37CRXHttpRequest::GetHost (void) const
38{
39 return mHost;
40}
41
42int
43CRXHttpRequest::GetPort (void) const
44{
45 return mPort;
46}
47
48CRXHttpRequest &
49CRXHttpRequest::operator = (const char * aHttpMessage)
50{
51 SetHeader (aHttpMessage);
52 return *this;
53}
54
55void
56CRXHttpRequest::Parse (void)
57{
58 std::string aHttpRequestUri = "";
59
60 char aMethod[64] = {0x00, };
61 char aUrl[1024 * 4] = {0x00, };
62 char aHttpVersion[64] = {0x00, };
63
64 char aProtocol[32] = {0x00, };
65 char aHostBuffer[512] = {0x00, };
66 char aHost[512] = {0x00, };
67 char aPortBuffer[32] = {0x00, };
68 int aPort = 0;
69
70 /*----------------------------------------------------------------*/
71 aHttpRequestUri = GetHeader ().substr (0, mHttpMessage.find ('\r'));
72
73 /*----------------------------------------------------------------
74 * 1. separate first line to <METHOD>, <URL> and <VERSION>
75 *----------------------------------------------------------------*/
76 sscanf (aHttpRequestUri.c_str (), "%[^ ] %[^ ] %[^ ]\r\n", aMethod, aUrl, aHttpVersion);
77 mMethod.assign (aMethod);
78 mUrl.assign (aUrl);
79 mHttpVersion.assign (aHttpVersion);
80
81 /*----------------------------------------------------------------
82 * 2. separate <URL> to <PROTOCOL> and <HOST>
83 *----------------------------------------------------------------*/
84 sscanf (mUrl.c_str (), "%[^://]://%[^/]", aProtocol, aHostBuffer);
85 mProtocol.assign (aProtocol);
86
87 /*----------------------------------------------------------------
88 * 3. separate <HOST> to <HOSTNAME>:<PORT>
89 *----------------------------------------------------------------*/
90 sscanf (aHostBuffer, "%[^:]:%s", aHost, aPortBuffer);
91 mHost.assign (aHost);
92 aPort = atoi (aPortBuffer);
93
94 mPort = aPort == 0 ? 80 : aPort;
95 /*----------------------------------------------------------------*/
96}
Note: See TracBrowser for help on using the repository browser.