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 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