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 }