diff options
author | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-03-05 17:14:45 +0000 |
---|---|---|
committer | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-03-05 17:14:45 +0000 |
commit | 58033491c6d0bac82315c1fdb1ec9b39be58093f (patch) | |
tree | c69c3aa67ec66758066e959bd0d533ea336ec236 /protocols/ace/HTBP | |
parent | 2efc882384a34f61311a24fc641d1b5fd5776356 (diff) | |
download | ATCD-TAO-1_5.tar.gz |
This commit was manufactured by cvs2svn to create tag 'TAO-1_5'.TAO-1_5
Diffstat (limited to 'protocols/ace/HTBP')
34 files changed, 0 insertions, 4428 deletions
diff --git a/protocols/ace/HTBP/ACE_HTBP.pc.in b/protocols/ace/HTBP/ACE_HTBP.pc.in deleted file mode 100644 index 0ac5c75b8cf..00000000000 --- a/protocols/ace/HTBP/ACE_HTBP.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: ACE_HTBP -Description: ACE HTTP Tunneling, Bidirectional, Protocol -Requires: ACE -Version: @VERSION@ -Libs: -L${libdir} -lACE_HTBP -Cflags: -I${includedir} diff --git a/protocols/ace/HTBP/HTBP.mpc b/protocols/ace/HTBP/HTBP.mpc deleted file mode 100644 index ada3fc8530d..00000000000 --- a/protocols/ace/HTBP/HTBP.mpc +++ /dev/null @@ -1,12 +0,0 @@ -// -*- MPC -*- -// $Id$ - -project(HTBP) : acelib, core { - avoids += ace_for_tao - sharedname = ACE_HTBP - dynamicflags = HTBP_BUILD_DLL - - Pkgconfig_Files { - ACE_HTBP.pc.in - } -} diff --git a/protocols/ace/HTBP/HTBP_Addr.cpp b/protocols/ace/HTBP/HTBP_Addr.cpp deleted file mode 100644 index aff894e80dc..00000000000 --- a/protocols/ace/HTBP/HTBP_Addr.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// $Id$ - -#include "HTBP_Addr.h" -#include "ace/OS_NS_string.h" - -ACE_RCSID (HTBP, - ACE_HTBP_Addr, - "$Id$") - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -// Constructor -ACE::HTBP::Addr::Addr () -{ -} - -// Creates a ACE_INET_Addr from a PORT_NUMBER and the remote -// HOST_NAME. - -ACE::HTBP::Addr::Addr (u_short port_number, - const char host_name[], - int address_family) - : ACE_INET_Addr (port_number, host_name, address_family), - htid_ () -{ -} - -ACE::HTBP::Addr::Addr (const char *htid) - : htid_(htid) -{ -} - -ACE::HTBP::Addr::Addr (const ACE::HTBP::Addr &other) - : ACE_INET_Addr (other), - htid_(other.htid_) -{ - -} - -// Destructor -ACE::HTBP::Addr::~Addr () -{ -} - -int -ACE::HTBP::Addr::set (u_short port, - const char host[], - const char *htid) -{ - if (htid != 0 && ACE_OS::strlen (htid) != 0) - return this->set_htid (htid); - return this->ACE_INET_Addr::set(port,host); -} - -int -ACE::HTBP::Addr::set_htid (const char *htid) -{ - this->htid_ = htid; - this->set_port_number (0); - return 0; -} - -const char * -ACE::HTBP::Addr::get_htid (void) const -{ - return this->htid_.c_str(); -} - -int -ACE::HTBP::Addr::addr_to_string (ACE_TCHAR buffer[], - size_t size, - int ipaddr_format) const -{ - if (this->htid_.length() == 0) - return this->ACE_INET_Addr::addr_to_string(buffer,size,ipaddr_format); - if (size < htid_.length()) - return -1; - ACE_OS::strncpy (buffer, - ACE_TEXT_CHAR_TO_TCHAR(htid_.c_str()), - size); - return 0; -} - -int -ACE::HTBP::Addr::string_to_addr (const char address[]) -{ - // if (ACE_OS::strchr (address,':')) - return this->ACE_INET_Addr::string_to_addr(address); - // this->htid_ = address; - // return 0; -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Addr.h b/protocols/ace/HTBP/HTBP_Addr.h deleted file mode 100644 index 14241b3c3b6..00000000000 --- a/protocols/ace/HTBP/HTBP_Addr.h +++ /dev/null @@ -1,91 +0,0 @@ -// -*- C++ -*- - -//============================================================================= -/** - * @file HTBP_Addr.h - * - * $Id$ - * - * @author Phil Mesnier - */ -//============================================================================= - -#ifndef ACE_HTBP_ADDR_H -#define ACE_HTBP_ADDR_H -#include /**/ "ace/pre.h" - -#include "HTBP_Export.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "ace/INET_Addr.h" -#include "ace/Synch.h" -#include "ace/SString.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -namespace ACE -{ - namespace HTBP - { - - /** - * @class Addr - * - * @brief Defines the member functions of the pure virtual class - * Addr - * - * This class derives from ACE_INET_Addr. It is the base class for - * the Inside, Proxy and Outside classes - */ - class HTBP_Export Addr : public ACE_INET_Addr - { - public: - /// Constructor - Addr (); - - Addr (const Addr &other); - - /// Create an Addr suitable for use on the inside of a firewall this - /// take a string used to populate the htid_ member. With this address, - /// the IP addr form is ignored. - Addr (const char *htid); - - /// Initialize an Addr for the outside of a firewall. In this form, - /// the htid_ is an empty string and the arguments are passed to the - /// base address type. - Addr (u_short port_number, - const char host_name[], - int address_family = AF_UNSPEC); - - /// Destructor - virtual ~Addr (); - - int set (u_short port, - const char host [], - const char *htid); - - /// Methods to help convert the OutSide_Addr to a String - /// and vice versa - int addr_to_string (ACE_TCHAR buffer[], - size_t size, - int ipaddr_format = 1) const; - int string_to_addr (const char address[]); - - int set_htid(const char *htid); - const char *get_htid (void) const; - - private: - /// HTID - web-obtained unique-identifier - ACE_CString htid_; - }; - - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_ADDR_H */ diff --git a/protocols/ace/HTBP/HTBP_Channel.cpp b/protocols/ace/HTBP/HTBP_Channel.cpp deleted file mode 100644 index 064312377ba..00000000000 --- a/protocols/ace/HTBP/HTBP_Channel.cpp +++ /dev/null @@ -1,537 +0,0 @@ -/* -*- C++ -*- */ - -//============================================================================= -/** - * @file HTBP_Channel.cpp - * - * $Id$ - * - * @author Phil Mesnier, Priyanka Gontla - */ -//============================================================================= -#include "HTBP_Channel.h" - -#if !defined (__ACE_INLINE__) -#include "HTBP_Channel.inl" -#endif - -#include "HTBP_Session.h" -#include "HTBP_Filter_Factory.h" - -#include "ace/Message_Block.h" -#include "ace/Reactor.h" - - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -// Initialization and termination methods. -/// Constructor. -ACE::HTBP::Channel::Channel (ACE::HTBP::Session *s) - : filter_ (0), - session_ (s), - ace_stream_ (), - notifier_ (0), - leftovers_ (1000), - data_len_ (0), - data_consumed_ (0), - state_ (Init), - error_buffer_ (0) -{ - ACE_NEW (this->notifier_,ACE::HTBP::Notifier(this)); - this->filter_ = get_filter (); - this->request_count_ = static_cast<unsigned long> (ACE_OS::time()); -} - -/// Constructor, takes ownership of the supplied stream -ACE::HTBP::Channel::Channel (ACE_SOCK_Stream &s) - : filter_ (0), - session_ (0), - ace_stream_ (s.get_handle()), - notifier_ (0), - leftovers_ (1000), - data_len_ (0), - data_consumed_ (0), - state_ (Init), - error_buffer_ (0) - -{ - filter_ = get_filter (); - this->request_count_ = static_cast<unsigned long> (ACE_OS::time()); -} - -ACE::HTBP::Channel::Channel (ACE_HANDLE h) - : filter_ (0), - session_ (0), - ace_stream_ (h), - notifier_ (0), - leftovers_ (1000), - data_len_ (0), - data_consumed_ (0), - state_ (Init), - error_buffer_ (0) -{ - filter_ = get_filter (); - this->request_count_ = static_cast<unsigned long> (ACE_OS::time()); -} - -/// Destructor. -ACE::HTBP::Channel::~Channel (void) -{ - delete this->filter_; - delete this->notifier_; -} - - /// Dump the state of an object. -void -ACE::HTBP::Channel::dump (void) const -{ -} - -unsigned long -ACE::HTBP::Channel::request_count (void) -{ - return this->request_count_++; -} - -void -ACE::HTBP::Channel::register_notifier (ACE_Reactor *r) -{ - if (r == 0) - return; - if (this->notifier_ == 0) - { - ACE_NEW (this->notifier_,ACE::HTBP::Notifier(this)); - } - else - { - if (notifier_->get_handle() == ACE_INVALID_HANDLE) - { - delete this->notifier_; - ACE_NEW (this->notifier_,ACE::HTBP::Notifier(this)); - } - } - - r->register_handler(notifier_,ACE_Event_Handler::READ_MASK); -} - -ACE::HTBP::Notifier * -ACE::HTBP::Channel::notifier (void) -{ - return this->notifier_; -} - -ACE_HANDLE -ACE::HTBP::Channel::get_handle (void) const -{ - return this->ace_stream_.get_handle (); -} - -void -ACE::HTBP::Channel::data_consumed (size_t n) -{ - this->data_consumed_ += n; - if (this->data_consumed_ == this->data_len_) - { - this->filter_->recv_data_trailer(this); - this->filter_->send_ack(this); - } -} - -int -ACE::HTBP::Channel::load_buffer (void) -{ - this->leftovers_.crunch(); - if (this->state() == Detached || - this->state() == Ack_Sent) - { - this->data_len_ = 0; - this->data_consumed_ = 0; - } - - ssize_t nread = 0; - errno = 0; -#if 0 - if (this->session_ && - (this->session_->sock_flags() & ACE_NONBLOCK == ACE_NONBLOCK)) -#endif - { - nread = - ACE::handle_read_ready (this->ace_stream().get_handle(), - &ACE_Time_Value::zero); - if (nread == -1 && errno == ETIME) - errno = EWOULDBLOCK; - } - if (nread != -1) - nread = this->ace_stream().recv (this->leftovers_.wr_ptr(), - this->leftovers_.space()); - if (nread < 1) - { - if (nread == 0 || (errno != EWOULDBLOCK && errno != EAGAIN)) - { - this->state_ = Closed; -#if 0 - ACE_ERROR ((LM_ERROR, - "load_buffer[%d] %p\n", - this->ace_stream_.get_handle(),"recv")); -#endif - } - return nread; - } - this->leftovers_.wr_ptr(nread); - *this->leftovers_.wr_ptr() = '\0'; -#if 0 - ACE_DEBUG ((LM_DEBUG,"load_buffer[%d] received %d \n", - this->ace_stream_.get_handle(),leftovers_.length())); - ACE_HEX_DUMP ((LM_DEBUG,leftovers_.rd_ptr(),leftovers_.length())); -#endif - return nread; -} - -int -ACE::HTBP::Channel::flush_buffer (void) -{ - if (this->session_) - return this->session_->flush_outbound_queue(); - return 0; -} - -int -ACE::HTBP::Channel::send_ack (void) -{ - return this->filter_->send_ack(this); -} - -int -ACE::HTBP::Channel::recv_ack (void) -{ - if (load_buffer() == -1) - return -1; - return this->filter_->recv_ack(this); -} - -void -ACE::HTBP::Channel::state (ACE::HTBP::Channel::State s) -{ - if (s == Detached) - { - this->session_->detach(this); - this->session_ = 0; - } - this->state_ = s; -} - -int -ACE::HTBP::Channel::consume_error (void) -{ - if (error_buffer_ == 0) - { - ACE_NEW_RETURN (error_buffer_, - ACE_Message_Block (this->data_len_ + 1), - 0); - } - - ssize_t result = 0; - size_t n = error_buffer_->size(); - char *buf = error_buffer_->wr_ptr(); - - if (this->leftovers_.length() > 0) - { - result = ACE_MIN (n,this->leftovers_.length()); - ACE_OS::memcpy (buf,this->leftovers_.rd_ptr(), result); - this->leftovers_.rd_ptr(result); - buf += result; - } - - if (result < (ssize_t)n && - result < (ssize_t)data_len_) - { - n -= result; - result += this->ace_stream_.recv(buf, n); - } - if (result > 0) - { - this->error_buffer_->wr_ptr(result); - this->data_consumed_ += result; - if (this->data_consumed_ == this->data_len_) - { - *this->error_buffer_->wr_ptr() = '\0'; - ACE_DEBUG ((LM_DEBUG,"Received entire error buffer: \n%s\n", - this->error_buffer_->rd_ptr())); - delete error_buffer_; - error_buffer_ = 0; - - return 1; - } - } - return 0; -} - -//--------------------------------------------------------------------------- -// = I/O functions. - -/// The ACE::HTBP::Channel is a sibling of the ACE_SOCK_IO class, rather than a -/// decendant. This is due to the requirement to wrap all messages with -/// an HTTP request or reply wrapper, and to send application data in only -/// one direction on one stream. - -int -ACE::HTBP::Channel::pre_recv(void) -{ - if (this->state_ == Init || - this->state_ == Detached || - this->state_ == Header_Pending || - this->state_ == Ack_Sent) - { - if (this->load_buffer() == -1 && this->leftovers_.length() == 0) - { - if (errno != EWOULDBLOCK) - this->state_ = Closed; - ACE_DEBUG ((LM_DEBUG,"pre_recv returning -1, state = %d\n",state_)); - return -1; - } - if (this->filter_->recv_data_header(this) == -1) - ACE_DEBUG ((LM_DEBUG,"recv_data_header failed, %p\n","pre_recv")); - } - switch (this->state_) - { - case Data_Queued: - case Ack_Sent: - case Ready: - return 0; - case Header_Pending: - errno = EWOULDBLOCK; - return -1; - default: - ACE_DEBUG ((LM_DEBUG,"channel[%d] state = %d, %p\n", - this->get_handle(), - this->state_,"pre_recv")); - } - return -1; -} - -/// Recv an <n> byte buffer from the connected socket. -ssize_t -ACE::HTBP::Channel::recv (void *buf, - size_t n, - int flags, - const ACE_Time_Value *timeout) -{ - ssize_t result = 0; - if (this->pre_recv() == -1 && this->leftovers_.length() == 0) - return -1; - - if (this->leftovers_.length() > 0) - { - result = ACE_MIN (n,this->leftovers_.length()); - ACE_OS::memcpy (buf,this->leftovers_.rd_ptr(), result); - this->leftovers_.rd_ptr(result); - buf = (char *)buf + result; - } - - if (result < (ssize_t)n && - result < (ssize_t)data_len_) - { - n -= result; - result += this->ace_stream_.recv(buf, n, flags, timeout); - } - if (result > 0) - data_consumed((size_t)result); - return result; -} - - /// Recv an <n> byte buffer from the connected socket. -ssize_t -ACE::HTBP::Channel::recv (void *buf, - size_t n, - const ACE_Time_Value *timeout) -{ - ssize_t result = 0; - if (this->pre_recv() == -1) - return -1; - - result = 0; - if (this->leftovers_.length() > 0) - { - result = ACE_MIN (n,this->leftovers_.length()); - ACE_OS::memcpy (buf,this->leftovers_.rd_ptr(), result); - this->leftovers_.rd_ptr(result); - buf = (char *)buf + result; - } - - if ((size_t)result < n && (size_t)result < this->data_len()) - { - n -= result; - result += this->ace_stream_.recv(buf, n, timeout); - } - - if (result > 0) - this->data_consumed((size_t)result); - return result; -} - - /// Recv an <iovec> of size <n> from the connected socket. -ssize_t -ACE::HTBP::Channel::recvv (iovec iov[], - int iovcnt, - const ACE_Time_Value *timeout) -{ - ssize_t result = 0; - if (this->pre_recv() == -1) - return -1; - - if (this->leftovers_.length()) - { - int ndx = 0; - iovec *iov2 = new iovec[iovcnt]; - for (int i = 0; i < iovcnt; i++) - { - size_t n = ACE_MIN ((size_t) iov[i].iov_len , - (size_t) this->leftovers_.length()); - if (n > 0) - { - ACE_OS::memcpy (iov[i].iov_base,this->leftovers_.rd_ptr(), n); - this->leftovers_.rd_ptr(n); - result += n; - } - if (n < (size_t) iov[i].iov_len) - { - iov2[ndx].iov_len = iov[i].iov_len - n; - iov2[ndx].iov_base = (char *)iov[i].iov_base + n; - ndx++; - } - } - if (ndx > 0) - result += this->ace_stream_.recvv(iov2,ndx,timeout); - delete [] iov2; - } - else - result = this->ace_stream_.recvv(iov,iovcnt,timeout); - - if (result > 0) - this->data_consumed((size_t)result); - return result; -} - -ssize_t -ACE::HTBP::Channel::recvv (iovec *io_vec, - const ACE_Time_Value *timeout) -{ - ssize_t result = 0; - if (this->pre_recv() == -1) - return -1; - - ACE_DEBUG ((LM_DEBUG,"recvv, leftover len = %d\n", - this->leftovers_.length())); - if (this->leftovers_.length()) - { - io_vec->iov_base = 0; - io_vec->iov_len = 0; - ACE_NEW_RETURN (io_vec->iov_base, - char[this->leftovers_.length()],-1); - io_vec->iov_len = this->leftovers_.length(); - ACE_OS::memcpy (io_vec->iov_base, - this->leftovers_.rd_ptr(), - io_vec->iov_len); - result = io_vec->iov_len; - this->leftovers_.length(0); - } - else - result = this->ace_stream_.recvv(io_vec,timeout); - - if (result > 0) - this->data_consumed((size_t)result); - return result; -} - -ssize_t -ACE::HTBP::Channel::send (const void *buf, - size_t n, - int flags, - const ACE_Time_Value *timeout) -{ - ssize_t result = 0; - if (this->filter_->send_data_header(n,this) == -1) - return -1; - result = this->ace_stream_.send(buf,n,flags,timeout); - if (result == -1) - return -1; - if (this->filter_->send_data_trailer(this) == -1) - return -1; - return result; -} - -ssize_t -ACE::HTBP::Channel::send (const void *buf, - size_t n, - const ACE_Time_Value *timeout) -{ - ssize_t result = 0; - if (this->filter_ == 0) - ACE_ERROR_RETURN ((LM_DEBUG, "ACE::HTBP::Channel::send: filter is null\n"),-1); - if (this->filter_->send_data_header(n,this) == -1) - return -1; - result = this->ace_stream_.send (buf,n,timeout); - if (result == -1) - return -1; - if (this->filter_->send_data_trailer(this) == -1) - return -1; - return result; -} - -ssize_t -ACE::HTBP::Channel::sendv (const iovec iov[], - int iovcnt, - const ACE_Time_Value *timeout) -{ - if (this->ace_stream_.get_handle() == ACE_INVALID_HANDLE) - this->session_->inbound(); - - ssize_t result = 0; - size_t n = 0; - for (int i = 0; i < iovcnt; n += iov[i++].iov_len); - - if (this->filter_->send_data_header(n,this) == -1) - ACE_ERROR_RETURN ((LM_ERROR,"sendv, %p\n","send_data_header"),-1); - - result = this->ace_stream_.sendv (iov,iovcnt,timeout); - - if (result == -1) - ACE_ERROR_RETURN ((LM_ERROR,"sendv, %p\n","ace_stream_.sendv"),-1); - - if (this->filter_->send_data_trailer(this) == -1) - ACE_ERROR_RETURN ((LM_ERROR,"sendv, %p\n","send_data_trailer\n"),-1); - - return result; -} - -int -ACE::HTBP::Channel::enable (int value) const -{ - this->ace_stream_.enable(value); - - return 0; //this->ace_stream_.enable(value); -} - -int -ACE::HTBP::Channel::disable (int value) const -{ - this->ace_stream_.disable(value); - - return 0;//this->ace_stream_.disable(value); -} - -ACE::HTBP::Filter * -ACE::HTBP::Channel::get_filter () -{ - ACE::HTBP::Filter_Factory *factory = 0; - - // @todo Should I be throwing an exception here if - // memory is not allocated right ? - ACE_NEW_RETURN (factory, - ACE::HTBP::Filter_Factory, - 0); - int inside = (this->session_ != 0); - return factory->get_filter (inside); -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Channel.h b/protocols/ace/HTBP/HTBP_Channel.h deleted file mode 100644 index b33d446e40b..00000000000 --- a/protocols/ace/HTBP/HTBP_Channel.h +++ /dev/null @@ -1,280 +0,0 @@ -/* -*- C++ -*- */ - -//============================================================================= -/** - * @file HTBP_Channel.h - * - * $Id$ - * - * @author Phil Mesnier, Priyanka Gontla - */ -//============================================================================= - -#ifndef ACE_HTBP_CHANNEL_H -#define ACE_HTBP_CHANNEL_H -#include /**/ "ace/pre.h" - -#include "ace/SOCK_Stream.h" -#include "ace/Message_Block.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "HTBP_Export.h" -#include "HTBP_Addr.h" -#include "HTBP_Filter.h" -#include "HTBP_Notifier.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -namespace ACE -{ - namespace HTBP - { - // Forward declarations. - class Session; - - /** - * @class ACE::HTBP::Channel - * - * @brief Defines the methods in the <Ht_Channel> abstraction. - * - * This adds additional wrapper methods atop the <IO> - * class. - * - * <buf> is the buffer to write from or receive into. - * <len> is the number of bytes to transfer. - * The <timeout> parameter in the following methods indicates how - * long to blocking trying to transfer data. If <timeout> == 0, - * then the call behaves as a normal send/recv call, i.e., for - * blocking sockets, the call will block until action is possible; - * for non-blocking sockets, EWOULDBLOCK will be returned if no - * action is immediately possible. - * If <timeout> != 0, the call will wait for data to arrive no longer - * than the relative time specified in *<timeout>. - * The "_n()" I/O methods keep looping until all the data has been - * transferred. These methods also work for sockets in non-blocking - * mode i.e., they keep looping on EWOULDBLOCK. <timeout> is used - * to make sure we keep making progress, i.e., the same timeout - * value is used for every I/O operation in the loop and the timeout - * is not counted down. - * The return values for the "*_n()" methods match the return values - * from the non "_n()" methods and are specified as follows: - * - On complete transfer, the number of bytes transferred is returned. - * - On timeout, -1 is returned, errno == ETIME. - * - On error, -1 is returned, errno is set to appropriate error. - * - On EOF, 0 is returned, errno is irrelevant. - * - * On partial transfers, i.e., if any data is transferred before - * timeout/error/EOF, <bytes_transferred> will contain the number of - * bytes transferred. - * Methods with <iovec> parameter are I/O vector variants of the I/O - * operations. - * Methods with the extra <flags> argument will always result in - * <send> getting called. Methods without the extra <flags> argument - * will result in <send> getting called on Win32 platforms, and - * <write> getting called on non-Win32 platforms. - */ - class HTBP_Export Channel - { - public: - friend class Notifier; - // Initialization and termination methods. - /// Constructor. - Channel (Session *s = 0); - - Channel (ACE_SOCK_Stream &s); - Channel (ACE_HANDLE h); - - /// Destructor. - ~Channel (void); - - enum State { - Init, - Ready, - Data_Queued, - Ack_Sent, - Header_Sent, - Closed, - Send_Ack, - Detached, - Wait_For_Ack, - Header_Pending - }; - - // = I/O functions. - - /// The Channel is a sibling of the ACE_SOCK_IO class, rather than a - /// decendant. This is due to the requirement to wrap all messages with - /// an HTTP request or reply wrapper, and to send application data in only - /// one direction on one stream. - - /// Recv an <n> byte buffer from the connected socket. - ssize_t recv (void *buf, - size_t n, - int flags, - const ACE_Time_Value *timeout = 0); - - /// Recv an <n> byte buffer from the connected socket. - ssize_t recv (void *buf, - size_t n, - const ACE_Time_Value *timeout = 0); - - /// Recv an <iovec> of size <n> from the connected socket. - ssize_t recvv (iovec iov[], - int n, - const ACE_Time_Value *timeout = 0); - - /// Same as above. Deprecated. - ssize_t recv (iovec iov[], - size_t n, - const ACE_Time_Value *timeout = 0); - - /** - * Allows a client to read from a socket without having to provide a - * buffer to read. This method determines how much data is in the - * socket, allocates a buffer of this size, reads in the data, and - * returns the number of bytes read. The caller is responsible for - * deleting the member in the <iov_base> field of <io_vec> using - * delete [] io_vec->iov_base. - */ - ssize_t recvv (iovec *io_vec, - const ACE_Time_Value *timeout = 0); - - /// Send an <n> byte buffer to the connected socket. - ssize_t send (const void *buf, - size_t n, - int flags, - const ACE_Time_Value *timeout = 0); - - /// Send an <n> byte buffer to the connected socket. - ssize_t send (const void *buf, - size_t n, - const ACE_Time_Value *timeout = 0); - - /// Send an <iovec> of size <n> to the connected socket. - ssize_t sendv (const iovec iov[], - int n, - const ACE_Time_Value *timeout = 0); - - // = Selectively close endpoints. - /// Close down the reader. - int close_reader (void); - - /// Close down the writer. - int close_writer (void); - - /** - * Close down the socket (we need this to make things work correctly - * on Win32, which requires use to do a <close_writer> before doing - * the close to avoid losing data). - */ - int close (void); - - // = Meta-type info - typedef ACE_INET_Addr PEER_ADDR; - - /// Dump the state of an object. - void dump (void) const; - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; - - public: - Session *session (void) const; - void session (Session *); - - Notifier *notifier (void); - - void register_notifier (ACE_Reactor *r); - - ACE_HANDLE get_handle (void) const; - - const ACE_SOCK_Stream &ace_stream (void) const; - ACE_SOCK_Stream &ace_stream (void); - - ///@notes Added the following methods to continue with - /// current compilation of HTIOP. Might not be needed in - /// future. - Priyanka - /// {@ - void set_handle (ACE_HANDLE h); - - /** - * Enable asynchronous I/O (ACE_SIGIO), urgent data (ACE_SIGURG), - * non-blocking I/O (ACE_NONBLOCK), or close-on-exec (ACE_CLOEXEC), - * which is passed as the <value>. - */ - int enable (int value) const; - - /** - * Disable asynchronous I/O (ACE_SIGIO), urgent data (ACE_SIGURG), - * non-blocking I/O (ACE_NONBLOCK), or close-on-exec (ACE_CLOEXEC), - * which is passed as the <value>. - */ - int disable (int value) const; - //@} - - // buffer related methods. - ACE_Message_Block &leftovers (void); - size_t data_len (void) const; - void data_len (size_t n); - size_t data_consumed (void) const; - void data_consumed (size_t n); - int load_buffer (void); - int flush_buffer (void); - int recv_ack (void); - int send_ack (void); - unsigned long request_count(); - Filter *filter (void) const; - void filter (Filter *); - State state (void) const; - void state (Channel::State s); - int pre_recv(void); - int consume_error (void); - - private: - - /// Get the filter from the Filter_Factory - Filter * get_filter (); - - /// The filter_ is a pluggable component used to manage the - /// wrapping of data in a way suitable for the proxy to - /// manage. The actual filter instance is owned by the - /// session. Different filters may be required depending on - /// which side of the proxy we are on, and the direction of data - /// flow. - Filter *filter_; - - /// The session_ is a reference to the persistent session this - /// stream is associated with. On the inside, sessions are - /// created by the Connector, which then create streams on - /// demand. - Session *session_; - - /// Since this stream implements its own send and recv methods, - /// the filter cannot simply call the send and recv methods of - /// this class. Therefore an ACE_SOCK_Stream wrapper around the - /// same socket instance is necessary to avoid recursion. - ACE_SOCK_Stream ace_stream_; - - Notifier *notifier_; - - ACE_Message_Block leftovers_; - size_t data_len_; - size_t data_consumed_; - State state_; - ACE_Message_Block *error_buffer_; - unsigned long request_count_; - }; - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#if defined (__ACE_INLINE__) -#include "HTBP_Channel.inl" -#endif - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_CHANNEL_H */ diff --git a/protocols/ace/HTBP/HTBP_Channel.inl b/protocols/ace/HTBP/HTBP_Channel.inl deleted file mode 100644 index 7df1ba8f16e..00000000000 --- a/protocols/ace/HTBP/HTBP_Channel.inl +++ /dev/null @@ -1,124 +0,0 @@ -// -*- C++ -*- -// -// $Id$ - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE_INLINE -ACE::HTBP::Session * -ACE::HTBP::Channel::session (void) const -{ - return this->session_; -} - -// session assignment only occurs when the stream is transferred to another -// session. Do *not* delete the old session object. -ACE_INLINE -void -ACE::HTBP::Channel::session (ACE::HTBP::Session *s) -{ - this->session_ = s; -} - -// I'm not sure of the proper use case for getting the filter reference. The -// problem is that the filter is not reference counted, so the returned value -// should not be stored. -ACE_INLINE -ACE::HTBP::Filter * -ACE::HTBP::Channel::filter (void) const -{ - return this->filter_; -} - -// Filters are owned by the channel. If a new filter is applied, the old one -// must be deleted. -ACE_INLINE -void -ACE::HTBP::Channel::filter (ACE::HTBP::Filter *f) -{ - if (this->filter_) - delete this->filter_; - this->filter_ = f; -} - -ACE_INLINE -int -ACE::HTBP::Channel::close_reader (void) -{ - return this->ace_stream_.close_reader(); -} - -ACE_INLINE -int -ACE::HTBP::Channel::close_writer (void) -{ - return this->ace_stream_.close_writer(); -} - -ACE_INLINE -int -ACE::HTBP::Channel::close (void) -{ - return this->ace_stream_.close(); -} - -ACE_INLINE -ACE::HTBP::Channel::State -ACE::HTBP::Channel::state (void) const -{ - return this->state_; -} - -ACE_INLINE -ACE_Message_Block & -ACE::HTBP::Channel::leftovers (void) -{ - return this->leftovers_; -} - -ACE_INLINE -size_t -ACE::HTBP::Channel::data_len(void) const -{ - return this->data_len_; -} - -ACE_INLINE -void -ACE::HTBP::Channel::data_len(size_t n) -{ - this->data_len_ = n; -} - -ACE_INLINE -size_t -ACE::HTBP::Channel::data_consumed(void) const -{ - return this->data_consumed_; -} - - -ACE_INLINE -const ACE_SOCK_Stream& -ACE::HTBP::Channel::ace_stream (void) const -{ - return this->ace_stream_; -} - -ACE_INLINE -ACE_SOCK_Stream& -ACE::HTBP::Channel::ace_stream (void) -{ - return this->ace_stream_; -} - -ACE_INLINE -void -ACE::HTBP::Channel::set_handle (ACE_HANDLE h) -{ - if (h == 0) - return; - this->ace_stream_.set_handle (h); -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Environment.cpp b/protocols/ace/HTBP/HTBP_Environment.cpp deleted file mode 100644 index bd14abcce3d..00000000000 --- a/protocols/ace/HTBP/HTBP_Environment.cpp +++ /dev/null @@ -1,201 +0,0 @@ -// $Id$ - -#include "HTBP_Environment.h" - -ACE_RCSID (HTBP, - ACE_HTBP_Environment, - "$Id$") - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE::HTBP::Environment::Environment (ACE_Configuration *config, - int using_registry, - const ACE_TCHAR *persistent_file) - : config_ (config), - imp_exp_ (0), - own_config_ (config != 0) -{ - initialize (using_registry, - persistent_file); -} - -ACE::HTBP::Environment::~Environment () -{ - if (!own_config_) - this->clear(); - else - delete this->config_; - - delete this->imp_exp_; -} - -void -ACE::HTBP::Environment::clear () -{ - if (this->config_) - this->config_->remove_section (config_->root_section (), - ACE_TEXT("htbp"), - 1); -} - -int -ACE::HTBP::Environment::initialize (int use_registry, - const ACE_TCHAR *persistent_file) -{ - if (this->config_ == 0) - { - int result = -1; - if (use_registry) - result = this->open_registry_config(); - if (result == -1) - result = this->open_persistent_config (persistent_file); - if (result != 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("ACE::HTBP::Environment::initialize (): ") - ACE_TEXT("Open Config failed")), - -1); - } - } - - - ACE_NEW_RETURN (this->imp_exp_, - ACE_Ini_ImpExp (*this->config_), - -1); - - if (this->config_->open_section (config_->root_section (), - ACE_TEXT("htbp"), 1, - this->htbp_key_) != 0) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("ACE::HTBP::Environment::initialize (). ") - ACE_TEXT("Open HTBP Section failed")), - -1); - return 0; -} - -int -ACE::HTBP::Environment::open_registry_config () -{ -#if defined (ACE_WIN32) - HKEY root = - ACE_Configuration_Win32Registry::resolve_key - (HKEY_LOCAL_MACHINE,ACE_TEXT("Software\\HTBP\\Environment")); - - ACE_NEW_RETURN (this->config_, - ACE_Configuration_Win32Registry (root), - -1); - return 0; -#else - errno = ENOTSUP; - return -1; -#endif /* ACE_WIN32 */ -} - -int -ACE::HTBP::Environment::open_persistent_config (const ACE_TCHAR *persistent_file) -{ - ACE_Configuration_Heap *heap; - ACE_NEW_RETURN (heap, - ACE_Configuration_Heap, - -1); - // do this before trying to open so it isn't leaked if the open fails. - this->config_ = heap; - if (persistent_file == 0) - heap->open(); - else - if (heap->open (persistent_file) != 0) - ACE_ERROR_RETURN (( LM_ERROR, - ACE_TEXT ("ACE::HTBP::Environment::open_config: %p\n"), - persistent_file), - -1 ); - return 0; -} - -int -ACE::HTBP::Environment::get_htid_url (ACE_TString &htid_url) const -{ - return this->config_->get_string_value (this->htbp_key_, - ACE_TEXT("htid_url"), - htid_url); -} - -int -ACE::HTBP::Environment::set_htid_url (const ACE_TCHAR *htid_generator_url) -{ - return this->config_->set_string_value (this->htbp_key_, - ACE_TEXT("htid_url"), - htid_generator_url); -} - - -int -ACE::HTBP::Environment::get_htid_via_proxy (int &via_proxy) const -{ - return this->config_->get_integer_value (this->htbp_key_, - ACE_TEXT("htid_via_proxy"), - (u_int &)via_proxy); -} - -int -ACE::HTBP::Environment::set_htid_via_proxy (int via_proxy) -{ - return this->config_->set_integer_value (this->htbp_key_, - ACE_TEXT("htid_via_proxy"), - (u_int)via_proxy); -} - -int -ACE::HTBP::Environment::get_proxy_host (ACE_TString &proxy_host) const -{ - return this->config_->get_string_value (this->htbp_key_, - ACE_TEXT("proxy_host"), - proxy_host); -} - -int -ACE::HTBP::Environment::set_proxy_host (const ACE_TCHAR *proxy_host) -{ - return this->config_->set_string_value (this->htbp_key_, - ACE_TEXT("proxy_host"), - proxy_host); -} - -int -ACE::HTBP::Environment::get_proxy_port (unsigned int &proxy_port) const -{ - int result = this->config_->get_integer_value (this->htbp_key_, - ACE_TEXT("proxy_port"), - proxy_port); - if (result != 0) - { - ACE_TString port_str; - result = this->config_->get_string_value (this->htbp_key_, - ACE_TEXT("proxy_port"), - port_str); - if (result == 0) - proxy_port = ACE_OS::strtol(port_str.c_str(),0,10); - } - return result; -} - -int -ACE::HTBP::Environment::set_proxy_port (unsigned int proxy_port) -{ - return this->config_->set_integer_value (this->htbp_key_, - ACE_TEXT("proxy_port"), - proxy_port); -} - -int -ACE::HTBP::Environment::import_config (const ACE_TCHAR *filename) -{ - return this->imp_exp_->import_config (filename); -} - -int -ACE::HTBP::Environment::export_config (const ACE_TCHAR *filename) -{ - return this->imp_exp_->export_config (filename); -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Environment.h b/protocols/ace/HTBP/HTBP_Environment.h deleted file mode 100644 index 894a376457a..00000000000 --- a/protocols/ace/HTBP/HTBP_Environment.h +++ /dev/null @@ -1,110 +0,0 @@ -// -*- C++ -*- -// $Id$ - -#ifndef ACE_HTBP_ENVIRONMENT_H -#define ACE_HTBP_ENVIRONMENT_H -#include /**/ "ace/pre.h" - -#include "HTBP_Export.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "ace/Configuration.h" -#include "ace/Configuration_Import_Export.h" -#include "ace/Singleton.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -namespace ACE -{ - namespace HTBP - { - - /** - * @class Environment - * - * @brief - * - * This class manages the storage of configuration data, either in a - * flat file for Unix systems, or in the Windows registry - */ - class HTBP_Export Environment - { - public: - - /// Constructor - Environment (ACE_Configuration *config = 0, - int using_registry = 0, - const ACE_TCHAR *persistent_file = 0); - - /// Destructor - ~Environment (); - - /// removes all htbp related values from the configuration - void clear (void); - - /// Accessors to HTID URL - /// Returns 0 on success - /// {@ - int get_htid_url (ACE_TString &htid_url) const; - int set_htid_url (const ACE_TCHAR *htid_generator_url); - /// @} - - /// Accessors to HTID via proxy - If value is true, HTID request goes - /// through configured proxy otherwise it uses a direct connection. - /// Returns 0 on success - /// {@ - int get_htid_via_proxy (int &htid_via_proxy) const; - int set_htid_via_proxy (int htid_via_proxy); - /// @} - - /// Accessors to Proxy Address - /// Returns 0 on success - /// {@ - int get_proxy_host (ACE_TString &proxy_host) const; - int set_proxy_host (const ACE_TCHAR *proxy_host); - /// @} - - /// Returns 0 on success - /// {@ - int get_proxy_port (unsigned int &proxy_port) const; - int set_proxy_port (unsigned int proxy_port); - /// @} - - /// Import the configuration from the filename - int import_config (const ACE_TCHAR *filename); - - /// Export the configuration to the filename - int export_config (const ACE_TCHAR *filename); - - private: - /// Open config, set sections etc - int initialize (int use_registry, - const ACE_TCHAR *persistent_file); - - /// Open an ACE_Configuration of the appropriate type. - int open_registry_config (); - int open_persistent_config (const ACE_TCHAR *persistent_file); - - /// Our Proxy and HTID generator URL database - ACE_Configuration *config_; - - /// Flat section of HTBP related items - ACE_Configuration_Section_Key htbp_key_; - - /// the wrapper used to import or export initialization values - ACE_Ini_ImpExp *imp_exp_; - - /// We created the config instance, so we must clean it up - int own_config_; - - }; - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_ENVIRONMENT_H */ diff --git a/protocols/ace/HTBP/HTBP_Export.h b/protocols/ace/HTBP/HTBP_Export.h deleted file mode 100644 index 19ce8a89547..00000000000 --- a/protocols/ace/HTBP/HTBP_Export.h +++ /dev/null @@ -1,53 +0,0 @@ -// -*- C++ -*- -// $Id$ -// Definition for Win32 Export directives. -// This file is generated automatically by generate_export_file.pl -d -s HTBP -// ------------------------------ -#ifndef HTBP_EXPORT_H -#define HTBP_EXPORT_H - -#include "ace/config-all.h" - -#if defined (ACE_AS_STATIC_LIBS) && !defined (HTBP_HAS_DLL) -# define HTBP_HAS_DLL 0 -#endif /* ACE_AS_STATIC_LIBS && HTBP_HAS_DLL */ - -#if !defined (HTBP_HAS_DLL) -# define HTBP_HAS_DLL 1 -#endif /* ! HTBP_HAS_DLL */ - -#if defined (HTBP_HAS_DLL) && (HTBP_HAS_DLL == 1) -# if defined (HTBP_BUILD_DLL) -# define HTBP_Export ACE_Proper_Export_Flag -# define HTBP_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) -# define HTBP_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) -# else /* HTBP_BUILD_DLL */ -# define HTBP_Export ACE_Proper_Import_Flag -# define HTBP_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) -# define HTBP_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) -# endif /* HTBP_BUILD_DLL */ -#else /* HTBP_HAS_DLL == 1 */ -# define HTBP_Export -# define HTBP_SINGLETON_DECLARATION(T) -# define HTBP_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) -#endif /* HTBP_HAS_DLL == 1 */ - -// Set HTBP_NTRACE = 0 to turn on library specific tracing even if -// tracing is turned off for ACE. -#if !defined (HTBP_NTRACE) -# if (ACE_NTRACE == 1) -# define HTBP_NTRACE 1 -# else /* (ACE_NTRACE == 1) */ -# define HTBP_NTRACE 0 -# endif /* (ACE_NTRACE == 1) */ -#endif /* !HTBP_NTRACE */ - -#if (HTBP_NTRACE == 1) -# define HTBP_TRACE(X) -#else /* (HTBP_NTRACE == 1) */ -# define HTBP_TRACE(X) ACE_TRACE_IMPL(X) -#endif /* (HTBP_NTRACE == 1) */ - -#endif /* HTBP_EXPORT_H */ - -// End of auto generated file. diff --git a/protocols/ace/HTBP/HTBP_Filter.cpp b/protocols/ace/HTBP/HTBP_Filter.cpp deleted file mode 100644 index 2ac714b8904..00000000000 --- a/protocols/ace/HTBP/HTBP_Filter.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// $Id$ - -#include "ace/Log_Msg.h" - -#include "HTBP_Session.h" -#include "HTBP_Filter.h" - -#if !defined (__ACE_INLINE__) -#include "HTBP_Filter.inl" -#endif - -ACE_RCSID(HTBP,ACE_HTBP_Filter,"$Id$") - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE::HTBP::Filter::Filter (void) - :http_code_ (0) -{ -} - -ACE::HTBP::Filter::~Filter (void) -{ -} - -char * -ACE::HTBP::Filter::header_complete (ACE::HTBP::Channel *ch) -{ - if (ch->leftovers().length() == 0) - { - return 0; - } - if (ch->leftovers().space() > 0) - *ch->leftovers().wr_ptr() = '\0'; - char *start = ch->leftovers().rd_ptr(); - char *nl = ACE_OS::strchr (start,'\n'); - if (this->http_code_ == 0) - { - char *code = ACE_OS::strstr (start,"HTTP/1."); - if (code && code < nl) - { - code += 9; // skip past "HTTP/1.1 " - this->http_code_ = strtol(code,0,10); - } - } - - while (nl) - { - if ((nl == start) || - (nl == start +1 && *start == '\r')) - return nl + 1; - start = nl + 1; - nl = ACE_OS::strchr (start,'\n'); - } - return 0; -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Filter.h b/protocols/ace/HTBP/HTBP_Filter.h deleted file mode 100644 index ebc9ebb895f..00000000000 --- a/protocols/ace/HTBP/HTBP_Filter.h +++ /dev/null @@ -1,104 +0,0 @@ -// -*- C++ -*- - -//============================================================================= -/** - * @file HTBP_Filter.h - * - * $Id$ - * - * @author Phil Mesnier - */ -//============================================================================= - -#ifndef ACE_HTBP_FILTER_H -#define ACE_HTBP_FILTER_H -#include /**/ "ace/pre.h" - -#include "ace/OS.h" -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "HTBP_Export.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -namespace ACE -{ - namespace HTBP - { - - // Forward declarations. - class Channel; - - /** - * @class ACE_HTBP_Filter - * - * @brief Defines the methods in the <ACE_HTBP_Filter> abstraction. - * - * A filter is responsible for wrapping / unwrapping messages - * depending on direction of flow on each stream. There will be 4 - * filters participating in a session, inside-send, inside-recv, - * outside-send, ouside-recv. It is anticipated that specialized - * filters will be implemented that tune the filter behavior based - * on proxy particulars. That, or there will be a matrix - * configuration parameters that may be tweeked to match the - * configuration. It remains to be seen which is easier to - * manage. - */ - class HTBP_Export Filter - { - public: - Filter (void); - - virtual ~Filter (void); - - /// Inside and outside Send filters need to supply a data header that - /// sets the stage before sending the data body, and then (maybe) send a - /// data trailer that closes the message. The data header may be formatted - /// differently on the first message, to send optional context information. - virtual ssize_t send_data_header (ssize_t data_len, Channel *ch); - virtual ssize_t send_data_trailer (Channel *ch); - - /// Upon receiving data, the Channel is obliged to send an ack. This is - /// either an empty document if this is the in-to-out stream, or a new - /// long-duration document request if this is the out-to-in stream. - virtual int send_ack (Channel *ch); - virtual int recv_ack (Channel *ch); - - /// receiving data must compliment sending. In the case of an in-to-out - /// stream. It is possible that the stream identity is not known until the - /// first request is received. In this case the filter will have to look - /// lookup the received session ID and either create a new instance or - /// reassign itself to an existing sesion. In that case, the associated - /// stream will have to be reassigned as well. - /// - virtual ssize_t recv_data_header (Channel *ch); - virtual ssize_t recv_data_trailer(Channel *ch); - - /// reset the http_code_ in anticipation of a new message. - void reset_http_code (void); - - /// get the value of the most recent http result code - int http_code (void); - - protected: - char *header_complete (Channel *ch); - - private: - /// Store the most recent HTTP result code. Typically it will be 200, - /// but it could be a 4xx or 5xx code if the proxy reports an error. - int http_code_; - - }; - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#if defined (__ACE_INLINE__) -#include "HTBP_Filter.inl" -#endif - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_FILTER_H */ diff --git a/protocols/ace/HTBP/HTBP_Filter.inl b/protocols/ace/HTBP/HTBP_Filter.inl deleted file mode 100644 index c648393daa4..00000000000 --- a/protocols/ace/HTBP/HTBP_Filter.inl +++ /dev/null @@ -1,63 +0,0 @@ -// -*- C++ -*- -// -// $Id$ - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE_INLINE -ssize_t -ACE::HTBP::Filter::send_data_header (ssize_t, ACE::HTBP::Channel * ) -{ - return 0; -} - -ACE_INLINE -ssize_t -ACE::HTBP::Filter::send_data_trailer (ACE::HTBP::Channel *) -{ - return 0; -} - -ACE_INLINE -int -ACE::HTBP::Filter::send_ack (ACE::HTBP::Channel *) -{ - return 0; -} - -ACE_INLINE -int -ACE::HTBP::Filter::recv_ack (ACE::HTBP::Channel *) -{ - return 0; -} - -ACE_INLINE -ssize_t -ACE::HTBP::Filter::recv_data_header (ACE::HTBP::Channel *) -{ - return 0; -} - -ACE_INLINE -ssize_t -ACE::HTBP::Filter::recv_data_trailer(ACE::HTBP::Channel *) -{ - return 0; -} - -ACE_INLINE -void -ACE::HTBP::Filter::reset_http_code (void) -{ - this->http_code_ = 0; -} - -ACE_INLINE -int -ACE::HTBP::Filter::http_code (void) -{ - return this->http_code_; -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Filter_Factory.cpp b/protocols/ace/HTBP/HTBP_Filter_Factory.cpp deleted file mode 100644 index 07b16ea9669..00000000000 --- a/protocols/ace/HTBP/HTBP_Filter_Factory.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// $Id$ - -#include "HTBP_Filter_Factory.h" -#include "HTBP_Inside_Squid_Filter.h" -#include "HTBP_Outside_Squid_Filter.h" - -#include "HTBP_Stream.h" -#include "ace/Service_Object.h" -#include "ace/Dynamic_Service.h" -#include "ace/Log_Msg.h" - -ACE_RCSID (ACE_HTBP_Filter_Factory, HTBP, "$Id$") - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE::HTBP::Filter_Factory::Filter_Factory () -{ -} - -ACE::HTBP::Filter_Factory::~Filter_Factory () -{ -} - -ACE::HTBP::Filter * -ACE::HTBP::Filter_Factory::get_filter (int inside) -{ - ACE::HTBP::Filter *filter = 0; - if (inside) - ACE_NEW_RETURN (filter, - ACE::HTBP::Inside_Squid_Filter (),0); - else - ACE_NEW_RETURN (filter, - ACE::HTBP::Outside_Squid_Filter (),0); - return filter; -} - -int -ACE::HTBP::Filter_Factory::init (int /* argc */, - ACE_TCHAR * /* argv */ []) -{ - return 0; -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -ACE_STATIC_SVC_DEFINE (ACE_HTBP_Filter_Factory, - ACE_TEXT ("Filter_Factory"), - ACE_SVC_OBJ_T, - &ACE_SVC_NAME (ACE_HTBP_Filter_Factory), - ACE_Service_Type::DELETE_THIS | - ACE_Service_Type::DELETE_OBJ, - 0) - -ACE_FACTORY_NAMESPACE_DEFINE (HTBP, ACE_HTBP_Filter_Factory, - ACE::HTBP::Filter_Factory) - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class ACE_Dynamic_Service<ACE::HTBP::Filter_Factory>; -#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate ACE_Dynamic_Service<ACE::HTBP::Filter_Factory> -#endif - diff --git a/protocols/ace/HTBP/HTBP_Filter_Factory.h b/protocols/ace/HTBP/HTBP_Filter_Factory.h deleted file mode 100644 index 0681055b679..00000000000 --- a/protocols/ace/HTBP/HTBP_Filter_Factory.h +++ /dev/null @@ -1,70 +0,0 @@ -// -*- C++ -*- -// $Id$ - -//============================================================================= -/** - * @file HTBP_Filter_Factory.h - * - * $Id$ - * - * @author Priyanka Gontla - */ -//============================================================================= - -#ifndef ACE_HTBP_FILTER_FACTORY -#define ACE_HTBP_FILTER_FACTORY -#include /**/ "ace/pre.h" - -#include "HTBP_Export.h" -#include "HTBP_Filter.h" -#include "ace/Service_Config.h" -#include "ace/Service_Object.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -namespace ACE -{ - namespace HTBP - { - class Stream; - - /** - * @class Filter_Factory - * - * @brief Factory to get the Filters - * - * The Filter Factory is to be used for getting filters based on the - * mode requested. This class is a ACE_Service_Object and should be - * loadable with the help of the service configurator framework. - */ - class HTBP_Export Filter_Factory : public ACE_Service_Object - { - public: - - /// Constructor - Filter_Factory (); - - ~Filter_Factory (); - - /// Initialization hook. - virtual int init (int argc, ACE_TCHAR *argv[]); - - // - Filter *get_filter (int inside); - }; - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -ACE_STATIC_SVC_DECLARE_EXPORT (HTBP, ACE_HTBP_Filter_Factory) -ACE_FACTORY_DECLARE (HTBP, ACE_HTBP_Filter_Factory) - - - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_FILTER_FACTORY */ diff --git a/protocols/ace/HTBP/HTBP_ID_Requestor.cpp b/protocols/ace/HTBP/HTBP_ID_Requestor.cpp deleted file mode 100644 index 66d3ef7cd93..00000000000 --- a/protocols/ace/HTBP/HTBP_ID_Requestor.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// $Id$ - -#include "HTBP_ID_Requestor.h" -#include "HTBP_Environment.h" - -#include "ace/OS_NS_stdio.h" -#include "ace/OS_NS_string.h" -#include "ace/SOCK_Stream.h" -#include "ace/SOCK_Connector.h" -#include "ace/UUID.h" - -ACE_RCSID(HTBP, - ACE_HTBP_ID_Requestor, - "$Id$") - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE_TString ACE::HTBP::ID_Requestor::htid_; -ACE_SYNCH_MUTEX ACE::HTBP::ID_Requestor::htid_lock_; - -ACE::HTBP::ID_Requestor::ID_Requestor (ACE::HTBP::Environment *env) - : port_ (0), - host_ (), - url_() -{ - if (env) - { - env->get_htid_url(url_); - int via_proxy = 0; - env->get_htid_via_proxy (via_proxy); - if (via_proxy && env->get_proxy_host (host_) == 0) - env->get_proxy_port (port_); - } -} - -int -ACE::HTBP::ID_Requestor::connect_to_server (ACE_SOCK_Stream *cli_stream) -{ - if (port_ == 0 || host_.length() == 0) - { - int host_start = url_.find (ACE_TEXT("http://")) + 7; - int port_sep = 0; - int sep = 0; - if (host_start == -1) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("ACE::HTBP::ID_Requestor::") - ACE_TEXT("connect_to_server: ") - ACE_TEXT("invalid URL: \"%s\"\n"), - url_.c_str()), - -1); - port_sep = url_.find (ACE_TEXT(":"),(size_t)host_start); - sep = url_.find (ACE_TEXT("/"),(size_t)host_start); - if (sep == -1 || sep == host_start +1) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("ACE::HTBP::ID_Requestor::") - ACE_TEXT("connect_to_server: ") - ACE_TEXT("invalid URL: \"%s\"\n"), - url_.c_str()), - -1); - if (port_sep == -1) - { - port_sep = sep; - port_ = 80; // should be a default? - } - host_ = url_.substr(host_start,port_sep - host_start); - } - - ACE_INET_Addr remote_addr (port_, host_.c_str()); - ACE_SOCK_Connector con; - if (con.connect (*cli_stream, - remote_addr) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("ACE::HTBP::ID_Requestor::connect_to_server: ") - ACE_TEXT("%p\n"), - ACE_TEXT("socket connect")), - -1); - return 0; -} - -int -ACE::HTBP::ID_Requestor::send_request (ACE_SOCK_Stream *cli_stream) -{ - char *buffer; - ACE_NEW_RETURN (buffer, char[this->url_.length()+16],-1); - ACE_OS::sprintf (buffer,"GET %s HTTP/1.0\n\n", - ACE_TEXT_ALWAYS_CHAR(url_.c_str())); - int result = cli_stream->send_n (buffer,ACE_OS::strlen(buffer)); - delete [] buffer; - if (result == -1) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("ACE::HTBP::ID_Requestor::send_request %p\n"), - ACE_TEXT("socket send")), -1); - return 0; -} - -ACE_TCHAR * -ACE::HTBP::ID_Requestor::get_HTID () -{ - if (ACE::HTBP::ID_Requestor::htid_.length() != 0) - return ACE::HTBP::ID_Requestor::htid_.rep(); - - ACE_Guard<ACE_SYNCH_MUTEX> guard (ACE::HTBP::ID_Requestor::htid_lock_); - - if (ACE::HTBP::ID_Requestor::htid_.length() != 0) - return ACE::HTBP::ID_Requestor::htid_.rep(); - - ACE_SOCK_Stream cli_stream; - ACE_TCHAR * htid = 0; - - if (this->url_.length() == 0 || - this->connect_to_server (&cli_stream) == -1 || - this->send_request (&cli_stream) == -1) - { - ACE_Utils::UUID_Generator gen; - ACE_Utils::UUID *uuid = gen.generateUUID (); - const ACE_CString *uuidstr = uuid->to_string(); - ACE::HTBP::ID_Requestor::htid_ = ACE_TEXT_CHAR_TO_TCHAR (uuidstr->c_str()); - delete uuid; - return ACE::HTBP::ID_Requestor::htid_.rep(); - } - iovec recv_buf; - ssize_t result = cli_stream.recvv (&recv_buf); - cli_stream.close(); - - if (result > 0) - { - ACE_CString answer ((char *)recv_buf.iov_base,recv_buf.iov_len); - ssize_t start = answer.rfind (ACE_TEXT('\n')); - if (start == ACE_CString::npos) - start = 0; - else - start++; - ACE::HTBP::ID_Requestor::htid_ = ACE_TEXT_CHAR_TO_TCHAR(answer.substr (start).c_str()); - htid = ACE::HTBP::ID_Requestor::htid_.rep(); - } - return htid; -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_ID_Requestor.h b/protocols/ace/HTBP/HTBP_ID_Requestor.h deleted file mode 100644 index b885f07cae5..00000000000 --- a/protocols/ace/HTBP/HTBP_ID_Requestor.h +++ /dev/null @@ -1,63 +0,0 @@ -// -*- C++ -*- -// $Id$ - -#ifndef HTID_REQUESTOR_H -#define HTID_REQUESTOR_H -#include /**/ "ace/pre.h" - -#include "HTBP_Export.h" -#include "ace/SString.h" -#include "ace/Synch.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -// Forward declarations -class ACE_SOCK_Stream; - -namespace ACE -{ - namespace HTBP - { - // Forward declarations - class Environment; - - /** - * ACE_HTBP_ID_Requestor - * - * @brief This singleton class is to be used to get a HTID - */ - class HTBP_Export ID_Requestor - { - public: - /// Constructor. - ID_Requestor (Environment * = 0); - - /// Accessor to HTID - ACE_TCHAR *get_HTID (); - - private: - /// Connects to the remote host - int connect_to_server (ACE_SOCK_Stream *cli_stream); - - /// Send HTTP GET request to the server. - int send_request (ACE_SOCK_Stream *cli_stream); - - unsigned port_; - ACE_TString host_; - ACE_TString url_; - - static ACE_TString htid_; - static ACE_SYNCH_MUTEX htid_lock_; - }; - - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#include /**/ "ace/post.h" -#endif /* HTID_REQUESTOR_H */ diff --git a/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.cpp b/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.cpp deleted file mode 100644 index acb019ce2bb..00000000000 --- a/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.cpp +++ /dev/null @@ -1,236 +0,0 @@ -// ACE_HTBP_Filter.cpp -// $Id$ - -#include "ace/Log_Msg.h" - -//#include <sstream> - -#include "HTBP_Session.h" -#include "HTBP_Inside_Squid_Filter.h" - -#if !defined (__ACE_INLINE__) -#include "HTBP_Inside_Squid_Filter.inl" -#endif - -ACE_RCSID(HTBP,ACE_HTBP_Inside_Squid_Filter,"$Id$") - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ssize_t -ACE::HTBP::Inside_Squid_Filter::send_data_trailer (ACE::HTBP::Channel *ch) -{ - ch->state(ACE::HTBP::Channel::Wait_For_Ack); - return 0; -} - -int -ACE::HTBP::Inside_Squid_Filter::make_request_header (ACE::HTBP::Channel *ch, - const char *cmd, - char *buffer, - size_t buffer_size) -{ - // the string is formatted as: - // command http://host:port/htid/sessionId/request<requestId>.html HTTP/1.1\n - // host:port is the remote host and port from the channel, - // htid is the local endpoint identifier - // sessionId is the discreet session counter between these peers - // requestId is the discreet request sent for this session. - - ACE::HTBP::Session *session = ch->session(); - - const char * format = "%shttp://%s:%d/%s/%d/request%d.html HTTP/1.1\n"; - char remote_host[ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 1]; - unsigned remote_port = session->peer_addr().get_port_number(); - const char *local_htid = session->local_addr().get_htid(); - - ACE_UINT32 tempId = session->session_id().id_; - size_t sid_size = 1; - size_t rid_size = 1; - while (tempId /= 10) sid_size++; - tempId = ch->request_count(); - while (tempId /= 10) rid_size++; - - // This test was originally get_host_name() == -1, but this is - // problematic if the address doesn't resolve to a name. I think - // that it should be configurable, or maybe the hostname needs to - // be carried independent of the address to work with hosts that may - // have dynamic IP addresses. For now that isn't a problem. - if (session->peer_addr().get_host_addr(remote_host, - sizeof remote_host) == 0) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("HTBP::Inside_Squid_Filter:could not get ") - ACE_TEXT("peer_addr hostname\n")), - -1); - - - size_t size = - ACE_OS::strlen(format) - - 12 // subtract out the size of the format specifiers - + ACE_OS::strlen (cmd) - + ACE_OS::strlen (remote_host) - + 5 // maximum size for a the remote port number - + ACE_OS::strlen (local_htid) - + sid_size // size of session id - + rid_size; // size of request id - - if (size > buffer_size) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("HTBP::Inside_Squid_Filter: insufficient ") - ACE_TEXT("buffer space for request header, need %d ") - ACE_TEXT("got %d\n"), - size, buffer_size), - -1); - - ACE_OS::sprintf (buffer,format, - cmd,remote_host,remote_port, - local_htid, session->session_id().id_, - ch->request_count()); - - return ACE_OS::strlen(buffer); -} - -ssize_t -ACE::HTBP::Inside_Squid_Filter::send_data_header (ssize_t data_len, - ACE::HTBP::Channel *ch) -{ - char *buffer = new char[BUFSIZ]; - ssize_t result = -1; - if (this->make_request_header (ch,"POST ",buffer,BUFSIZ) != -1) - { - ACE_CString header (buffer); - header += "Content-Type: application/octet-stream\nContent-Length: "; - char datalenstr[20]; - ACE_OS::itoa (data_len,datalenstr,10); - header += datalenstr; - header += "\n\n"; - result = ch->ace_stream().send(header.c_str(),header.length()); - } - ch->state(result == -1 ? ACE::HTBP::Channel::Closed : - ACE::HTBP::Channel::Header_Sent); - this->reset_http_code(); - return 1; -} - -ssize_t -ACE::HTBP::Inside_Squid_Filter::recv_data_header (ACE::HTBP::Channel *ch) -{ - if (this->http_code() != 200 && this->http_code() != 0) - { - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT("Inside_Squid_Filter::recv_data_header, ") - ACE_TEXT("non-OK result code %d recvd\n"), - this->http_code())); - - errno = ch->consume_error () ? EINVAL : EWOULDBLOCK; - return 0; - } - char *header_end = this->header_complete(ch); - if (header_end == 0) - { - if (ch->state() != ACE::HTBP::Channel::Closed) - { - ch->state (ACE::HTBP::Channel::Header_Pending); - errno = EWOULDBLOCK; - } - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("Inside_Squid_Filter::recv_data_header, ") - ACE_TEXT("header not complete\n")), - 0); - } - char *start = ch->leftovers().rd_ptr(); - ACE_CString token = "Content-Length: "; - char *tpos = ACE_OS::strstr(start,token.c_str()); - char *nl = ACE_OS::strchr (start,'\n'); - if (tpos != 0) - { - tpos += token.length(); - *nl = 0; - ch->data_len (strtol(tpos,0,10)); - start = nl+1; - } - - ch->leftovers().rd_ptr(header_end); - if (this->http_code() != 200) - { - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT("Inside_Squid_Filter::recv_data_header, ") - ACE_TEXT("non-OK result code %d recvd\n"), - this->http_code())); - - errno = ch->consume_error () ? EINVAL : EWOULDBLOCK; - return 0; - } - - ch->state(ACE::HTBP::Channel::Data_Queued); - return 1; -} - -ssize_t -ACE::HTBP::Inside_Squid_Filter::recv_data_trailer (ACE::HTBP::Channel *ch) -{ - ch->state(ACE::HTBP::Channel::Send_Ack); - return 0; -} - -int -ACE::HTBP::Inside_Squid_Filter::send_ack (ACE::HTBP::Channel *ch) -{ - char *buffer = new char[BUFSIZ]; - ssize_t result = -1; - if (ch->state() == ACE::HTBP::Channel::Ack_Sent) - { - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("Inside Filter::send_ack: ") - ACE_TEXT("state is already ACK_SENT\n")), - 1); - } - if (this->make_request_header (ch,"GET ",buffer,BUFSIZ) != -1) - { - ACE_CString header (buffer); - header += "\n"; - result = ch->ace_stream().send(header.c_str(),header.length()); - } - ch->state(result == -1 ? - ACE::HTBP::Channel::Closed : ACE::HTBP::Channel::Ack_Sent); - this->reset_http_code(); - return 1; -} - -int -ACE::HTBP::Inside_Squid_Filter::recv_ack (ACE::HTBP::Channel *ch) -{ - - char *header_end = this->header_complete(ch); - if (header_end == 0) - { - if (ch->state() != ACE::HTBP::Channel::Closed) - errno = EWOULDBLOCK; - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("Inside_Squid_Filter::recv_data_header, ") - ACE_TEXT("header not complete\n")),0); - } - if (this->http_code() == 200) - { - ch->leftovers().length(0); - ch->state(ACE::HTBP::Channel::Ready); - return 1; - } - - char *start = ch->leftovers().rd_ptr(); - ACE_CString token = "Content-Length: "; - char *tpos = ACE_OS::strstr(start,token.c_str()); - char *nl = ACE_OS::strchr (start,'\n'); - if (tpos != 0) - { - tpos += token.length(); - *nl = 0; - ch->data_len (strtol(tpos,0,10)); - start = nl+1; - } - - ch->leftovers().rd_ptr(header_end); - errno = ch->consume_error () ? EINVAL : EWOULDBLOCK; - return 0; -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.h b/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.h deleted file mode 100644 index e60a682d81f..00000000000 --- a/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.h +++ /dev/null @@ -1,91 +0,0 @@ -// -*- C++ -*- - -//============================================================================= -/** - * @file HTBP_Inside_Squid_Filter.h - * - * $Id$ - * - * @author Phil Mesnier - */ -//============================================================================= - -#ifndef ACE_HTBP_INSIDE_SQUID_FILTER_H -#define ACE_HTBP_INSIDE_SQUID_FILTER_H -#include /**/ "ace/pre.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "HTBP_Export.h" -#include "HTBP_Filter.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -namespace ACE -{ - namespace HTBP - { - - /** - * @class Inside_Squid_Filter - * - * @brief Defines the methods in the <Filter> abstraction. - * - * A filter is responsible for wrapping / unwrapping messages - * depending on direction of flow on each stream. There will be 4 - * filters participating in a session, inside-send, inside-recv, - * outside-send, ouside-recv. It is anticipated that specialized - * filters will be implemented that tune the filter behavior based - * on proxy particulars. That, or there will be a matrix - * configuration parameters that may be tweeked to match the - * configuration. It remains to be seen which is easier to - * manage. - */ - class HTBP_Export Inside_Squid_Filter : public Filter - { - public: - /// Destructor. - virtual ~Inside_Squid_Filter (void); - - /// Inside and outside Send filters need to supply a data header - /// that sets the stage before sending the data body, and then - /// (maybe) send a data trailer that closes the message. The - /// data header may be formatted differently on the first - /// message, to send optional context information. - virtual ssize_t send_data_header (ssize_t data_len, Channel *); - virtual ssize_t send_data_trailer (Channel *); - - /// Upon receiving data, the Channel is obliged to send an - /// ack. This is either an empty document if this is the - /// in-to-out stream, or a new long-duration document request if - /// this is the out-to-in stream. - virtual int send_ack (Channel *); - virtual int recv_ack (Channel *); - - /// receiving data must compliment sending. In the case of an - /// in-to-out stream. It is possible that the stream identity is - /// not known until the first request is received. In this case - /// the filter will have to look lookup the received session ID - /// and either create a new instance or reassign itself to an - /// existing sesion. In that case, the associated stream will - /// have to be reassigned as well. - /// - virtual ssize_t recv_data_header (Channel *); - virtual ssize_t recv_data_trailer(Channel *); - private: - int make_request_header (Channel *, const char *, char *, size_t ); - - }; - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#if defined (__ACE_INLINE__) -#include "HTBP_Inside_Squid_Filter.inl" -#endif - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_FILTER_H */ diff --git a/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.inl b/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.inl deleted file mode 100644 index e8b08950ce6..00000000000 --- a/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.inl +++ /dev/null @@ -1,12 +0,0 @@ -// -*- C++ -*- -// -// $Id$ - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE_INLINE -ACE::HTBP::Inside_Squid_Filter::~Inside_Squid_Filter (void) -{ -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Macros.h b/protocols/ace/HTBP/HTBP_Macros.h deleted file mode 100644 index 0cb1300cc1d..00000000000 --- a/protocols/ace/HTBP/HTBP_Macros.h +++ /dev/null @@ -1,10 +0,0 @@ -// $Id$ - -#ifndef ACE_HTBP_MACROS_H -#define ACE_HTBP_MACROS_H - -#if !defined (ACE_HTBP_ENVIRONMENT_CONFIG_FILE) -#define ACE_HTBP_ENVIRONMENT_CONFIG_FILE "HT_Config.conf" -#endif /* ACE_HTBP_ENVIRONMENT_CONFIG_FILE */ - -#endif /* ACE_HTBP_MACROS_H */ diff --git a/protocols/ace/HTBP/HTBP_Notifier.cpp b/protocols/ace/HTBP/HTBP_Notifier.cpp deleted file mode 100644 index 70a6df54023..00000000000 --- a/protocols/ace/HTBP/HTBP_Notifier.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- C++ -*- */ - -//============================================================================= -/** - * @file HTBP_Notifier.cpp - * - * $Id$ - * - * @author Phil Mesnier, Priyanka Gontla - */ -//============================================================================= -#include "HTBP_Notifier.h" -#include "HTBP_Channel.h" -#include "HTBP_Session.h" -#include "ace/Reactor.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE::HTBP::Notifier::Notifier (ACE::HTBP::Channel *s) - : channel_(s) -{ -} - -int -ACE::HTBP::Notifier::handle_input(ACE_HANDLE ) -{ - switch (this->channel_->state()) - { - case ACE::HTBP::Channel::Detached: - this->channel_->pre_recv(); - break; - case ACE::HTBP::Channel::Wait_For_Ack: - this->channel_->recv_ack(); - break; - default: - this->channel_->load_buffer(); - } - - if (this->channel_->state() == ACE::HTBP::Channel::Closed) - { - this->unregister(); - return 0; - } - - if (this->channel_->session_) - { - if (this->channel_ == this->channel_->session_->inbound()) - { - ACE_Event_Handler *h = this->channel_->session_->handler(); - if (h && this->reactor()) - this->reactor()->notify(h, - ACE_Event_Handler::READ_MASK); - else - ACE_DEBUG ((LM_DEBUG,"Notifier cannot notify, session has no handler (%x), or reactor (%x)\n",h,this->reactor())); - } - else - this->channel_->flush_buffer(); - } - else - ACE_DEBUG ((LM_DEBUG,"Notifier has no session to notify!\n")); - return 0; -} - -int -ACE::HTBP::Notifier::handle_output (ACE_HANDLE ) -{ - return -1; - -} - -void -ACE::HTBP::Notifier::unregister (void) -{ - if (this->reactor()) - this->reactor()->remove_handler(this, - ACE_Event_Handler::READ_MASK | - ACE_Event_Handler::DONT_CALL); -} - -ACE_HANDLE -ACE::HTBP::Notifier::get_handle(void) const -{ - return this->channel_->ace_stream().get_handle(); -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Notifier.h b/protocols/ace/HTBP/HTBP_Notifier.h deleted file mode 100644 index 0c9dcffa2ed..00000000000 --- a/protocols/ace/HTBP/HTBP_Notifier.h +++ /dev/null @@ -1,54 +0,0 @@ -// -*- C++ -*- - -//============================================================================= -/** - * @file HTBP_Notifier.h - * - * $Id$ - * - * @author Phil Mesnier, Priyanka Gontla - */ -//============================================================================= - -#ifndef ACE_HTBP_NOTIFIER_H -#define ACE_HTBP_NOTIFIER_H -#include /**/ "ace/pre.h" - -#include "ace/Event_Handler.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "HTBP_Export.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -namespace ACE -{ - namespace HTBP - { - // Forward declarations. - class Channel; - - class HTBP_Export Notifier : public ACE_Event_Handler - { - public: - Notifier (Channel *ch); - int handle_input(ACE_HANDLE ); - int handle_output(ACE_HANDLE ); - - void unregister (void); - - ACE_HANDLE get_handle (void) const; - - private: - Channel *channel_; - }; - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_NOTIFIER_H */ diff --git a/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.cpp b/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.cpp deleted file mode 100644 index 05e79083794..00000000000 --- a/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.cpp +++ /dev/null @@ -1,196 +0,0 @@ -// ACE_HTBP_Outside_Squid_Filter.cpp -// $Id$ - -#include "ace/Log_Msg.h" - -#include "HTBP_Session.h" -#include "HTBP_Outside_Squid_Filter.h" - -#if !defined (__ACE_INLINE__) -#include "HTBP_Outside_Squid_Filter.inl" -#endif - -ACE_RCSID(HTBP, - ACE_HTBP_Outside_Squid_Filter, - "$Id$") - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ssize_t -ACE::HTBP::Outside_Squid_Filter::recv_data_header (ACE::HTBP::Channel *ch) -{ - // on the outside of the firewall, this method must do the details - // necessary to call replace_session or whatever to migrate the sock - // stream to the appropriate ACE::HTBP::Channel, then to finally - // assign the right filter to that stream. That filter will an - // ACE::HTBP::Outside_[Send|Recv]_Filter. - - // in the case of an ACE::HTBP::Outside_Recv_Filter, the assigned - // filter must be a null filter first, with a replacement. - - // recv header details - char *header_end = this->header_complete(ch); - if (header_end == 0) - { - if (ch->state() != ACE::HTBP::Channel::Closed) - { - ch->state(ACE::HTBP::Channel::Header_Pending); - errno = EWOULDBLOCK; - } - return 0; - } - - char *start = ch->leftovers().rd_ptr(); - - int is_inbound = 0; - ACE_CString token ("POST "); - if (ACE_OS::strncmp (start,token.c_str(),token.length()) == 0) - is_inbound = 1; - else - { - token = "GET "; - if (ACE_OS::strncmp (start, - token.c_str(), - token.length()) != 0) - { - ch->leftovers().length(0); - errno = EINVAL; - ACE_ERROR_RETURN ((LM_ERROR, - "ACE::HTBP::Outside_Squid_Filter::recv_data_header " - "bad request header\n"),0); - } - } - start += token.length(); - // "http://" is stripped by squid, leaving only "/" - start += (ACE_OS::strncmp (start,"http://",7) == 0) ? 7 : 1; - - // set up the actual session and stream - ACE::HTBP::Session_Id_t session_id; - char * slash = ACE_OS::strchr(start,'/'); - char * nl = ACE_OS::strchr (start,'\n'); - if (slash == 0) - { - ch->leftovers().length(0); - errno = EINVAL; - ACE_ERROR_RETURN ((LM_ERROR, - "ACE::HTBP::Outside_Squid_Filter::recv_data_header " - "missing sender key\n"),0); - } - *slash = 0; - session_id.local_.string_to_addr (start); - start = slash+1; - - slash = ACE_OS::strchr(start,'/'); - if (slash == 0) - { - ch->leftovers().length(0); - errno = EINVAL; - ACE_ERROR_RETURN ((LM_ERROR, - "ACE::HTBP::Outside_Squid_Filter::recv_data_header " - "missing sender key\n"),0); - } - *slash = 0; - session_id.peer_.string_to_addr (start); - start = slash + 1; - - slash = ACE_OS::strchr(start,' '); - if (slash == 0) - { - ch->leftovers().length (0); - errno = EINVAL; - ACE_ERROR_RETURN ((LM_ERROR, - "ACE::HTBP::Outside_Squid_Filter::recv_data_header " - "missing sender key"),0); - } - *slash = 0; - session_id.id_ = strtol(start,0,10); - start = slash + 1; - - if (is_inbound) - { - token = "Content-Length: "; - char *tpos = ACE_OS::strstr(start,token.c_str()); - if (tpos != 0) - { - nl = ACE_OS::strchr(tpos,'\n'); - tpos += token.length(); - *nl = 0; - ch->data_len(strtol(tpos,0,10)); - start = nl+1; - } - } - ch->leftovers().rd_ptr(header_end); - - ACE::HTBP::Session *session = 0; - if (ACE::HTBP::Session::find_session (session_id, session) == -1) - { - ACE_NEW_RETURN (session, ACE::HTBP::Session (session_id), 0); - if (ACE::HTBP::Session::add_session (session) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "ACE::HTBP::Outside_Squid_Filter::" - "recv_data_header %p", - "add_session"),0); - } - ch->session(session); - - if (is_inbound) - { - ch->state(ACE::HTBP::Channel::Data_Queued); - session->inbound (ch); - } - else - { - ch->state(ACE::HTBP::Channel::Ready); - session->outbound (ch); - } - return 1; -} - -ssize_t -ACE::HTBP::Outside_Squid_Filter::recv_data_trailer (ACE::HTBP::Channel *ch) -{ - ch->state(ACE::HTBP::Channel::Send_Ack); - return 1; -} - -int -ACE::HTBP::Outside_Squid_Filter::send_ack (ACE::HTBP::Channel *ch) -{ - this->send_data_header (0,ch); - if (ch->state() == ACE::HTBP::Channel::Header_Sent) - ch->state(ACE::HTBP::Channel::Detached); - return 1; -} - -ssize_t -ACE::HTBP::Outside_Squid_Filter::send_data_header (ssize_t data_len, - ACE::HTBP::Channel *ch) -{ - ACE_CString header ("HTTP/1.1 200 OK\n" - "Content-Type: application/octet-stream\n" - "Content-Length: "); - char datalenstr[20]; - ACE_OS::itoa (data_len,datalenstr,10); - header += datalenstr; - header += "\n\n"; - ssize_t result = ch->ace_stream().send(header.c_str(),header.length()); - ch->state(result == -1 ? - ACE::HTBP::Channel::Closed : ACE::HTBP::Channel::Header_Sent); - this->reset_http_code(); - return 1; -} - -ssize_t -ACE::HTBP::Outside_Squid_Filter::send_data_trailer (ACE::HTBP::Channel *ch) -{ - ch->state(ACE::HTBP::Channel::Detached); - return 1; -} - -int -ACE::HTBP::Outside_Squid_Filter::recv_ack (ACE::HTBP::Channel *) -{ - return 1; -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.h b/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.h deleted file mode 100644 index 92008c3a8b6..00000000000 --- a/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- C++ -*- */ - -//============================================================================= -/** - * @file HTBP_Outside_Squid_Filter.h - * - * $Id$ - * - * @author Phil Mesnier - */ -//============================================================================= - -#ifndef ACE_HTBP_OUTSIDE_SQUID_FILTER_H -#define ACE_HTBP_OUTSIDE_SQUID_FILTER_H -#include /**/ "ace/pre.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "HTBP_Export.h" -#include "HTBP_Filter.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -namespace ACE -{ - namespace HTBP - { - // Forward declarations - class Channel; - - /** - * @class Outside_Squid_Filter - * - * @brief Defines the methods in the <Filter> abstraction. - * - * A filter is responsible for wrapping / unwrapping messages depending on - * direction of flow on each stream. There will be 4 filters participating in - * a session, outside-send, outside-recv, outside-send, ouside-recv. It is - * anticipated that specialized filters will be implemented that tune the - * filter behavior based on proxy particulars. That, or there will be a matrix - * configuration parameters that may be tweeked to match the configuration. - * It remains to be seen which is easier to manage. - */ - class HTBP_Export Outside_Squid_Filter : public Filter - { - public: - /// Destructor. - virtual ~Outside_Squid_Filter (void); - - /// Outside and outside Send filters need to supply a data header that - /// sets the stage before sending the data body, and then (maybe) send a - /// data trailer that closes the message. The data header may be formatted - /// differently on the first message, to send optional context information. - virtual ssize_t send_data_header (ssize_t data_len, Channel *); - virtual ssize_t send_data_trailer (Channel *); - - /// Upon receiving data, the Channel is obliged to send an ack. This is - /// either an empty document if this is the in-to-out stream, or a new - /// long-duration document request if this is the out-to-in stream. - virtual int send_ack (Channel *); - virtual int recv_ack (Channel *); - - /// receiving data must compliment sending. In the case of an in-to-out - /// stream. It is possible that the stream identity is not known until the - /// first request is received. In this case the filter will have to look - /// lookup the received session ID and either create a new instance or - /// reassign itself to an existing sesion. In that case, the associated - /// stream will have to be reassigned as well. - /// - virtual ssize_t recv_data_header (Channel *); - virtual ssize_t recv_data_trailer(Channel *); - }; - - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#if defined (__ACE_INLINE__) -#include "HTBP_Outside_Squid_Filter.inl" -#endif - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_OUTSIDE_FILTER_H */ diff --git a/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.inl b/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.inl deleted file mode 100644 index e0659ae5e13..00000000000 --- a/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.inl +++ /dev/null @@ -1,12 +0,0 @@ -// -*- C++ -*- -// -// $Id$ - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE_INLINE -ACE::HTBP::Outside_Squid_Filter::~Outside_Squid_Filter (void) -{ -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Session.cpp b/protocols/ace/HTBP/HTBP_Session.cpp deleted file mode 100644 index 3ebd7da937e..00000000000 --- a/protocols/ace/HTBP/HTBP_Session.cpp +++ /dev/null @@ -1,305 +0,0 @@ -// SOCK_Stream.cpp -// $Id$ - -#include "ace/Log_Msg.h" - -#include "HTBP_Session.h" -#include "ace/SOCK_Connector.h" -#include "ace/Event_Handler.h" -#include "HTBP_Filter.h" -#include "HTBP_ID_Requestor.h" - -#if !defined (__ACE_INLINE__) -#include "HTBP_Session.inl" -#endif - -ACE_RCSID(HTBP,HTBP_Session,"$Id$") - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE::HTBP::Session::Session_Map ACE::HTBP::Session::session_map_; -ACE_UINT32 ACE::HTBP::Session::last_session_id_ = 0; -ACE_SYNCH_MUTEX ACE::HTBP::Session::session_id_lock_; - -/// Static method definitions -ACE_UINT32 -ACE::HTBP::Session::next_session_id () -{ - ACE_Guard<ACE_SYNCH_MUTEX> g(ACE::HTBP::Session::session_id_lock_); - return ++last_session_id_; -} - -int -ACE::HTBP::Session::add_session (ACE::HTBP::Session *s) -{ - return session_map_.bind (s->session_id(),s); -} - -int -ACE::HTBP::Session::remove_session (ACE::HTBP::Session *s) -{ - if (session_map_.current_size() > 0) - return session_map_.unbind(s->session_id()); - return 0; -} - -int -ACE::HTBP::Session::find_session (const ACE::HTBP::Session_Id_t &sid, ACE::HTBP::Session *&out) -{ - ACE::HTBP::Session::Map_Entry *e = 0; - if (session_map_.find (sid,e) == -1) - { - out = 0; - return -1; - } - out = e->int_id_; - return 0; -} - -//---------------------------------------------------------------------------- -ACE::HTBP::Session::Session (void) - : proxy_addr_ (0), - destroy_proxy_addr_ (0), - inbound_ (0), - outbound_ (0), - closed_ (0), - handler_ (0), - reactor_(0), - stream_ (0), - sock_flags_(0) -{ - ACE::HTBP::ID_Requestor req; - ACE_TCHAR * htid = req.get_HTID(); - session_id_.local_ = ACE_TEXT_ALWAYS_CHAR(htid); - delete[] htid; - session_id_.id_ = ACE::HTBP::Session::next_session_id(); - ACE_NEW (inbound_, ACE::HTBP::Channel (this)); - ACE_NEW (outbound_, ACE::HTBP::Channel (this)); -} - -ACE::HTBP::Session::Session (const ACE::HTBP::Addr &peer, - const ACE::HTBP::Addr &local, - ACE_UINT32 sid, - ACE_INET_Addr *proxy, - int take_proxy) - : proxy_addr_ (proxy), - destroy_proxy_addr_ (take_proxy), - inbound_ (0), - outbound_ (0), - closed_ (0), - handler_ (0), - reactor_(0), - stream_ (0), - sock_flags_(0) -{ - session_id_.peer_ = peer; - session_id_.local_ = local; - session_id_.id_ = (sid == 0) ? - ACE::HTBP::Session::next_session_id() : sid; - - ACE_NEW (inbound_,ACE::HTBP::Channel (this)); - ACE_NEW (outbound_,ACE::HTBP::Channel (this)); -} - -ACE::HTBP::Session::Session (const ACE::HTBP::Session_Id_t &id, - ACE_INET_Addr *proxy, - int take_proxy) - : proxy_addr_ (proxy), - destroy_proxy_addr_ (take_proxy), - session_id_(id), - inbound_ (0), - outbound_ (0), - closed_ (0), - handler_ (0), - reactor_ (0), - stream_ (0), - sock_flags_(0) -{ - ACE_NEW (inbound_, ACE::HTBP::Channel (this)); - ACE_NEW (outbound_, ACE::HTBP::Channel (this)); -} - -ACE::HTBP::Session::Session (const ACE::HTBP::Session &other) -{ - this->operator=(other); -} - -ACE::HTBP::Session& -ACE::HTBP::Session::operator= (const ACE::HTBP::Session &) -{ - ACE_ASSERT (this == 0); - return *this; -} - -ACE::HTBP::Session::~Session (void) -{ - if (destroy_proxy_addr_) - delete proxy_addr_; -} - -int -ACE::HTBP::Session::close (void) -{ - if (this->inbound_) - this->inbound_->close(); - if (this->outbound_) - this->outbound_->close(); - this->closed_= 1; - return ACE::HTBP::Session::remove_session (this); -} - - -ACE::HTBP::Channel * -ACE::HTBP::Session::outbound (void) const -{ - if (!this->closed_ && this->proxy_addr_) - const_cast<ACE::HTBP::Session *> (this)->reconnect(); - if ( this->outbound_ == 0) - return 0; - ACE::HTBP::Channel::State s =this->outbound_->state(); - return s == ACE::HTBP::Channel::Init || s == ACE::HTBP::Channel::Ready ? this->outbound_ : 0; -} - -void -ACE::HTBP::Session::reconnect_i (ACE::HTBP::Channel *s) -{ - ACE_SOCK_Connector conn; - char host[100]; - this->proxy_addr_->get_host_name(host,100); - if (conn.connect (s->ace_stream(),*this->proxy_addr_) == -1) - { - ACE_TCHAR buffer[128]; - this->proxy_addr_->addr_to_string(buffer,128, 0); - ACE_ERROR ((LM_ERROR, - ACE_TEXT("ACE::HTBP::Session::reconnect failed to %s, %p\n"), - buffer, s == this->inbound_ ? - ACE_TEXT("inbound") : ACE_TEXT ("outbound"))); - } - s->register_notifier(this->reactor_); - if (s == this->inbound_) - s->send_ack(); -} - -ACE_Event_Handler * -ACE::HTBP::Session::handler (void) -{ - return this->handler_; -} - -void -ACE::HTBP::Session::handler (ACE_Event_Handler * h) -{ - this->handler_ = h; -} - -void -ACE::HTBP::Session::detach (ACE::HTBP::Channel *ch) -{ - if (this->inbound_ == ch) - this->inbound_ = 0; - else if (this->outbound_ == ch) - this->outbound_ = 0; - else - ACE_ERROR ((LM_ERROR, "ACE::HTBP::Session::detach called with unknown channel\n")); -} - -void -ACE::HTBP::Session::reactor (ACE_Reactor *r) -{ - this->reactor_ = r; - this->inbound_->register_notifier(r); - this->outbound_->register_notifier(r); -} - -int -ACE::HTBP::Session::enqueue (ACE_Message_Block *msg) -{ - this->outbound_queue_.enqueue_tail(msg); - return msg->length(); -} - -int -ACE::HTBP::Session::flush_outbound_queue (void) -{ - int result = 0; - if (this->outbound_queue_.message_count() > 0) - { - ACE_Message_Block *msg = 0; - iovec *iov = 0; - ACE_NEW_RETURN (iov, - iovec[this->outbound_queue_.message_count()], - -1); - this->outbound_queue_.peek_dequeue_head (msg); - for (size_t i = 0; i < this->outbound_queue_.message_count(); i++) - { - iov[i].iov_base = msg->rd_ptr(); - iov[i].iov_len = msg->length(); - msg = msg->next(); - } - result = this->outbound_->sendv (iov,this->outbound_queue_.message_count(),0); - delete [] iov; - while (this->outbound_queue_.dequeue_head(msg)) - msg->release(); - } - return result; -} - -int -ACE::HTBP::Session::close_inbound (void) const -{ - return this->inbound_ ? this->inbound_->close() : 0; -} - -int -ACE::HTBP::Session::close_outbound (void) const -{ - return this->outbound_ ? this->outbound_->close() : 0; -} - -int -ACE::HTBP::Session::enable (int flags) -{ - this->sock_flags_ |= flags; - int result = this->inbound_ ? this->inbound_->enable(flags) : 0; - result |= this->outbound_ ? this->outbound_->enable (flags) : 0; - return result; -} - -int -ACE::HTBP::Session::disable (int flags) -{ - this->sock_flags_ &= ~flags; - int result = this->inbound_ ? this->inbound_->disable(flags) : 0; - result |= this->outbound_ ? this->outbound_->disable (flags) : 0; - return result; -} - -ACE::HTBP::Stream * -ACE::HTBP::Session::stream (void)const -{ - return this->stream_; -} - -void -ACE::HTBP::Session::stream (ACE::HTBP::Stream *s) -{ - this->stream_ = s; -} - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class ACE_Hash_Map_Manager_Ex<ACE::HTBP::Session_Id_t, ACE::HTBP::Session*, ACE_Hash<ACE::HTBP::Session_Id_t>,ACE_Equal_To<ACE::HTBP::Session_Id_t>,ACE_SYNCH_MUTEX>; -template class ACE_Hash_Map_Manager<ACE::HTBP::Session_Id_t, ACE::HTBP::Session*, ACE_SYNCH_MUTEX>; -template class ACE_Hash_Map_Entry<ACE::HTBP::Session_Id_t, ACE::HTBP::Session*>; -template class ACE_Hash<ACE::HTBP::Session_Id_t>; -template class ACE_Equal_To<ACE::HTBP::Session_Id_t>; - -#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate ACE_Hash_Map_Manager_Ex<ACE::HTBP::Session_Id_t, ACE::HTBP::Session*, ACE_Hash<ACE::HTBP::Session_Id_t>,ACE_Equal_To<ACE::HTBP::Session_Id_t>,ACE_SYNCH_MUTEX> -#pragma instantiate ACE_Hash_Map_Manager <ACE::HTBP::Session_Id_t, ACE::HTBP::Session*, ACE_SYNCH_MUTEX> -#pragma instantiate ACE_Hash_Map_Entry <ACE::HTBP::Session_Id_t, ACE::HTBP::Session*> -#pragma instantiate ACE_Hash<ACE::HTBP::Session_Id_t>; - -#pragma instantiate ACE_Equal_To<ACE::HTBP::Session_Id_t> -#endif - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Session.h b/protocols/ace/HTBP/HTBP_Session.h deleted file mode 100644 index 5b46c6e86b3..00000000000 --- a/protocols/ace/HTBP/HTBP_Session.h +++ /dev/null @@ -1,198 +0,0 @@ -// -*- C++ -*- - -//============================================================================= -/** - * @file HTBP_Session.h - * - * $Id$ - * - * @author Phil Mesnier - */ -//============================================================================= - -#ifndef ACE_HTBP_SESSION_H -#define ACE_HTBP_SESSION_H -#include /**/ "ace/pre.h" - -#include "ace/SOCK_IO.h" -#include "ace/Hash_Map_Manager.h" -#include "ace/Synch.h" -#include "ace/Message_Queue.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "HTBP_Addr.h" -#include "HTBP_Export.h" -#include "HTBP_Channel.h" - -#include "HTBP_Stream.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -// Forward declarations. -class ACE_HTBP_Filter; -class ACE_Event_Handler; - -namespace ACE -{ - namespace HTBP - { - - class Session_Id_t - { - public: - ACE_UINT32 id_; - Addr local_; - Addr peer_; - - u_long hash () const; - bool operator ==(const Session_Id_t &other) const; - }; - - /** - * @class Session - * - * @brief Defines the methods in the <Session> abstraction. - * - * A session is an entity that combines two Ht_Channels 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, oh well. 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. That is going to be the - * responsibility of the application, or a higher level protocol wrapper. - */ - class HTBP_Export Session - { - public: - // Initialization and termination methods. - /// Constructor. - Session (void); - - /// Constructor (sets the underlying session id with <sid>). - Session (const Addr& peer, - const Addr& local, - ACE_UINT32 sid = 0, - ACE_INET_Addr *proxy = 0, - int take_proxy = 0); - Session (const Session_Id_t &id, - ACE_INET_Addr *proxy = 0, - int take_proxy = 0); - - Session (const Session &other); - Session& operator= (const Session &other); - - /// Destructor. - ~Session (void); - - /// The following methods are specific to the Session - static ACE_UINT32 next_session_id (); - - static int add_session (Session *); - static int remove_session (Session *); - static int find_session (const Session_Id_t&, - Session *&out); - - Stream *stream (void) const; - void stream (Stream *); - - int enqueue (ACE_Message_Block *msg); - int flush_outbound_queue (void); - - int close_inbound (void) const; - int close_outbound (void) const; - - /// get references to the actual streams based on the direction - /// of data flow if this session is on the inside of the proxy - /// ie, has a non-null proxy addr, then the inbound stream is - /// the out_to_in stream, otherwise it is the in_to_out - /// stream. The outbound is the opposite of the inbound. - /// Whenever an application wishes to send data, whether that is - /// request or reply data, it uses the outbound stream, and it - /// should associate an event handler with the inbound stream - /// for receiving data. - Channel *inbound (void) const; - Channel *outbound (void) const; - void inbound (Channel *); - void outbound (Channel *); - - int enable (int value); - int disable (int value); - - const Session_Id_t& session_id(void) const; - void session_id (ACE_UINT32 ); - - const ACE_INET_Addr *proxy_addr (void) const; - void proxy_addr (ACE_INET_Addr *, int destroy = 0); - - const Addr &peer_addr (void) const; - const Addr &local_addr (void) const; - - void peer_addr (const Addr &); - void local_addr (const Addr &); - - /// invoke close on both streams, then remove self from session map - int close (void); - - ACE_Event_Handler *handler (void); - void handler (ACE_Event_Handler *); - void reactor (ACE_Reactor *); - void detach (Channel *); - - int sock_flags(void) const; - - private: - /// Connected Stream ensures that the particular stream is - /// connected to the proxy, if possible. The result is same as - /// the reference passed in, so that it may be used inline for - /// the inboundor outbound methods - - void reconnect (); - void reconnect_i (Channel *); - - typedef ACE_Hash_Map_Manager<Session_Id_t, Session*, - ACE_SYNCH_MUTEX> Session_Map; - typedef ACE_Hash_Map_Entry <Session_Id_t, Session*> Map_Entry; - static Session_Map session_map_; - static ACE_UINT32 last_session_id_; - static ACE_SYNCH_MUTEX session_id_lock_; - - ACE_INET_Addr *proxy_addr_; - int destroy_proxy_addr_; - - Session_Id_t session_id_; - - Channel *inbound_; - Channel *outbound_; - - Filter *inbound_filter_; - Filter *outbound_filter_; - - int closed_; - - ACE_Event_Handler *handler_; - ACE_Reactor *reactor_; - - ACE_Message_Queue<ACE_SYNCH> outbound_queue_; - Stream * stream_; - int sock_flags_; - }; - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#if defined (__ACE_INLINE__) -#include "HTBP_Session.inl" -#endif - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_SESSION_H */ diff --git a/protocols/ace/HTBP/HTBP_Session.inl b/protocols/ace/HTBP/HTBP_Session.inl deleted file mode 100644 index 06c510650c9..00000000000 --- a/protocols/ace/HTBP/HTBP_Session.inl +++ /dev/null @@ -1,114 +0,0 @@ -// -*- C++ -*- -// -// $Id$ - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -ACE_INLINE -void -ACE::HTBP::Session::reconnect () -{ - if (!this->closed_ && this->proxy_addr_) - { - if (inbound_ && - inbound_->ace_stream().get_handle() == ACE_INVALID_HANDLE) - reconnect_i (inbound_); - if (outbound_ && - outbound_->ace_stream().get_handle() == ACE_INVALID_HANDLE) - reconnect_i (outbound_); - } -} - -ACE_INLINE -void -ACE::HTBP::Session::inbound (ACE::HTBP::Channel *s) -{ - this->inbound_ = s; -} - - -ACE_INLINE -void -ACE::HTBP::Session::outbound (ACE::HTBP::Channel *s) -{ - this->outbound_ = s; -} - -ACE_INLINE -ACE::HTBP::Channel * -ACE::HTBP::Session::inbound (void) const -{ - return this->inbound_; -} - -ACE_INLINE -const ACE::HTBP::Session_Id_t& -ACE::HTBP::Session::session_id(void) const -{ - return this->session_id_; -} - -// I'm wondering if this should be coupled with a map update...? -ACE_INLINE -void -ACE::HTBP::Session::session_id (ACE_UINT32 id) -{ - this->session_id_.id_ = id; -} - -ACE_INLINE -const ACE_INET_Addr * -ACE::HTBP::Session::proxy_addr (void) const -{ - return this->proxy_addr_; -} - -ACE_INLINE -const ACE::HTBP::Addr & -ACE::HTBP::Session::peer_addr (void) const -{ - return this->session_id_.peer_; -} - -ACE_INLINE -const ACE::HTBP::Addr & -ACE::HTBP::Session::local_addr (void) const -{ - return this->session_id_.local_; -} - -ACE_INLINE -void -ACE::HTBP::Session::proxy_addr (ACE_INET_Addr *pa, int destroy) -{ - if (this->destroy_proxy_addr_) - delete this->proxy_addr_; - this->proxy_addr_ = pa; - this->destroy_proxy_addr_ = destroy; -} - -ACE_INLINE -int -ACE::HTBP::Session::sock_flags (void) const -{ - return this->sock_flags_; -} - -//--------------------------------------------------------------------------- -ACE_INLINE -u_long -ACE::HTBP::Session_Id_t::hash () const -{ - return id_; // + local.hash() + peer.hash(); -} - -ACE_INLINE -bool -ACE::HTBP::Session_Id_t::operator ==(const ACE::HTBP::Session_Id_t &other) const -{ - return ((this->id_ == other.id_) && - (this->local_ == other.local_) && - (this->peer_ == other.peer_)); -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Stream.cpp b/protocols/ace/HTBP/HTBP_Stream.cpp deleted file mode 100644 index c0913569af0..00000000000 --- a/protocols/ace/HTBP/HTBP_Stream.cpp +++ /dev/null @@ -1,328 +0,0 @@ -/* -*- C++ -*- */ - -//============================================================================= -/** - * @file HTBP_Stream.cpp - * - * $Id$ - * - * @author Phil Mesnier, Priyanka Gontla - */ -//============================================================================= -#include "HTBP_Stream.h" - -#include "HTBP_Session.h" -#include "HTBP_Filter_Factory.h" - -#include "ace/Message_Block.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -// Initialization and termination methods. -/// Constructor. -ACE::HTBP::Stream::Stream (ACE::HTBP::Session *s) - : session_ (s) -{ - if (s == 0) - // create a temporary session to be replaced on first recv. - ACE_NEW (session_, ACE::HTBP::Session); - session_->stream (this); -} - -/// Destructor. -ACE::HTBP::Stream::~Stream (void) -{ -} - - /// Dump the state of an object. -void -ACE::HTBP::Stream::dump (void) const -{ -} - - - -//--------------------------------------------------------------------------- -// = I/O functions. - -/// Recv an <n> byte buffer from the connected socket. -ssize_t -ACE::HTBP::Stream::recv (void *buf, - size_t n, - int flags, - const ACE_Time_Value *timeout) const -{ - if (this->session_->inbound() == 0) - { - errno = EWOULDBLOCK; - ACE_ERROR_RETURN ((LM_ERROR,"recv(buf,n,flags) called, but no " - "inbound channel connected to stream\n"),-1); - } - return this->session_->inbound()->recv(buf,n,flags,timeout); -} - - /// Recv an <n> byte buffer from the connected socket. -ssize_t -ACE::HTBP::Stream::recv (void *buf, - size_t n, - const ACE_Time_Value *timeout) const -{ - if (this->session_->inbound() == 0) - { - errno = EWOULDBLOCK; - ACE_ERROR_RETURN ((LM_ERROR,"recv(buf,n) called, but no " - "inbound channel connected to stream\n"),-1); - } - return this->session_->inbound()->recv(buf,n,timeout); -} - - /// Recv an <iovec> of size <n> from the connected socket. -ssize_t -ACE::HTBP::Stream::recvv (iovec iov[], - int iovcnt, - const ACE_Time_Value *timeout) const -{ - if (this->session_->inbound() == 0) - { - errno = EWOULDBLOCK; - ACE_ERROR_RETURN ((LM_ERROR,"recv(iov,iovcnt) called, but no " - "inbound channel connected to stream\n"),-1); - } - return this->session_->inbound()->recvv(iov,iovcnt,timeout); -} - -ssize_t -ACE::HTBP::Stream::recvv (iovec *io_vec, - const ACE_Time_Value *timeout) const -{ - if (this->session_->inbound() == 0) - { - errno = EWOULDBLOCK; - ACE_ERROR_RETURN ((LM_ERROR,"recv(io_vec) called, but no " - "inbound channel connected to stream\n"),-1); - } - return this->session_->inbound()->recvv(io_vec,timeout); -} - -ssize_t -ACE::HTBP::Stream::recv (void *, - size_t, - ACE_OVERLAPPED *) const -{ - errno = ENOTSUP; - ACE_ERROR_RETURN ((LM_ERROR, "ACE::HTBP::Stream: Asynch recv not supported\n"),-1); -} - -ssize_t -ACE::HTBP::Stream::send (const void *buf, - size_t n, - int flags, - const ACE_Time_Value *timeout) const -{ - if (this->session_->outbound() == 0) - { - ACE_Message_Block *msg = 0; - ACE_NEW_RETURN (msg,ACE_Message_Block(n),-1); - msg->copy ((const char *)buf,n); - // probably ought to separately enqueue the flags and put the data buf - // in a continuation message - // Also, the timeout poses another interesting problem. - return this->session_->enqueue(msg); - } - return this->session_->outbound()->send(buf,n,flags,timeout); -} - -ssize_t -ACE::HTBP::Stream::send (const void *buf, - size_t n, - const ACE_Time_Value *timeout) const -{ - if (this->session_->outbound() == 0) - { - ACE_Message_Block *msg = 0; - ACE_NEW_RETURN (msg,ACE_Message_Block(n),-1); - msg->copy ((const char *)buf,n); - return this->session_->enqueue(msg); - } - return this->session_->outbound()->send(buf,n,timeout); -} - -ssize_t -ACE::HTBP::Stream::sendv (const iovec iov[], - int iovcnt, - const ACE_Time_Value *timeout) const -{ - if (this->session_->outbound() == 0) - { - ACE_Message_Block *msg = 0; - size_t total = 0; - int i = 0; - for (; i < iovcnt; i++) - total += iov[i].iov_len; - ACE_NEW_RETURN (msg,ACE_Message_Block(total),-1); - for (i = 0; i < iovcnt; i++) - msg->copy ((const char *)iov[i].iov_base,iov[i].iov_len); - return this->session_->enqueue(msg); - } - return this->session_->outbound()->sendv(iov,iovcnt,timeout); -} - -ssize_t -ACE::HTBP::Stream::send (const void *, - size_t , - ACE_OVERLAPPED *) const -{ - errno = ENOTSUP; - ACE_ERROR_RETURN ((LM_ERROR, "ACE::HTBP::Stream: Asynch send not supported\n"),-1); -} - -ssize_t -ACE::HTBP::Stream::recv_n (void *, - size_t , - int , - const ACE_Time_Value *, - size_t *) const -{ - errno = ENOTSUP; - ACE_ERROR_RETURN ((LM_ERROR, "ACE::HTBP::Stream: recv_n not supported\n"),-1); -} - - /// Try to recv exactly <len> bytes into <buf> from the connected socket. -ssize_t -ACE::HTBP::Stream::recv_n (void *, - size_t , - const ACE_Time_Value *, - size_t *) const -{ - errno = ENOTSUP; - ACE_ERROR_RETURN ((LM_ERROR, "ACE::HTBP::Stream: recv_n not supported\n"),-1); -} - - /// Receive an <iovec> of size <iovcnt> from the connected socket. -ssize_t -ACE::HTBP::Stream::recvv_n (iovec [], - int , - const ACE_Time_Value *, - size_t *) const -{ - errno = ENOTSUP; - ACE_ERROR_RETURN ((LM_ERROR, "ACE::HTBP::Stream: recvv_n not supported\n"),-1); -} - - /// Try to send exactly <len> bytes from <buf> to the connection socket. -ssize_t -ACE::HTBP::Stream::send_n (const void *, - size_t , - int , - const ACE_Time_Value *, - size_t *) const -{ - errno = ENOTSUP; - ACE_ERROR_RETURN ((LM_ERROR, "ACE::HTBP::Stream: send_n not supported\n"),-1); -} - - /// Try to send exactly <len> bytes from <buf> to the connected socket. -ssize_t -ACE::HTBP::Stream::send_n (const void *, - size_t , - const ACE_Time_Value *, - size_t *) const -{ - errno = ENOTSUP; - ACE_ERROR_RETURN ((LM_ERROR, "ACE::HTBP::Stream: send_n not supported\n"),-1); -} - - /// Send all the <message_block>s chained through their <next> and - /// <cont> pointers. This call uses the underlying OS gather-write - /// operation to reduce the domain-crossing penalty. -ssize_t -ACE::HTBP::Stream::send_n (const ACE_Message_Block *, - const ACE_Time_Value *, - size_t *) const -{ - errno = ENOTSUP; - ACE_ERROR_RETURN ((LM_ERROR, "ACE::HTBP::Stream: send_n not supported\n"),-1); -} - - /// Send an <iovec> of size <iovcnt> to the connected socket. -ssize_t -ACE::HTBP::Stream::sendv_n (const iovec [], - int, - const ACE_Time_Value *, - size_t *) const -{ - errno = ENOTSUP; - ACE_ERROR_RETURN ((LM_ERROR, "ACE::HTBP::Stream: sendv_n not supported\n"),-1); -} - -int -ACE::HTBP::Stream::close_reader (void) -{ - return this->session_->close_inbound(); -} - -int -ACE::HTBP::Stream::close_writer (void) -{ - return this->session_->close_outbound(); -} - -int -ACE::HTBP::Stream::close (void) -{ - return this->session_->close(); -} - -int -ACE::HTBP::Stream::enable (int value) const -{ - return this->session_->enable(value); -} - -int -ACE::HTBP::Stream::disable (int value) const -{ - return this->session_->disable(value); -} - -int -ACE::HTBP::Stream::get_local_addr (ACE::HTBP::Addr &local_addr) const -{ - local_addr = this->session_->local_addr (); - return 0; -} - -int -ACE::HTBP::Stream::get_remote_addr (ACE::HTBP::Addr &peer_addr) const -{ - peer_addr = this->session_->peer_addr(); - return 0; -} - -ACE::HTBP::Session * -ACE::HTBP::Stream::session (void) const -{ - return this->session_; -} - -void -ACE::HTBP::Stream::session (ACE::HTBP::Session *s) -{ - delete this->session_; - this->session_ = s; - s->stream (this); -} - - -ACE_HANDLE -ACE::HTBP::Stream::get_handle (void) const -{ - return ACE_INVALID_HANDLE; -} - -void -ACE::HTBP::Stream::set_handle (ACE_HANDLE ) -{ -} - -ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/protocols/ace/HTBP/HTBP_Stream.h b/protocols/ace/HTBP/HTBP_Stream.h deleted file mode 100644 index 0527ab06632..00000000000 --- a/protocols/ace/HTBP/HTBP_Stream.h +++ /dev/null @@ -1,291 +0,0 @@ -// -*- C++ -*- - -//============================================================================= -/** - * @file HTBP_Stream.h - * - * $Id$ - * - * @author Phil Mesnier, Priyanka Gontla - */ -//============================================================================= - -#ifndef ACE_HTBP_STREAM_H -#define ACE_HTBP_STREAM_H -#include /**/ "ace/pre.h" - -#include "ace/SOCK_Stream.h" -#include "ace/Message_Block.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "HTBP_Export.h" -#include "HTBP_Addr.h" -#include "HTBP_Filter.h" -#include "HTBP_Notifier.h" - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -namespace ACE -{ - namespace HTBP - { - // Forward declarations. - class Session; - - /** - * @class Stream - * - * @brief A stream facade for the HTTP Tunneling Bidirectional Protocol - * - * This adds provides the common interface for applications to do - * I/O that ultimately is wrapped in HTTP for tunneling through - * firewalls. - * - * This class is modelled after the ACE_SOCK_Stream class, and - * provides all of the I/O methods available in that class. Since - * this is a facade, it does not derive from ACE_SOCK_Stream. It - * also does not provide the same performance as ACE_SOCK_Stream, - * as some data may have to be stored by the HTBP classes prior to - * transmission. - * - * <buf> is the buffer to write from or receive into. - * <len> is the number of bytes to transfer. - * The <timeout> parameter in the following methods indicates how - * long to blocking trying to transfer data. If <timeout> == 0, - * then the call behaves as a normal send/recv call, i.e., for - * blocking sockets, the call will block until action is possible; - * for non-blocking sockets, EWOULDBLOCK will be returned if no - * action is immediately possible. - * If <timeout> != 0, the call will wait for data to arrive no longer - * than the relative time specified in *<timeout>. - * The "_n()" I/O methods keep looping until all the data has been - * transferred. These methods also work for sockets in non-blocking - * mode i.e., they keep looping on EWOULDBLOCK. <timeout> is used - * to make sure we keep making progress, i.e., the same timeout - * value is used for every I/O operation in the loop and the timeout - * is not counted down. - * The return values for the "*_n()" methods match the return values - * from the non "_n()" methods and are specified as follows: - * - On complete transfer, the number of bytes transferred is returned. - * - On timeout, -1 is returned, errno == ETIME. - * - On error, -1 is returned, errno is set to appropriate error. - * - On EOF, 0 is returned, errno is irrelevant. - * - * On partial transfers, i.e., if any data is transferred before - * timeout/error/EOF, <bytes_transferred> will contain the number of - * bytes transferred. - * Methods with <iovec> parameter are I/O vector variants of the I/O - * operations. - * Methods with the extra <flags> argument will always result in - * <send> getting called. Methods without the extra <flags> argument - * will result in <send> getting called on Win32 platforms, and - * <write> getting called on non-Win32 platforms. - */ - class HTBP_Export Stream - { - public: - // Initialization and termination methods. - /// Constructor. - Stream (Session *s = 0); - - /// Destructor. - ~Stream (void); - - // = I/O functions. - - /// The Stream is a sibling of the ACE_SOCK_IO class, rather - /// than a decendant. This is due to the requirement to wrap all - /// messages with an HTTP request or reply wrapper, and to send - /// application data in only one direction on one stream. - - /// Recv an <n> byte buffer from the connected socket. - ssize_t recv (void *buf, - size_t n, - int flags, - const ACE_Time_Value *timeout = 0) const; - - /// Recv an <n> byte buffer from the connected socket. - ssize_t recv (void *buf, - size_t n, - const ACE_Time_Value *timeout = 0) const; - - /// Recv an <iovec> of size <n> from the connected socket. - ssize_t recvv (iovec iov[], - int n, - const ACE_Time_Value *timeout = 0) const; - - /// Same as above. Deprecated. - ssize_t recv (iovec iov[], - size_t n, - const ACE_Time_Value *timeout = 0) const; - - /** - * Allows a client to read from a socket without having to - * provide a buffer to read. This method determines how much - * data is in the socket, allocates a buffer of this size, reads - * in the data, and returns the number of bytes read. The - * caller is responsible for deleting the member in the - * <iov_base> field of <io_vec> using delete [] - * io_vec->iov_base. - */ - ssize_t recvv (iovec *io_vec, - const ACE_Time_Value *timeout = 0) const; - - /// Recv <n> bytes via Win32 <ReadFile> using overlapped I/O. - ssize_t recv (void *buf, - size_t n, - ACE_OVERLAPPED *overlapped) const; - - /// Send an <n> byte buffer to the connected socket. - ssize_t send (const void *buf, - size_t n, - int flags, - const ACE_Time_Value *timeout = 0) const; - - /// Send an <n> byte buffer to the connected socket. - ssize_t send (const void *buf, - size_t n, - const ACE_Time_Value *timeout = 0) const; - - /// Send an <iovec> of size <n> to the connected socket. - ssize_t sendv (const iovec iov[], - int n, - const ACE_Time_Value *timeout = 0) const; - - /// Send <n> bytes via Win32 <WriteFile> using overlapped I/O. - ssize_t send (const void *buf, - size_t n, - ACE_OVERLAPPED *overlapped) const; - - - /// Try to recv exactly <len> bytes into <buf> from the - /// connected socket. - ssize_t recv_n (void *buf, - size_t len, - int flags, - const ACE_Time_Value *timeout = 0, - size_t *bytes_transferred = 0) const; - - /// Try to recv exactly <len> bytes into <buf> from the - /// connected socket. - ssize_t recv_n (void *buf, - size_t len, - const ACE_Time_Value *timeout = 0, - size_t *bytes_transferred = 0) const; - - /// Receive an <iovec> of size <iovcnt> from the connected - /// socket. - ssize_t recvv_n (iovec iov[], - int iovcnt, - const ACE_Time_Value *timeout = 0, - size_t *bytes_transferred = 0) const; - - /// Try to send exactly <len> bytes from <buf> to the connection - /// socket. - ssize_t send_n (const void *buf, - size_t len, - int flags, - const ACE_Time_Value *timeout = 0, - size_t *bytes_transferred = 0) const; - - /// Try to send exactly <len> bytes from <buf> to the connected - /// socket. - ssize_t send_n (const void *buf, - size_t len, - const ACE_Time_Value *timeout = 0, - size_t *bytes_transferred = 0) const; - - /// Send all the <message_block>s chained through their <next> - /// and <cont> pointers. This call uses the underlying OS - /// gather-write operation to reduce the domain-crossing - /// penalty. - ssize_t send_n (const ACE_Message_Block *message_block, - const ACE_Time_Value *timeout = 0, - size_t *bytes_transferred = 0) const; - - /// Send an <iovec> of size <iovcnt> to the connected socket. - ssize_t sendv_n (const iovec iov[], - int iovcnt, - const ACE_Time_Value *timeout = 0, - size_t *bytes_transferred = 0) const; - - // = Selectively close endpoints. / Close down the reader. - int close_reader (void); - - /// Close down the writer. - int close_writer (void); - - /** - * Close down the socket (we need this to make things work correctly - * on Win32, which requires use to do a <close_writer> before doing - * the close to avoid losing data). - */ - int close (void); - - // = Meta-type info - typedef Addr PEER_ADDR; - - /// Dump the state of an object. - void dump (void) const; - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; - - public: - ///@notes Added the following methods to continue with - /// current compilation of HTIOP. Might not be needed in - /// future. - Priyanka - /// {@ - void set_handle (ACE_HANDLE h); - ACE_HANDLE get_handle (void) const; - - Session *session (void) const; - void session (Session *s); - - /** - * Enable asynchronous I/O (ACE_SIGIO), urgent data (ACE_SIGURG), - * non-blocking I/O (ACE_NONBLOCK), or close-on-exec (ACE_CLOEXEC), - * which is passed as the <value>. - */ - int enable (int value) const; - - /** - * Disable asynchronous I/O (ACE_SIGIO), urgent data (ACE_SIGURG), - * non-blocking I/O (ACE_NONBLOCK), or close-on-exec (ACE_CLOEXEC), - * which is passed as the <value>. - */ - int disable (int value) const; - - /** - * Return the address of the remotely connected peer (if there is - * one), in the referenced <ACE_Addr>. Returns 0 if successful, else - * -1. - */ - int get_remote_addr (Addr &) const; - - /** - * Return the address of the remotely connected peer (if there is - * one), in the referenced <ACE_Addr>. Returns 0 if successful, else - * -1. - */ - int get_local_addr (Addr &) const; - - //@} - - private: - /// The session_ is a reference to the persistent session this stream is - /// associated with. On the inside, sessions are created by the Connector, - /// which then create streams on demand. - Session *session_; - - }; - } -} - -ACE_END_VERSIONED_NAMESPACE_DECL - -#include /**/ "ace/post.h" -#endif /* ACE_HTBP_STREAM_H */ diff --git a/protocols/ace/HTBP/HTID_Generator.cgi b/protocols/ace/HTBP/HTID_Generator.cgi deleted file mode 100644 index 0d57a552d6c..00000000000 --- a/protocols/ace/HTBP/HTID_Generator.cgi +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/perl - -# This is a sample script that may be used to create domain specific -# unique ID's rather than using UUID. In a typical scenario, this HTID -# generator would reside in the same domain as the target server, so -# that it could be used by any clients of the server. While use of UUID -# as a unique identifier is perfectly fine, use of a remote generator -# gives additional benefits, such as the ability to collect metrics on -# identity requestors. - -print "Content-type:text/html\n\n"; - -$htid = $ENV{'REMOTE_ADDR'}; - -open(IN,"counts.txt") or dienice("Can't open counts.txt for writing: $!"); - -flock(IN,2); # lock the file -seek(IN,0,0); # rewind it to the beginning - -$oldtimestamp = <IN>; # read only the first line. -$save_time = $oldtimestamp; - -close(IN); - - -$timestamp = time; - -if ($oldtimestamp == $timestamp) - { - open (IN2, "sec_id.txt") or - dienice ("Can't open sec_id.txt for writing: $!"); - - flock (IN2, 2); - seek (IN2, 0, 0); - - $secondary_id = <IN2>; - - # increment the secondary id - ++$secondary_id; - - - close (IN2); - } -else { - - $secondary_id = 0; -} - - open(OUT2,">sec_id.txt") or - dienice("Can't open outdata.txt for writing: $!"); - - flock(OUT2,2); # lock the file - seek(OUT2,0,0); # rewind it to the beginning - - print OUT2 "$secondary_id"; - - close(OUT2); - - -#save the timestamp for next time -$oldtimestamp = $timestamp; - - -open(OUT,">counts.txt") or dienice("Can't open outdata.txt for writing: $!"); - -flock(OUT,2); # lock the file -seek(OUT,0,0); # rewind it to the beginning -print OUT "$oldtimestamp\n"; -close(OUT); - - -$result_string = join (".$timestamp", $htid, ".$secondary_id"); - -print <<EndOfHTML; - -$result_string - -EndOfHTML diff --git a/protocols/ace/HTBP/Makefile.am b/protocols/ace/HTBP/Makefile.am deleted file mode 100644 index ca10061bcdd..00000000000 --- a/protocols/ace/HTBP/Makefile.am +++ /dev/null @@ -1,75 +0,0 @@ -## Process this file with automake to create Makefile.in -## -## $Id$ -## - -includedir = @includedir@/ace/HTBP -pkgconfigdir = @libdir@/pkgconfig - -ACE_BUILDDIR = $(top_builddir) -ACE_ROOT = $(top_srcdir) - -## Makefile.HTBP.am - -lib_LTLIBRARIES = libACE_HTBP.la - -libACE_HTBP_la_CPPFLAGS = \ - -I$(ACE_ROOT) \ - -I$(ACE_BUILDDIR) \ - -DHTBP_BUILD_DLL - -libACE_HTBP_la_SOURCES = \ - HTBP_Addr.cpp \ - HTBP_Channel.cpp \ - HTBP_Environment.cpp \ - HTBP_Filter.cpp \ - HTBP_Filter_Factory.cpp \ - HTBP_ID_Requestor.cpp \ - HTBP_Inside_Squid_Filter.cpp \ - HTBP_Notifier.cpp \ - HTBP_Outside_Squid_Filter.cpp \ - HTBP_Session.cpp \ - HTBP_Stream.cpp - -libACE_HTBP_la_LDFLAGS = \ - -version-number @ACE_MAJOR@:@ACE_MINOR@:@ACE_BETA@ - -libACE_HTBP_la_LIBADD = \ - $(ACE_BUILDDIR)/ace/libACE.la - -nobase_include_HEADERS = \ - HTBP_Addr.h \ - HTBP_Channel.h \ - HTBP_Channel.inl \ - HTBP_Environment.h \ - HTBP_Export.h \ - HTBP_Filter.h \ - HTBP_Filter.inl \ - HTBP_Filter_Factory.h \ - HTBP_ID_Requestor.h \ - HTBP_Inside_Squid_Filter.h \ - HTBP_Inside_Squid_Filter.inl \ - HTBP_Macros.h \ - HTBP_Notifier.h \ - HTBP_Outside_Squid_Filter.h \ - HTBP_Outside_Squid_Filter.inl \ - HTBP_Session.h \ - HTBP_Session.inl \ - HTBP_Stream.h - -pkgconfig_DATA = ACE_HTBP.pc - -ACE_HTBP.pc: ${top_builddir}/config.status ${srcdir}/ACE_HTBP.pc.in - ${top_builddir}/config.status --file $@:${srcdir}/ACE_HTBP.pc.in - -EXTRA_DIST = \ - ACE_HTBP.pc.in - - -## Clean up template repositories, etc. -clean-local: - -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* - -rm -f gcctemp.c gcctemp so_locations *.ics - -rm -rf cxx_repository ptrepository ti_files - -rm -rf templateregistry ir.out - -rm -rf ptrepository SunWS_cache Templates.DB 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> |