crossroads

Git mirror of https://crossroads.e-tunity.com/
git clone git://git.finwo.net/app/crossroads
Log | Files | Refs | LICENSE

parse.cc (1334B)


      1 #include "backendcheck"
      2 
      3 static int parse_port(string const &s) {
      4     int ret;
      5     if (sscanf(s.c_str(), "%d", &ret) < 1)
      6 	ret = 0;
      7     return ret;
      8 }
      9 
     10 static string parse_uri(string const &s) {
     11     size_t slash = s.find_first_of('/');
     12     if (slash == string::npos)
     13 	return ("/");
     14     return s.substr(slash);
     15 }
     16 
     17 void BackendCheck::parse(string setting) {
     18     // Resets to default
     19     if (!setting.size()) {
     20 	check_type = c_connect;
     21 	srv = "";
     22 	prt = 0;
     23 	geturi = "";
     24 	extprog = "";
     25 	return;
     26     }
     27 
     28     vector<string> parts = str2parts(setting, ':');
     29 
     30     // connect:IP:PORT
     31     if (parts.size() == 3 && parts[0] == "connect") {
     32 	check_type = c_connect;
     33 	srv = parts[1];
     34 	prt = parse_port(parts[2]);
     35 	geturi = "";
     36 	extprog = "";
     37 	return;
     38     }
     39 
     40     // get:IP:PORT
     41     // get:IP:PORT/URI
     42     if (parts.size() == 3 && parts[0] == "get") {
     43 	check_type = c_get;
     44 	srv = parts[1];
     45 	prt = parse_port(parts[2]);
     46 	geturi = parse_uri(parts[2]);
     47 	extprog = "";
     48 	return;
     49     }
     50 
     51     // external:PROGRAM
     52     if (parts.size() == 2 && parts[0] == "external") {
     53 	check_type = c_external;
     54 	srv = "";
     55 	prt = 0;
     56 	geturi = "";
     57 	extprog = parts[1];
     58 	return;
     59     }
     60 
     61     // No luck today
     62     throw Error("Back end check specifiers must be either an empty string, "
     63 		"or 'connect:IP:PORT' or 'get:IP:PORT' or 'get'IP:PORT/URI' "
     64 		"or 'external:PROGRAM'");
     65 }