Logo
~Sockets~
~Examples~
~Contact~


HttpRequest Class Reference

#include <HttpRequest.h>

Inheritance diagram for HttpRequest:
Collaboration diagram for HttpRequest:

List of all members.


Public Member Functions

 HttpRequest ()
 HttpRequest (FILE *)
 Create from plain old cgi request.
 HttpRequest (const HttpRequest &src)
 ~HttpRequest ()
HttpRequestoperator= (const HttpRequest &src)
void SetHttpMethod (const std::string &value)
 Get, Post.
const std::string & HttpMethod () const
void SetHttpVersion (const std::string &value)
 HTTP/1.x.
const std::string & HttpVersion () const
void SetUri (const std::string &value)
const std::string & Uri () const
void SetRemoteAddr (const std::string &value)
const std::string & RemoteAddr () const
void SetRemoteHost (const std::string &value)
const std::string & RemoteHost () const
void SetServerName (const std::string &value)
const std::string & ServerName () const
void SetServerPort (int value)
int ServerPort () const
void SetIsSsl (bool value)
bool IsSsl () const
void SetAttribute (const std::string &key, const std::string &value)
 Set / Read attribute value.
void SetAttribute (const std::string &key, long value)
const std::string & Attribute (const std::string &key) const
const Utility::ncmap
< std::string > & 
Attributes () const
void AddCookie (const std::string &)
 Cookies.
const Utility::ncmap
< std::string > & 
CookieMap () const
void InitBody (size_t sz)
 Open file for body data.
void Write (const char *buf, size_t sz)
 Write body data.
void CloseBody ()
 No more writing.
void ParseBody ()
const HttpdFormForm () const
const HttpdCookiesCookies () const
const IFileBodyFile () const
void Reset ()

Private Attributes

std::string m_method
std::string m_protocol
std::string m_req_uri
std::string m_remote_addr
std::string m_remote_host
std::string m_server_name
int m_server_port
bool m_is_ssl
Utility::ncmap< std::string > m_attribute
std::string m_null
std::auto_ptr< IFilem_body_file
std::auto_ptr< HttpdFormm_form
HttpdCookies m_cookies
Utility::ncmap< std::string > m_cookie

Detailed Description

Definition at line 48 of file HttpRequest.h.


Constructor & Destructor Documentation

HttpRequest::HttpRequest (  ) 

Definition at line 55 of file HttpRequest.cpp.

00055                          : HttpTransaction()
00056 , m_server_port(0)
00057 , m_is_ssl(false)
00058 , m_body_file(NULL)
00059 , m_form(NULL)
00060 {
00061 }

HttpRequest::HttpRequest ( FILE *  fil  ) 

Create from plain old cgi request.

Definition at line 66 of file HttpRequest.cpp.

References DEB, Parse::getrest(), Parse::getword(), m_form, m_method, m_protocol, m_remote_addr, m_remote_host, m_req_uri, m_server_name, m_server_port, and HttpTransaction::SetHeader().

00066                                   : HttpTransaction()
00067 , m_server_port(0)
00068 , m_is_ssl(false)
00069 , m_body_file(NULL)
00070 , m_form(NULL)
00071 {
00072         int i = 0;
00073 DEB(    std::cout << "Initialize HttpRequest from cgi...\n";)
00074         while (environ[i] && *environ[i])
00075         {
00076                 Parse pa(environ[i], "=");
00077                 std::string key = pa.getword();
00078                 std::string value = pa.getrest();
00079                 if (key == "REQUEST_METHOD")
00080                         m_method = value;
00081                 else
00082                 if (key == "SERVER_PROTOCOL")
00083                         m_protocol = value;
00084                 else
00085                 if (key == "PATH_INFO")
00086                         m_req_uri = value;
00087                 else
00088                 if (key == "REMOTE_ADDR")
00089                         m_remote_addr = value;
00090                 else
00091                 if (key == "REMOTE_HOST")
00092                         m_remote_host = value;
00093                 else
00094                 if (key == "SERVER_NAME")
00095                         m_server_name = value;
00096                 else
00097                 if (key == "SERVER_PORT")
00098                         m_server_port = atoi(value.c_str());
00099                 else
00100                 if (key.size() > 5 && key.substr(0, 5) == "HTTP_")
00101                 {
00102                         key = key.substr(5);
00103                         for (size_t pos = 0; pos < key.size(); pos++)
00104                         {
00105                                 if (key[pos] == '_')
00106                                         key[pos] = '-';
00107                                 else
00108                                 if (key[pos] >= 'A' && key[pos] <= 'Z')
00109                                         key[pos] |= 32;
00110                         }
00111 DEB(                    std::cout << " http header '" << key << "' == '" << value << "\n";)
00112                         SetHeader(key, value);
00113                 }
00114                 ++i;
00115         }
00116 DEB(    std::cout << " setup http form\n";)
00117         m_form = std::auto_ptr<HttpdForm>(new HttpdForm(fil));
00118 }

HttpRequest::HttpRequest ( const HttpRequest src  ) 

Definition at line 123 of file HttpRequest.cpp.

00123                                                : HttpTransaction(src)
00124 , m_method(src.m_method)
00125 , m_protocol(src.m_protocol)
00126 , m_req_uri(src.m_req_uri)
00127 , m_remote_addr(src.m_remote_addr)
00128 , m_remote_host(src.m_remote_host)
00129 , m_server_name(src.m_server_name)
00130 , m_server_port(src.m_server_port)
00131 , m_is_ssl(src.m_is_ssl)
00132 , m_attribute(src.m_attribute)
00133 , m_null(src.m_null)
00134 , m_body_file(src.m_body_file)
00135 , m_form(src.m_form)
00136 , m_cookies(src.m_cookies)
00137 , m_cookie(src.m_cookie)
00138 {
00139 }

HttpRequest::~HttpRequest (  ) 

Definition at line 143 of file HttpRequest.cpp.

00144 {
00145 }


Member Function Documentation

HttpRequest & HttpRequest::operator= ( const HttpRequest src  ) 

Definition at line 149 of file HttpRequest.cpp.

References m_attribute, m_body_file, m_cookie, m_cookies, m_form, m_is_ssl, m_method, m_null, m_protocol, m_remote_addr, m_remote_host, m_req_uri, m_server_name, and m_server_port.

00150 {
00151         m_method = src.m_method;
00152         m_protocol = src.m_protocol;
00153         m_req_uri = src.m_req_uri;
00154         m_remote_addr = src.m_remote_addr;
00155         m_remote_host = src.m_remote_host;
00156         m_server_name = src.m_server_name;
00157         m_server_port = src.m_server_port;
00158         m_is_ssl = src.m_is_ssl;
00159         m_attribute = src.m_attribute;
00160         m_null = src.m_null;
00161         m_body_file = src.m_body_file;
00162         m_form = src.m_form;
00163         m_cookies = src.m_cookies;
00164         m_cookie = src.m_cookie;
00165 
00166         HttpTransaction::operator=(src);
00167 
00168         return *this;
00169 }

void HttpRequest::SetHttpMethod ( const std::string &  value  ) 

Get, Post.

Definition at line 173 of file HttpRequest.cpp.

References m_method.

Referenced by HttpBaseSocket::OnFirst(), and Ajp13Socket::ReceiveForwardRequest().

00174 {
00175         m_method = value;
00176 }

const std::string & HttpRequest::HttpMethod (  )  const

Definition at line 179 of file HttpRequest.cpp.

References m_method.

00180 {
00181         return m_method;
00182 }

void HttpRequest::SetHttpVersion ( const std::string &  value  ) 

HTTP/1.x.

Definition at line 187 of file HttpRequest.cpp.

References m_protocol.

Referenced by HttpBaseSocket::OnFirst(), and Ajp13Socket::ReceiveForwardRequest().

00188 {
00189         m_protocol = value;
00190 }

const std::string & HttpRequest::HttpVersion (  )  const

Definition at line 193 of file HttpRequest.cpp.

References m_protocol.

Referenced by HttpBaseSocket::Execute().

00194 {
00195         return m_protocol;
00196 }

void HttpRequest::SetUri ( const std::string &  value  ) 

Definition at line 201 of file HttpRequest.cpp.

References m_req_uri.

Referenced by HttpBaseSocket::OnFirst(), and Ajp13Socket::ReceiveForwardRequest().

00202 {
00203         m_req_uri = value;
00204 }

const std::string & HttpRequest::Uri (  )  const

Definition at line 207 of file HttpRequest.cpp.

References m_req_uri.

00208 {
00209         return m_req_uri;
00210 }

void HttpRequest::SetRemoteAddr ( const std::string &  value  ) 

Definition at line 215 of file HttpRequest.cpp.

References m_remote_addr.

Referenced by HttpBaseSocket::OnFirst(), and Ajp13Socket::ReceiveForwardRequest().

00216 {
00217         m_remote_addr = value;
00218 }

const std::string & HttpRequest::RemoteAddr (  )  const

Definition at line 221 of file HttpRequest.cpp.

References m_remote_addr.

00222 {
00223         return m_remote_addr;
00224 }

void HttpRequest::SetRemoteHost ( const std::string &  value  ) 

Definition at line 229 of file HttpRequest.cpp.

References m_remote_host.

Referenced by HttpBaseSocket::OnFirst(), and Ajp13Socket::ReceiveForwardRequest().

00230 {
00231         m_remote_host = value;
00232 }

const std::string & HttpRequest::RemoteHost (  )  const

Definition at line 235 of file HttpRequest.cpp.

References m_remote_host.

00236 {
00237         return m_remote_host;
00238 }

void HttpRequest::SetServerName ( const std::string &  value  ) 

Definition at line 243 of file HttpRequest.cpp.

References m_server_name.

Referenced by HttpBaseSocket::OnFirst(), and Ajp13Socket::ReceiveForwardRequest().

00244 {
00245         m_server_name = value;
00246 }

const std::string & HttpRequest::ServerName (  )  const

Definition at line 249 of file HttpRequest.cpp.

References m_server_name.

00250 {
00251         return m_server_name;
00252 }

void HttpRequest::SetServerPort ( int  value  ) 

Definition at line 257 of file HttpRequest.cpp.

References m_server_port.

Referenced by HttpBaseSocket::OnFirst(), and Ajp13Socket::ReceiveForwardRequest().

00258 {
00259         m_server_port = value;
00260 }

int HttpRequest::ServerPort (  )  const

Definition at line 263 of file HttpRequest.cpp.

References m_server_port.

00264 {
00265         return m_server_port;
00266 }

void HttpRequest::SetIsSsl ( bool  value  ) 

Definition at line 271 of file HttpRequest.cpp.

References m_is_ssl.

Referenced by Ajp13Socket::ReceiveForwardRequest().

00272 {
00273         m_is_ssl = value;
00274 }

bool HttpRequest::IsSsl (  )  const

Definition at line 277 of file HttpRequest.cpp.

References m_is_ssl.

00278 {
00279         return m_is_ssl;
00280 }

void HttpRequest::SetAttribute ( const std::string &  key,
const std::string &  value 
)

Set / Read attribute value.

Definition at line 285 of file HttpRequest.cpp.

References m_attribute.

Referenced by HttpBaseSocket::OnFirst(), and Ajp13Socket::ReceiveForwardRequest().

00286 {
00287         m_attribute[key] = value;
00288 }

void HttpRequest::SetAttribute ( const std::string &  key,
long  value 
)

Definition at line 291 of file HttpRequest.cpp.

References Utility::l2string(), and m_attribute.

00292 {
00293         m_attribute[key] = Utility::l2string(value);
00294 }

const std::string & HttpRequest::Attribute ( const std::string &  key  )  const

Definition at line 297 of file HttpRequest.cpp.

References m_attribute, and m_null.

00298 {
00299         Utility::ncmap<std::string>::const_iterator it;
00300         if ( (it = m_attribute.find(key)) != m_attribute.end())
00301                 return it -> second;
00302         return m_null;
00303 }

const Utility::ncmap< std::string > & HttpRequest::Attributes (  )  const

Definition at line 307 of file HttpRequest.cpp.

References m_attribute.

00308 {
00309         return m_attribute;
00310 }

void HttpRequest::AddCookie ( const std::string &  str  ) 

Cookies.

Definition at line 314 of file HttpRequest.cpp.

References HttpdCookies::add(), DEB, Parse::getword(), m_cookie, and m_cookies.

Referenced by HttpBaseSocket::OnHeader(), and Ajp13Socket::ReceiveForwardRequest().

00315 {
00316         m_cookies.add( str );
00317         Parse pa(str, ";");
00318         std::string lstr = pa.getword();
00319         while (!lstr.empty())
00320         {
00321                 Parse pa2(lstr, "=");
00322                 std::string name = pa2.getword();
00323                 m_cookie[name] = lstr;
00324 DEB(fprintf(stderr, " *** AddCookie '%s' = '%s'\n", name.c_str(), lstr.c_str());)
00325                 lstr = pa.getword();
00326         }
00327 }

const Utility::ncmap<std::string>& HttpRequest::CookieMap (  )  const [inline]

Definition at line 96 of file HttpRequest.h.

00096 { return m_cookie; }

void HttpRequest::InitBody ( size_t  sz  ) 

Open file for body data.

Definition at line 331 of file HttpRequest.cpp.

References DEB, and m_body_file.

Referenced by HttpBaseSocket::OnHeaderComplete(), and Ajp13Socket::ReceiveForwardRequest().

00332 {
00333         if (!m_body_file.get())
00334                 m_body_file = std::auto_ptr<IFile>(new MemFile);
00335 DEB(    else
00336                 fprintf(stderr, "Body data file already opened\n");)
00337 }

void HttpRequest::Write ( const char *  buf,
size_t  sz 
)

Write body data.

Definition at line 341 of file HttpRequest.cpp.

References DEB, and m_body_file.

Referenced by HttpBaseSocket::OnData(), and Ajp13Socket::ReceiveBody().

00342 {
00343         if (m_body_file.get())
00344                 m_body_file -> fwrite(buf, 1, sz);
00345 DEB(    else
00346                 fprintf(stderr, "Write: Body data file not open\n");)
00347 }

void HttpRequest::CloseBody (  ) 

No more writing.

Definition at line 351 of file HttpRequest.cpp.

References DEB, and m_body_file.

Referenced by HttpBaseSocket::OnData(), and Ajp13Socket::ReceiveBody().

00352 {
00353         if (m_body_file.get())
00354                 m_body_file -> fclose();
00355 DEB(    else
00356                 fprintf(stderr, "CloseBody: File not open\n");)
00357 }

void HttpRequest::ParseBody (  ) 

Definition at line 361 of file HttpRequest.cpp.

References HttpTransaction::ContentLength(), HttpTransaction::ContentType(), m_attribute, m_body_file, and m_form.

Referenced by HttpBaseSocket::Execute(), and Ajp13Socket::Execute().

00362 {
00363         Utility::ncmap<std::string>::const_iterator it;
00364         if ( (it = m_attribute.find("query_string")) != m_attribute.end())
00365         {
00366                 std::string qs = it -> second;
00367                 m_form = std::auto_ptr<HttpdForm>(new HttpdForm( qs, qs.size() ));
00368         }
00369         else
00370         if (m_body_file.get())
00371         {
00372                 m_form = std::auto_ptr<HttpdForm>(new HttpdForm( m_body_file.get(), ContentType(), ContentLength() ));
00373         }
00374         else
00375         {
00376                 // dummy
00377                 m_form = std::auto_ptr<HttpdForm>(new HttpdForm( "", 0 ));
00378         }
00379 }

const HttpdForm & HttpRequest::Form (  )  const

Definition at line 383 of file HttpRequest.cpp.

References m_form.

00384 {
00385         if (!m_form.get())
00386                 throw Exception("Form not available");
00387         return *m_form;
00388 }

const HttpdCookies & HttpRequest::Cookies (  )  const

Definition at line 392 of file HttpRequest.cpp.

References m_cookies.

00393 {
00394         return m_cookies;
00395 }

const IFile* HttpRequest::BodyFile (  )  const [inline]

Definition at line 112 of file HttpRequest.h.

00112 { return m_body_file.get(); }

void HttpRequest::Reset (  )  [virtual]

Reimplemented from HttpTransaction.

Definition at line 399 of file HttpRequest.cpp.

References m_attribute, m_body_file, m_cookie, m_cookies, m_form, m_is_ssl, m_method, m_protocol, m_remote_addr, m_remote_host, m_req_uri, m_server_name, m_server_port, HttpdCookies::Reset(), and HttpTransaction::Reset().

Referenced by HttpBaseSocket::Execute(), and Ajp13Socket::Reset().

00400 {
00401         HttpTransaction::Reset();
00402         m_method = "";
00403         m_protocol = "";
00404         m_req_uri = "";
00405         m_remote_addr = "";
00406         m_remote_host = "";
00407         m_server_name = "";
00408         m_server_port = 0;
00409         m_is_ssl = false;
00410         while (!m_attribute.empty())
00411         {
00412                 m_attribute.erase(m_attribute.begin());
00413         }
00414         m_body_file = std::auto_ptr<IFile>(NULL);
00415         m_form = std::auto_ptr<HttpdForm>(NULL);
00416         m_cookies.Reset();
00417         while (!m_cookie.empty())
00418         {
00419                 m_cookie.erase(m_cookie.begin());
00420         }
00421 }


Member Data Documentation

std::string HttpRequest::m_method [private]

Definition at line 117 of file HttpRequest.h.

Referenced by HttpMethod(), HttpRequest(), operator=(), Reset(), and SetHttpMethod().

std::string HttpRequest::m_protocol [private]

Definition at line 118 of file HttpRequest.h.

Referenced by HttpRequest(), HttpVersion(), operator=(), Reset(), and SetHttpVersion().

std::string HttpRequest::m_req_uri [private]

Definition at line 119 of file HttpRequest.h.

Referenced by HttpRequest(), operator=(), Reset(), SetUri(), and Uri().

std::string HttpRequest::m_remote_addr [private]

Definition at line 120 of file HttpRequest.h.

Referenced by HttpRequest(), operator=(), RemoteAddr(), Reset(), and SetRemoteAddr().

std::string HttpRequest::m_remote_host [private]

Definition at line 121 of file HttpRequest.h.

Referenced by HttpRequest(), operator=(), RemoteHost(), Reset(), and SetRemoteHost().

std::string HttpRequest::m_server_name [private]

Definition at line 122 of file HttpRequest.h.

Referenced by HttpRequest(), operator=(), Reset(), ServerName(), and SetServerName().

Definition at line 123 of file HttpRequest.h.

Referenced by HttpRequest(), operator=(), Reset(), ServerPort(), and SetServerPort().

bool HttpRequest::m_is_ssl [private]

Definition at line 124 of file HttpRequest.h.

Referenced by IsSsl(), operator=(), Reset(), and SetIsSsl().

Utility::ncmap<std::string> HttpRequest::m_attribute [private]

Definition at line 125 of file HttpRequest.h.

Referenced by Attribute(), Attributes(), operator=(), ParseBody(), Reset(), and SetAttribute().

std::string HttpRequest::m_null [private]

Reimplemented from HttpTransaction.

Definition at line 126 of file HttpRequest.h.

Referenced by Attribute(), and operator=().

std::auto_ptr<IFile> HttpRequest::m_body_file [mutable, private]

Definition at line 127 of file HttpRequest.h.

Referenced by CloseBody(), InitBody(), operator=(), ParseBody(), Reset(), and Write().

std::auto_ptr<HttpdForm> HttpRequest::m_form [mutable, private]

Definition at line 128 of file HttpRequest.h.

Referenced by Form(), HttpRequest(), operator=(), ParseBody(), and Reset().

Definition at line 129 of file HttpRequest.h.

Referenced by AddCookie(), Cookies(), operator=(), and Reset().

Utility::ncmap<std::string> HttpRequest::m_cookie [private]

Definition at line 130 of file HttpRequest.h.

Referenced by AddCookie(), operator=(), and Reset().


The documentation for this class was generated from the following files:
Page, code, and content Copyright (C) 2007 by Anders Hedström
Generated for C++ Sockets by  doxygen 1.4.4