diff options
Diffstat (limited to 'CIAO/DAnCE/NodeApplicationManager/URL_Parser.cpp')
-rw-r--r-- | CIAO/DAnCE/NodeApplicationManager/URL_Parser.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/CIAO/DAnCE/NodeApplicationManager/URL_Parser.cpp b/CIAO/DAnCE/NodeApplicationManager/URL_Parser.cpp new file mode 100644 index 00000000000..5d211603614 --- /dev/null +++ b/CIAO/DAnCE/NodeApplicationManager/URL_Parser.cpp @@ -0,0 +1,115 @@ +// $Id$ + +#include "URL_Parser.h" + +#include "ace/ACE.h" +#include "ace/OS_NS_string.h" + +bool +URL_Parser::parse_args (int argc, ACE_TCHAR *argv[]) +{ + ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("rwu:h:p:f:d")); + + bool success = true; + int c; + + while ((c = get_opt ()) != -1) + { + switch (c) + { + case 'd': + this->debug_ = 1; + break; + case 'u': + success = parseURL (get_opt.opt_arg ()); + break; + // Usage fallthrough. + default: + success = false; + break; + } + } + + if (this->hostname_ == 0 || this->filename_ == 0) + { + success = false; + } + + return success; +} + +URL_Parser::URL_Parser (void) + : hostname_ (ACE::strnew ("127.0.0.1")), + port_ (ACE_DEFAULT_HTTP_SERVER_PORT), + filename_ (0), + debug_ (0) +{ +} + +bool URL_Parser::parseURL (char* url) +{ + char* ptr = ACE_OS::strstr (url, "http://"); + bool success = true; + + if (0 != ptr) + { + url += ACE_OS::strlen ("http://"); + } + + if (url[0] == '/') + { + this->filename_ = ACE_OS::strdup (url); + } + else + { + ptr = ACE_OS::strstr (url, ":"); + + if (0 != ptr) + { + this->port_ = ACE_OS::atoi (ptr + 1); + } + else + { + ptr = ACE_OS::strstr (url, "/"); + } + + if (0 == ptr) + { + success = false; + } + else + { + size_t host_len = ptr - url; + ACE::strdelete (this->hostname_); + ACE_NEW_RETURN (this->hostname_, char [host_len + 1], false); + ACE_OS::strncpy (this->hostname_, url, host_len); + this->hostname_ [host_len] = '\0'; + ptr = ACE_OS::strstr (ptr, "/"); + + if (0 != ptr) + { + this->filename_ = ACE_OS::strdup (ptr); + } + else + { + success = false; + } + } + } + + return success; +} + + +void URL_Parser::Error (void) +{ + ACE_DEBUG ((LM_DEBUG, + "./http_client -u http://hostname:port/filename [-d]\n")); +} + + +URL_Parser::~URL_Parser (void) +{ + delete [] this->hostname_; + ACE_OS::free (this->filename_); +} |