00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef uripp_authority_h
00023 #define uripp_authority_h
00024 #include "apidefs.h"
00025 #include <string>
00026 #include <iostream>
00027 namespace uripp {
00043 class URIPP_API authority {
00044 public:
00046 enum host_type_e {
00047 null,
00048 DOMAIN_NAME,
00049 IP_ADDRESS,
00050 IPV6_ADDRESS,
00051 };
00052 authority();
00053
00054
00055
00056 authority(const std::string& v);
00057 bool empty() const {return is_null();}
00058 bool is_null() const {return host_.empty();}
00059 const std::string& host() const {return host_;}
00060 host_type_e host_type() const {return host_type_;}
00061 unsigned short port() const {return port_;}
00062 std::string string() const;
00063 std::ostream& operator <<(std::ostream& os) const;
00064 static const char IP_LITERAL_BEGIN_CHAR;
00065 static const char IP_LITERAL_END_CHAR;
00066 static const char PORT_SEPARATOR_CHAR;
00067 private:
00068 friend bool URIPP_API parse(std::string::const_iterator& first, std::string::const_iterator last, authority& v);
00069 host_type_e host_type_;
00070 std::string host_;
00071 unsigned short port_;
00072 };
00074 inline std::ostream& operator <<(std::ostream& os, const authority& v) {return v.operator <<(os);}
00077 bool URIPP_API parse(std::string::const_iterator& first, std::string::const_iterator last, authority& v);
00078 }
00079 #endif