Classes | Public Member Functions | Protected Member Functions | Private Attributes

ACE::HTTP::ClientRequestHandler Class Reference

#include <HTTP_ClientRequestHandler.h>

Inheritance diagram for ACE::HTTP::ClientRequestHandler:
Inheritance graph
[legend]
Collaboration diagram for ACE::HTTP::ClientRequestHandler:
Collaboration graph
[legend]

List of all members.

Classes

class  HttpConnectionKey

Public Member Functions

 ClientRequestHandler ()
virtual ~ClientRequestHandler ()
virtual Requestrequest ()
virtual const Requestrequest () const
virtual Responseresponse ()
virtual const Responseresponse () const
std::ostream & request_stream ()
virtual std::istream & response_stream ()
virtual bool is_response_ok () const
virtual std::istream & handle_open_request (const ACE::INet::URL_Base &url)
virtual std::istream & handle_get_request (const URL &url)

Protected Member Functions

virtual void on_eof ()
SessionHoldersession ()
void session (SessionHolder *session)
virtual bool initialize_connection (const ACE_CString &scheme, const ACE_CString &host, u_short port, bool proxy_conn=false, const ACE_CString &proxy_host=Request::EMPTY, u_short proxy_port=0)
virtual void initialize_request (const URL &url, Request &request)
virtual void handle_request_error (const URL &url)
virtual void handle_connection_error (const URL &url)
void release_connection ()
void close_connection ()

Private Attributes

Request request_
Response response_
SessionHoldersession_

Detailed Description

Definition at line 146 of file HTTP_ClientRequestHandler.h.


Constructor & Destructor Documentation

ACE::HTTP::ClientRequestHandler::ClientRequestHandler (  ) 

Definition at line 190 of file HTTP_ClientRequestHandler.cpp.

ACE::HTTP::ClientRequestHandler::~ClientRequestHandler (  )  [virtual]

Definition at line 196 of file HTTP_ClientRequestHandler.cpp.

      {
        this->release_connection ();
      }


Member Function Documentation

void ACE::HTTP::ClientRequestHandler::close_connection (  )  [protected]

Definition at line 340 of file HTTP_ClientRequestHandler.cpp.

      {
        if (this->session_)
          {
            if (this->session ()->is_proxy_connection ())
              {
                this->connection_cache ().release_connection (
                    HttpConnectionKey (this->session ()->get_host (),
                                       this->session ()->get_port (),
                                       this->session ()->get_proxy_target_host (),
                                       this->session ()->get_proxy_target_port ()),
                    this->session_);
              }
            else
              {
                this->connection_cache ().release_connection (
                    HttpConnectionKey (this->session ()->get_host (),
                                       this->session ()->get_port ()),
                    this->session_);
              }
            this->session_ = 0;
          }
      }

void ACE::HTTP::ClientRequestHandler::handle_connection_error ( const URL url  )  [protected, virtual]

Reimplemented in My_HTTP_RequestHandler.

Definition at line 312 of file HTTP_ClientRequestHandler.cpp.

      {
      }

std::istream & ACE::HTTP::ClientRequestHandler::handle_get_request ( const URL url  )  [virtual]

Definition at line 214 of file HTTP_ClientRequestHandler.cpp.

      {
        bool connected = false;
        if (http_url.has_proxy ())
          connected = this->initialize_connection (http_url.get_scheme (),
                                                   http_url.get_host(),
                                                   http_url.get_port (),
                                                   true,
                                                   http_url.get_proxy_host(),
                                                   http_url.get_proxy_port ());
        else
          connected = this->initialize_connection (http_url.get_scheme (),
                                                   http_url.get_host(),
                                                   http_url.get_port ());

        if (connected)
          {
            this->request_.reset (Request::HTTP_GET,
                                  http_url.get_request_uri (),
                                  this->request_.get_version ());

            this->response_.reset ();

            this->initialize_request (http_url, this->request_);

            if (!this->session ()->send_request (this->request_) ||
                !this->session ()->receive_response (this->response_))
              {
                this->close_connection ();

                this->handle_request_error(http_url);
              }
          }
        else
          {
            this->handle_connection_error (http_url);
          }

        return this->response_stream ();
      }

std::istream & ACE::HTTP::ClientRequestHandler::handle_open_request ( const ACE::INet::URL_Base url  )  [virtual]

Definition at line 207 of file HTTP_ClientRequestHandler.cpp.

      {
        const URL& http_url = dynamic_cast<const URL&> (url);
        return this->handle_get_request (http_url);
      }

void ACE::HTTP::ClientRequestHandler::handle_request_error ( const URL url  )  [protected, virtual]

Reimplemented in My_HTTP_RequestHandler.

Definition at line 308 of file HTTP_ClientRequestHandler.cpp.

      {
      }

bool ACE::HTTP::ClientRequestHandler::initialize_connection ( const ACE_CString scheme,
const ACE_CString host,
u_short  port,
bool  proxy_conn = false,
const ACE_CString proxy_host = Request::EMPTY,
u_short  proxy_port = 0 
) [protected, virtual]

Definition at line 261 of file HTTP_ClientRequestHandler.cpp.

      {
        SessionFactory* session_factory =
          SessionFactoryRegistry::instance ().find_session_factory (scheme);

        if (session_factory == 0)
          {
            INET_ERROR (1, (LM_ERROR, DLINFO
                            ACE_TEXT ("ClientRequestHandler::initialize_connection - ")
                            ACE_TEXT ("unable to find session factory for scheme [%C]\n"),
                            scheme.c_str ()));
            return false;
          }

        ACE::INet::ConnectionHolder* pch = 0;
        if (proxy_conn)
          {
            if (!this->connection_cache ().claim_connection (HttpConnectionKey (proxy_host,
                                                                                proxy_port,
                                                                                host,
                                                                                port),
                                                            pch,
                                                            *session_factory))
              return false;
          }
        else
          {
            if (!this->connection_cache ().claim_connection (HttpConnectionKey (host,
                                                                                port),
                                                            pch,
                                                            *session_factory))
              return false;
          }

        this->session (dynamic_cast<SessionHolder*> (pch));
        return true;
      }

void ACE::HTTP::ClientRequestHandler::initialize_request ( const URL url,
Request request 
) [protected, virtual]

Definition at line 304 of file HTTP_ClientRequestHandler.cpp.

      {
      }

bool ACE::HTTP::ClientRequestHandler::is_response_ok (  )  const [virtual]

Definition at line 201 of file HTTP_ClientRequestHandler.cpp.

      {
        return this->response_.get_status ().is_ok () &&
                !const_cast<ClientRequestHandler*> (this)->response_stream ().bad ();
      }

void ACE::HTTP::ClientRequestHandler::on_eof ( void   )  [protected, virtual]

Reimplemented from ACE::IOS::StreamInterceptorBase< ACE_CHAR_T, TR >.

Reimplemented in My_HTTP_RequestHandler.

Definition at line 256 of file HTTP_ClientRequestHandler.cpp.

      {
        this->release_connection ();
      }

void ACE::HTTP::ClientRequestHandler::release_connection (  )  [protected]

Definition at line 316 of file HTTP_ClientRequestHandler.cpp.

      {
        if (this->session_)
          {
            if (this->session ()->is_proxy_connection ())
              {
                this->connection_cache ().release_connection (
                    HttpConnectionKey (this->session ()->get_host (),
                                       this->session ()->get_port (),
                                       this->session ()->get_proxy_target_host (),
                                       this->session ()->get_proxy_target_port ()),
                    this->session_);
              }
            else
              {
                this->connection_cache ().release_connection (
                    HttpConnectionKey (this->session ()->get_host (),
                                       this->session ()->get_port ()),
                    this->session_);
              }
            this->session_ = 0;
          }
      }

const Request & ACE::HTTP::ClientRequestHandler::request (  )  const [inline, virtual]

Definition at line 48 of file HTTP_ClientRequestHandler.inl.

      {
        return this->request_;
      }

Request & ACE::HTTP::ClientRequestHandler::request (  )  [inline, virtual]

Definition at line 42 of file HTTP_ClientRequestHandler.inl.

      {
        return this->request_;
      }

std::ostream & ACE::HTTP::ClientRequestHandler::request_stream (  )  [inline]

Definition at line 78 of file HTTP_ClientRequestHandler.inl.

      {
        return this->session_ ?
          this->session ()->request_stream (*this) :
          ACE::IOS::Null::out_stream_;
      }

const Response & ACE::HTTP::ClientRequestHandler::response (  )  const [inline, virtual]

Definition at line 60 of file HTTP_ClientRequestHandler.inl.

      {
        return this->response_;
      }

Response & ACE::HTTP::ClientRequestHandler::response (  )  [inline, virtual]

Definition at line 54 of file HTTP_ClientRequestHandler.inl.

      {
        return this->response_;
      }

std::istream & ACE::HTTP::ClientRequestHandler::response_stream (  )  [inline, virtual]

Definition at line 86 of file HTTP_ClientRequestHandler.inl.

      {
        return this->session_ ?
          this->session ()->response_stream (*this) :
          ACE::IOS::Null::in_stream_;
      }

SessionHolder & ACE::HTTP::ClientRequestHandler::session (  )  [inline, protected]

Definition at line 66 of file HTTP_ClientRequestHandler.inl.

      {
        return *this->session_;
      }

void ACE::HTTP::ClientRequestHandler::session ( SessionHolder session  )  [inline, protected]

Definition at line 72 of file HTTP_ClientRequestHandler.inl.

      {
        this->session_ = session;
      }


Member Data Documentation

Definition at line 235 of file HTTP_ClientRequestHandler.h.

Definition at line 236 of file HTTP_ClientRequestHandler.h.

Definition at line 237 of file HTTP_ClientRequestHandler.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines