Show
Ignore:
Timestamp:
06/06/06 23:03:29 (7 years ago)
Author:
ahu
Message:

add support to make powerdns able to listen on multiple different ports, per local-address.
Accepts [::1]:5300 syntax and 127.0.0.1:5300

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/misc.cc

    r812 r845  
    198198} 
    199199 
    200 void parseService(const string &descr, ServiceTuple &st) 
    201 { 
    202  
     200static void parseService4(const string &descr, ServiceTuple &st) 
     201{ 
    203202  vector<string>parts; 
    204203  stringtok(parts,descr,":"); 
     
    210209} 
    211210 
     211static 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 
     223void 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} 
    212241 
    213242int waitForData(int fd, int seconds, int useconds)