diff options
Diffstat (limited to 'protocols/ace/HTBP/README')
-rw-r--r-- | protocols/ace/HTBP/README | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/protocols/ace/HTBP/README b/protocols/ace/HTBP/README deleted file mode 100644 index 577aaf15866..00000000000 --- a/protocols/ace/HTBP/README +++ /dev/null @@ -1,186 +0,0 @@ -// $Id$ - -This directory contains the HTTP Tunneling, Bidirectional, Protocol -implementation. This is a new streaming abstraction layered over an -HTTP document request/reply mechanism. It is designed to allow clients -that are inside a of a corporate firewall to communicate with servers -that are outside, hence HTTP Tunneling. Also, once a connection is -established, the outside peer is able to send asynchronous messages to -the inside peer, hence Bidirectional. - -HTBP provides Acceptor, Connector, and Stream classes that follow the -interface defined for the ACE_Acceptor and ACE_Connector -templates. This means that HTBP can be used right away with -applications designed to use these templates. - -Bidirectionality is achieved in the context of the proxy's restriction -by using two channels between the peers. One channel is defined for -data flow from the inside to the outside, data flow from the outside -in occurs on the other channel. In-to-out data is passed in the form -of a PUT command with the data payload marshalled into an -"application/gzip" buffer. On this channel, the outside peer always -responds with a simple document which serves as an ack. On the -out-to-in channel, the inside client must send a token request in the -form of a GET command. This request goes unfulfilled until the outside -peer has data to send, which it does by supplying an HTML document -that again encapsulates the data so that it may pass through the proxy -uncorrupted. - -The connections from the inside peer to the proxy, or from the proxy -to the outside peer may be closed by the proxy at any time. The inside -peer will automatically reconnect as needed when this happens. Since -the outside peer cannot actively connect to the proxy, it will queue -outbound messages as long as it can until a new out-to-in channel is -made available, at which time it will flush its queue. The sense of -channels may change over time, as the proxy may choose any local -connection to the server to send any request (GET or POST). - -The outside peer is identified using an ordinary INET addr, however -the inside peer uses a simple, transient unique ID to identify -itself. Inside peers will never have any type of persistent identity. -The unique ID used to identify the inside peer is usually a UUID value -as composed by ACE_UUID_Generator. However, a domain based unique ID -may also be obtainedusing HTBP::ID_Requestor::get_HTID(). If no domain -based ID generator is configured, get_HTID() will return a UUID value. - -As there are a variety of HTTP proxies available, HTBP uses a -pluggable filter class that defines the particular characteristics of -a proxy and is responsible for marshalling and unmarshalling binary -data. As of now there is a single filter available that works with a -defaulted Squid proxy and may also be used as a null filter, directly -connecting the inside and outside peers. This mode is useful for -testing. - -CONFIGURING HTBP -This is done through the ACE_Configuration framework. On windows -platforms, the Windows Registry may be used, whereas on non-windows, a -flat file is used to configure. Configuration data may also be -persisted in a memory mapped file. - -The configuration map contains a single section, HTBP, that contains -all the configurable parameters in name=value form. The following is -an example of a configuration file: - -[htbp] -proxy_host=<hostname> This is the hostname of the http - proxy through which all requests - will be sent. -proxy_port=<port> This is the proxy's port. -htid_url=<url> If a domain based unique id is - required, this is the URL of the - ID generator. -htid_via_proxy=<1|0> If the htid_url must be reached - via the proxy, set this to 1. - Default is 0, meaning the ID - generator is directly accessible. - -COMPANION DIRECTORIES: -$ACE_ROOT/tests/HTBP. These are the test drivers, which - also serve as example code. -$TAO_ROOT/orbsvcs/orbsvcs/HTIOP This is a TAO pluggable protocol - based on HTBP. -$TAO_ROOT/orbsvcs/tests/HTIOP The tests for HTIOP. - - -BACKGROUND INFORMATION - -HT Addresses - -The class HT_Addr is a subclass of ACE_INET_Addr class. The interface -for the HT_Addr is a common interface to be used with the inside and -outside peers. The inside peer is identified by a HTID while the -outside peer is identified with an ip address. Constructors are -provided to initialize the inside and outside peers in addition to the -default and copy constructors. addr_to_string and string_to_addr -methods from the base class are overridden to help convert the HT_Addr -to a string and vice versa. Finally, the class provides accessor -methods for the default local address and the default proxy addresses. - -The local address is the address of the inside peer and is obtained -using the singleton HTID_Requestor class. The HTID_Requestor class -sends a request to the web server that is running at the htid_url to -get the HTID unique to each inside peer. - -The proxy address is of ACE_INET_Addr type as it is no different to a -regular server. It is obtained using the singleton HT_Environment -class. The HT_Environment class helps read the HT configuration file -and provides acccessors to the proxy address, port and the htid url. - -The code below illustrates the initialization of a local or inside, -remote or outside and the proxy addresses using the classes -aforementioned. - - HT_Addr local(HTID_REQUESTOR::instance()->get_HTID()); - - char hostname [1000]; - if (ACE_OS::hostname (hostname, - 1000) == -1) - { - ACE_DEBUG ((LM_DEBUG, "Could not get the host name\n")); - return -1; - } - - HT_Addr remote (8088, hostname); - - char proxy_address [1000]; - HT_ENVIRONMENT::instance ()->get_proxy_address (proxy_address); - - unsigned int proxy_port; - HT_ENVIRONMENT::instance ()->get_proxy_port (proxy_port); - - ACE_INET_Addr proxy(port, proxy_address); - - -HT Streams - -The class HT_Stream is a sibling of the ACE_SOCK_IO class. It is used -to send and receive messages between two peers identified by their HT -addresses. It is made a sibling of the ACE_SOCK_IO class rather than -a decendant. This is due to the requirement in the HTBP protocol to -wrap all messages with an HTTP request or reply wrapper, and to send -application data in only one direction on one stream. - -HT Sessions - -A session is an entity that combines two HT_Streams that connect -directly to a proxy to manage communication with a remote peer. The -session may persist longer than either stream, assuming that the proxy -is libel to close a connection at any time. This means that the -session needs to be able to reconnect to the remote peer. This also -means that the session needs to be aware of its location. If it is -outside the proxy and looses a stream, nothing can really be done. If -it is inside, then the next time a stream is required, then it must -reconnect before returning the stream. The session does not queue -outbound messages. It will be the responsibility of the application or -a higher level protocol wrapper. - -Each session is identified by a special type, -HT_Session_Id_t. HT_Session_Id_t is a class with three members, the -local address, the peer address and an id of type ACE_UINT32. A -session map, .... - -Besides the default constructor and copy constructors, two other -constructors are provided to initialize a session and are shown below. - - - /// Constructor (sets the underlying session id with <sid>). - HT_Session (const HT_Addr& peer, - const HT_Addr& local = HT_Addr::default_local(), - ACE_UINT32 sid = 0, - ACE_INET_Addr *proxy = 0, - int take_proxy = 0); - - HT_Session (const HT_Session_Id_t &id, - ACE_INET_Addr *proxy = 0, - int take_proxy = 0); - - - -If a session id (sid) is not provided by the user, it is generated -using the static method HT_Session::next_session_id(). - -The following code illustrates the usage of HT_Stream and HT_Session -classes. - -HT_Filters -<TBD> |