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

ACE::INet::URL_Base Class Reference

#include <URLBase.h>

Inheritance diagram for ACE::INet::URL_Base:
Inheritance graph
[legend]
Collaboration diagram for ACE::INet::URL_Base:
Collaboration graph
[legend]

List of all members.

Classes

class  Factory

Public Member Functions

 URL_Base ()
virtual ~URL_Base ()
virtual bool parse (const ACE_CString &url_string)
void set_path (const ACE_CString &path)
virtual void set_query (const ACE_CString &query)
virtual void set_fragment (const ACE_CString &fragment)
virtual const ACE_CStringget_scheme () const =0
const ACE_CStringget_protocol () const
virtual ACE_CString get_authority () const
const ACE_CStringget_path () const
virtual const ACE_CStringget_query () const
virtual const ACE_CStringget_fragment () const
virtual URLStream open () const
virtual URLStream open (ClientRequestHandler &rh) const
virtual ACE_CString to_string () const =0
virtual bool validate ()

Static Public Member Functions

static URL_Basecreate_from_string (const ACE_CString &url_string)
static void register_factory (Factory *url_factory)
static void deregister_factory (Factory *url_factory)

Protected Member Functions

bool strip_scheme (ACE_CString &url_string)
virtual int parse_authority (std::istream &is)
virtual bool has_authority ()
virtual ClientRequestHandlercreate_default_request_handler () const =0

Static Protected Attributes

static const ACE_CString empty_

Private Types

typedef ACE_Map_Manager
< ACE_CString, Factory
*, ACE_SYNCH::MUTEX > 
TURLFactoryMap
typedef ACE_Singleton
< TURLFactoryMap,
ACE_SYNCH::NULL_MUTEX > 
TURLFactorySingleton

Private Attributes

ACE_CString path_

Static Private Attributes

static TURLFactoryMapfactories_ = 0

Detailed Description

Definition at line 60 of file URLBase.h.


Member Typedef Documentation

Definition at line 134 of file URLBase.h.

typedef ACE_Singleton<TURLFactoryMap, ACE_SYNCH::NULL_MUTEX> ACE::INet::URL_Base::TURLFactorySingleton [private]

Reimplemented in ACE::FTP::URL, ACE::HTTP::URL, and ACE::HTTPS::URL.

Definition at line 136 of file URLBase.h.


Constructor & Destructor Documentation

ACE::INet::URL_Base::URL_Base (  ) 

Definition at line 69 of file URLBase.cpp.

      {
      }

ACE::INet::URL_Base::~URL_Base (  )  [virtual]

Definition at line 73 of file URLBase.cpp.

{}


Member Function Documentation

virtual ClientRequestHandler* ACE::INet::URL_Base::create_default_request_handler (  )  const [protected, pure virtual]
URL_Base * ACE::INet::URL_Base::create_from_string ( const ACE_CString url_string  )  [static]

Definition at line 165 of file URLBase.cpp.

      {
        ACE_CString::size_type pos = url_string.find (':');
        if (pos >0 )
          {
            Factory* url_factory = 0;
            if (factories_->find (url_string.substr (0, pos), url_factory) == 0)
              {
                return url_factory->create_from_string (url_string);
              }
          }

        return 0;
      }

void ACE::INet::URL_Base::deregister_factory ( Factory url_factory  )  [static]

Definition at line 227 of file URLBase.cpp.

      {
        if (factories_ && url_factory)
          {
            factories_->unbind (url_factory->protocol ());
          };
      }

ACE_CString ACE::INet::URL_Base::get_authority (  )  const [inline, virtual]

Reimplemented in ACE::INet::URL_INetBase, and ACE::INet::URL_INetAuthBase.

Definition at line 52 of file URLBase.inl.

      {
        return empty_;
      }

const ACE_CString & ACE::INet::URL_Base::get_fragment (  )  const [inline, virtual]

Reimplemented in ACE::HTTP::URL.

Definition at line 46 of file URLBase.inl.

      {
        return empty_;
      }

const ACE_CString & ACE::INet::URL_Base::get_path (  )  const [inline]

Definition at line 18 of file URLBase.inl.

      {
        return this->path_;
      }

const ACE_CString & ACE::INet::URL_Base::get_protocol (  )  const [inline]

Definition at line 12 of file URLBase.inl.

      {
        return this->get_scheme ();
      }

const ACE_CString & ACE::INet::URL_Base::get_query (  )  const [inline, virtual]

Reimplemented in ACE::HTTP::URL.

Definition at line 40 of file URLBase.inl.

      {
        return empty_;
      }

virtual const ACE_CString& ACE::INet::URL_Base::get_scheme (  )  const [pure virtual]
bool ACE::INet::URL_Base::has_authority (  )  [protected, virtual]

Reimplemented in ACE::INet::URL_INetBase.

Definition at line 137 of file URLBase.cpp.

      {
        return false;
      }

URLStream ACE::INet::URL_Base::open ( void   )  const [virtual]

Definition at line 147 of file URLBase.cpp.

      {
        ClientRequestHandler* rh = this->create_default_request_handler ();
        if (rh)
          {
            rh->handle_open_request (*this);
            return URLStream (rh);
          }
        else
          return URLStream (0);
      }

URLStream ACE::INet::URL_Base::open ( ClientRequestHandler rh  )  const [virtual]

Definition at line 159 of file URLBase.cpp.

      {
        rh.handle_open_request (*this);
        return URLStream (rh);
      }

bool ACE::INet::URL_Base::parse ( const ACE_CString url_string  )  [virtual]

Definition at line 75 of file URLBase.cpp.

      {
        static const int eof =
          std::char_traits<ACE::IOS::CString_OStream::char_type>::eof ();

        ACE_CString uri = url_string;
        if (this->strip_scheme (uri))
          {
            ACE::IOS::CString_OStream sos;
            ACE::IOS::CString_IStream sis (uri);

            int ch;

            // parse authority part (if any)
            if ((ch = this->parse_authority (sis)) == '/' ||
                !this->has_authority ())      // relative paths allowed if no authority
              {
                // parse path part
                sos.put (ch);
                for (ch = sis.get (); ch != '?' && ch != '#' && ch != eof ;ch = sis.get ())
                  sos.put (ch);
                this->set_path (sos.str ());
                sos.clear ();
              }
            else
              {
                // empty path
                this->set_path (empty_);
              }

            if (ch == '?')
              {
                // parse query part
                for (ch = sis.get (); ch != '#' && ch != eof ;ch = sis.get ())
                  sos.put (ch);
                this->set_query (sos.str ());
                sos.clear ();
              }

            if (ch == '#')
              {
                // get fragment
                sos << sis.rdbuf ();
                this->set_fragment (sos.str ());
              }
            else if (ch != eof)
              {
                // should not happen
                return false;
              }

            // check for (minimum) correctness
            return this->validate ();
          }
        return false;
      }

int ACE::INet::URL_Base::parse_authority ( std::istream &  is  )  [protected, virtual]

Reimplemented in ACE::INet::URL_INetBase, and ACE::INet::URL_INetAuthBase.

Definition at line 132 of file URLBase.cpp.

      {
        return is.get ();
      }

void ACE::INet::URL_Base::register_factory ( Factory url_factory  )  [static]

Definition at line 217 of file URLBase.cpp.

      {
        if (factories_ == 0)
          {
            factories_ = URL_Base::TURLFactorySingleton::instance ();
          }
        if (url_factory)
          factories_->bind (url_factory->protocol (), url_factory);
      }

void ACE::INet::URL_Base::set_fragment ( const ACE_CString fragment  )  [inline, virtual]

Definition at line 35 of file URLBase.inl.

      {
      }

void ACE::INet::URL_Base::set_path ( const ACE_CString path  )  [inline]

Definition at line 24 of file URLBase.inl.

      {
        this->path_ = path;
      }

void ACE::INet::URL_Base::set_query ( const ACE_CString query  )  [inline, virtual]

Definition at line 30 of file URLBase.inl.

      {
      }

bool ACE::INet::URL_Base::strip_scheme ( ACE_CString url_string  )  [protected]

Definition at line 197 of file URLBase.cpp.

      {
        // since this will be called at a point where the
        // actual URL class is already known (and with that
        // the protocol prefix) we allow for the fact we
        // may get a url passed without the actual prefix

        ACE_CString::size_type pos = url_string.find (':');
        if (pos > 0 && url_string[pos+1] == '/' && url_string[pos+1] == '/')
          {
            // in case we find a scheme check for the right protocol
            if (this->get_protocol () != url_string.substr (0, pos))
              {
                return false;
              }
            url_string = url_string.substr (pos+3); // skip '<protocol>://'
          }
        return true;
      }

virtual ACE_CString ACE::INet::URL_Base::to_string (  )  const [pure virtual]

Implemented in ACE::FTP::URL, and ACE::HTTP::URL.

bool ACE::INet::URL_Base::validate (  )  [virtual]

Reimplemented in ACE::INet::URL_INetBase.

Definition at line 142 of file URLBase.cpp.

      {
        return true;
      }


Member Data Documentation

const ACE_CString ACE::INet::URL_Base::empty_ [static, protected]

Definition at line 105 of file URLBase.h.

Definition at line 137 of file URLBase.h.

Definition at line 116 of file URLBase.h.


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