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

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

#1 fix crash bug at some sites like http://msdn.com .

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