diff options
Diffstat (limited to 'ACE/apps/JAWS2/JAWS/Headers.cpp')
-rw-r--r-- | ACE/apps/JAWS2/JAWS/Headers.cpp | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/ACE/apps/JAWS2/JAWS/Headers.cpp b/ACE/apps/JAWS2/JAWS/Headers.cpp new file mode 100644 index 00000000000..26f51a89970 --- /dev/null +++ b/ACE/apps/JAWS2/JAWS/Headers.cpp @@ -0,0 +1,161 @@ +/* $Id$ */ + +#include "JAWS/Headers.h" +#include "ace/OS_NS_stdlib.h" +#include "ace/OS_NS_strings.h" +#include "ace/OS_NS_string.h" + +// Header Data + +JAWS_Header_Data::JAWS_Header_Data (const char *name, const char *value, + int type) + : header_name_ (name ? ACE_OS::strdup (name) : 0), + header_value_ (value ? ACE_OS::strdup (value) : 0), + header_type_ (type) +{ +} + +JAWS_Header_Data::JAWS_Header_Data (const char *name, int type, + const char *value) + : header_name_ (name ? ACE_OS::strdup (name) : 0), + header_value_ (value ? ACE_OS::strdup (value) : 0), + header_type_ (type) +{ +} + +JAWS_Header_Data::~JAWS_Header_Data (void) +{ + if ( this->header_name_ ) + ACE_OS::free ((void *)this->header_name_); + if ( this->header_value_ ) + ACE_OS::free ((void *)this->header_value_); + this->header_name_ = 0; + this->header_value_ = 0; +} + +const char * +JAWS_Header_Data::header_name (void) const +{ + return this->header_name_; +} + +const char * +JAWS_Header_Data::header_value (void) const +{ + return this->header_value_; +} + +int +JAWS_Header_Data::header_type (void) const +{ + return this->header_type_; +} + +void +JAWS_Header_Data::header_name (const char *name) +{ + if (this->header_name_) + ACE_OS::free ((void *)this->header_name_); + this->header_name_ = name ? ACE_OS::strdup (name) : 0; +} + +void +JAWS_Header_Data::header_value (const char *value) +{ + if (this->header_value_) + ACE_OS::free ((void *)this->header_value_); + this->header_value_ = value ? ACE_OS::strdup (value) : 0; +} + +void +JAWS_Header_Data::header_type (int type) +{ + this->header_type_ = type; +} + + +// Header Table + +JAWS_Headers::JAWS_Headers (void) + : iter_ (*this) +{ +} + +JAWS_Headers::~JAWS_Headers (void) +{ +} + +JAWS_Header_Table_Iterator & +JAWS_Headers::iter (void) +{ + return this->iter_; +} + +int +JAWS_Headers::insert (JAWS_Header_Data *new_data) +{ + // Since there may be duplicate header entries, we don't worry about + // doing this find anymore. Make the application developer figure + // out how to interpret duplicate entries. + + return (JAWS_Header_Table::insert_tail (new_data) ? 0 : -1); +} + +JAWS_Header_Data * +JAWS_Headers::find (const char *const &header_name) +{ + this->iter_.first (); + return this->find_next (header_name); +} + +JAWS_Header_Data * +JAWS_Headers::find_next (const char *const &header_name) +{ + JAWS_Header_Data *data = 0; + JAWS_Header_Table_Iterator &i = this->iter_; + + while (! i.done ()) + { + data = i.next (); + if (data != 0) + { + if (ACE_OS::strcasecmp (data->header_name (), header_name) != 0) + data = 0; + } + i.advance (); + if (data != 0) + break; + } + + return data; +} + +void +JAWS_Headers::remove_all (const char *const &header_name) +{ + JAWS_Header_Data *data; + int done; + + do + { + JAWS_Header_Table_Iterator i (*this); + i.first (); + done = 1; + while (! i.done ()) + { + data = i.next (); + if (data != 0 + && ACE_OS::strcasecmp (data->header_name (), header_name) == 0) + { + i.remove (); + delete data; + done = 0; + break; + } + else + i.advance (); + } + } + while (! done); +} + |