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 ()
HttpRequest & operator= (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 HttpdForm & Form () const
const HttpdCookies & Cookies () const
const IFile * BodyFile () 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< IFile > m_body_file
std::auto_ptr< HttpdForm > m_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 59 of file HttpRequest.cpp.

00059                          : HttpTransaction()
00060 , m_server_port(0)
00061 , m_is_ssl(false)
00062 , m_body_file(NULL)
00063 , m_form(NULL)
00064 {
00065 }

HttpRequest::HttpRequest ( FILE *  fil  ) 

Create from plain old cgi request.

Definition at line 70 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().

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

HttpRequest::HttpRequest ( const HttpRequest &  src  ) 

Definition at line 127 of file HttpRequest.cpp.

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

HttpRequest::~HttpRequest (  ) 

Definition at line 147 of file HttpRequest.cpp.

00148 {
00149 }


Member Function Documentation

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

Definition at line 153 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.

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

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

Get, Post.

Definition at line 177 of file HttpRequest.cpp.

References m_method.

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

00178 {
00179         m_method = value;
00180 }

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

Definition at line 183 of file HttpRequest.cpp.

References m_method.

00184 {
00185         return m_method;
00186 }

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

HTTP/1.x.

Definition at line 191 of file HttpRequest.cpp.

References m_protocol.

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

00192 {
00193         m_protocol = value;
00194 }

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

Definition at line 197 of file HttpRequest.cpp.

References m_protocol.

Referenced by HttpBaseSocket::Execute().

00198 {
00199         return m_protocol;
00200 }

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

Definition at line 205 of file HttpRequest.cpp.

References m_req_uri.

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

00206 {
00207         m_req_uri = value;
00208 }

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

Definition at line 211 of file HttpRequest.cpp.

References m_req_uri.

00212 {
00213         return m_req_uri;
00214 }

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

Definition at line 219 of file HttpRequest.cpp.

References m_remote_addr.

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

00220 {
00221         m_remote_addr = value;
00222 }

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

Definition at line 225 of file HttpRequest.cpp.

References m_remote_addr.

00226 {
00227         return m_remote_addr;
00228 }

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

Definition at line 233 of file HttpRequest.cpp.

References m_remote_host.

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

00234 {
00235         m_remote_host = value;
00236 }

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

Definition at line 239 of file HttpRequest.cpp.

References m_remote_host.

00240 {
00241         return m_remote_host;
00242 }

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

Definition at line 247 of file HttpRequest.cpp.

References m_server_name.

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

00248 {
00249         m_server_name = value;
00250 }

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

Definition at line 253 of file HttpRequest.cpp.

References m_server_name.

00254 {
00255         return m_server_name;
00256 }

void HttpRequest::SetServerPort ( int  value  ) 

Definition at line 261 of file HttpRequest.cpp.

References m_server_port.

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

00262 {
00263         m_server_port = value;
00264 }

int HttpRequest::ServerPort (  )  const

Definition at line 267 of file HttpRequest.cpp.

References m_server_port.

00268 {
00269         return m_server_port;
00270 }

void HttpRequest::SetIsSsl ( bool  value  ) 

Definition at line 275 of file HttpRequest.cpp.

References m_is_ssl.

Referenced by Ajp13Socket::ReceiveForwardRequest().

00276 {
00277         m_is_ssl = value;
00278 }

bool HttpRequest::IsSsl (  )  const

Definition at line 281 of file HttpRequest.cpp.

References m_is_ssl.

00282 {
00283         return m_is_ssl;
00284 }

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

Set / Read attribute value.

Definition at line 289 of file HttpRequest.cpp.

References m_attribute.

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

00290 {
00291         m_attribute[key] = value;
00292 }

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

Definition at line 295 of file HttpRequest.cpp.

References Utility::l2string(), and m_attribute.

00296 {
00297         m_attribute[key] = Utility::l2string(value);
00298 }

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

Definition at line 301 of file HttpRequest.cpp.

References m_attribute, and m_null.

00302 {
00303         Utility::ncmap<std::string>::const_iterator it;
00304         if ( (it = m_attribute.find(key)) != m_attribute.end())
00305                 return it -> second;
00306         return m_null;
00307 }

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

Definition at line 311 of file HttpRequest.cpp.

References m_attribute.

00312 {
00313         return m_attribute;
00314 }

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

Cookies.

Definition at line 318 of file HttpRequest.cpp.

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

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

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

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 335 of file HttpRequest.cpp.

References DEB, and m_body_file.

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

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

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

Write body data.

Definition at line 345 of file HttpRequest.cpp.

References DEB, and m_body_file.

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

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

void HttpRequest::CloseBody (  ) 

No more writing.

Definition at line 355 of file HttpRequest.cpp.

References DEB, and m_body_file.

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

00356 {
00357         if (m_body_file.get())
00358                 m_body_file -> fclose();
00359 DEB(    else
00360                 fprintf(stderr, "CloseBody: File not open\n");)
00361 }

void HttpRequest::ParseBody (  ) 

Definition at line 365 of file HttpRequest.cpp.

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

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

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

const HttpdForm & HttpRequest::Form (  )  const

Definition at line 387 of file HttpRequest.cpp.

References m_form.

00388 {
00389         if (!m_form.get())
00390                 throw Exception("Form not available");
00391         return *m_form;
00392 }

const HttpdCookies & HttpRequest::Cookies (  )  const

Definition at line 396 of file HttpRequest.cpp.

References m_cookies.

00397 {
00398         return m_cookies;
00399 }

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 403 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().

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


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