diff options
Diffstat (limited to 'ACE/apps/JAWS2/HTTPU/parse_http_response.cpp')
-rw-r--r-- | ACE/apps/JAWS2/HTTPU/parse_http_response.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/ACE/apps/JAWS2/HTTPU/parse_http_response.cpp b/ACE/apps/JAWS2/HTTPU/parse_http_response.cpp new file mode 100644 index 00000000000..ce7530bf694 --- /dev/null +++ b/ACE/apps/JAWS2/HTTPU/parse_http_response.cpp @@ -0,0 +1,74 @@ +// $Id$ + +#include "HTTPU/parse_http_response.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_stdlib.h" + +Parse_HTTP_Response::Parse_HTTP_Response (const char *response) + : code_ (200), + code_str_ (0), + major_version_ (0), + minor_version_ (9), + version_ (0), + response_ (0), + error_ (0) +{ + if (response != 0) + this->init (response); +} + +Parse_HTTP_Response::~Parse_HTTP_Response (void) +{ + if (this->response_) + ACE_OS::free (this->response_); + this->response_ = 0; + this->code_str_ = 0; + this->version_ = 0; +} + +void +Parse_HTTP_Response::init (const char *response) +{ + this->response_ = ACE_OS::strdup (response); + if (this->response_ == 0) + { + this->error_ = NO_MEMORY; + return; + } + + int n = ::sscanf (this->response_, "HTTP/%d.%d %d %*s", + &(this->major_version_), + &(this->minor_version_), + &(this->code_)); + + if (n == 3) + { + char *p = this->response_; + + while (*p == ' ' || *p == '\t') + p++; + + this->version_ = p++; + + while (*p != ' ' && *p != '\t') + p++; + + *p++ = '\0'; + + while (*p == ' ' || *p == '\t') + p++; + + this->code_str_ = p; + + while (*p && !ACE_OS::strchr (" \t\r\n", *p)) + p++; + + *p++ = '\0'; + } + else + this->error_ = BAD_RESPONSE; +} + +#if !defined (ACE_HAS_INLINED_OSCALLS) +# include "HTTPU/parse_http_response.i" +#endif /* ACE_HAS_INLINED_OSCALLS */ |