| | 211 | static void parseService6(const string &descr, ServiceTuple &st) |
| | 212 | { |
| | 213 | string::size_type pos=descr.find(']'); |
| | 214 | if(pos == string::npos) |
| | 215 | throw AhuException("Unable to parse '"+descr+"' as an IPv6 service"); |
| | 216 | |
| | 217 | st.host=descr.substr(1, pos-1); |
| | 218 | if(pos + 2 < descr.length()) |
| | 219 | st.port=atoi(descr.c_str() + pos +2); |
| | 220 | } |
| | 221 | |
| | 222 | |
| | 223 | void parseService(const string &descr, ServiceTuple &st) |
| | 224 | { |
| | 225 | if(descr.empty()) |
| | 226 | throw AhuException("Unable to parse '"+descr+"' as a service"); |
| | 227 | |
| | 228 | vector<string> parts; |
| | 229 | stringtok(parts, descr, ":"); |
| | 230 | |
| | 231 | if(descr[0]=='[') { |
| | 232 | parseService6(descr, st); |
| | 233 | } |
| | 234 | else if(descr[0]==':' || parts.size() > 2 || descr.find("::") != string::npos) { |
| | 235 | st.host=descr; |
| | 236 | } |
| | 237 | else { |
| | 238 | parseService4(descr, st); |
| | 239 | } |
| | 240 | } |