00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 #include <opc/common/uri_facade.h> 00013 00014 #include <opc/common/exception.h> 00015 00016 #include <libxml/uri.h> 00017 00018 namespace Common 00019 { 00020 00021 void Uri::Initialize(const char* uriString, std::size_t) 00022 { 00023 xmlURIPtr uri = xmlParseURI(uriString); 00024 if (!uri) 00025 { 00026 THROW_ERROR1(CannotParseUri, uriString); 00027 } 00028 if (uri->scheme) 00029 { 00030 SchemeStr = uri->scheme; 00031 } 00032 if (uri->user) 00033 { 00034 UserStr = uri->user; 00035 int ix = UserStr.find(':'); 00036 if(ix > 0) { 00037 PasswordStr = UserStr.substr(ix + 1); 00038 UserStr = UserStr.substr(0, ix); 00039 } 00040 } 00041 if (uri->server) 00042 { 00043 HostStr = uri->server; 00044 } 00045 00046 PortNum = uri->port; 00047 xmlFreeURI(uri); 00048 00049 if (SchemeStr.empty() || HostStr.empty()) 00050 { 00051 THROW_ERROR1(CannotParseUri, uriString); 00052 } 00053 } 00054 00055 } // namespace Common 00056 00057