crossroads

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

setdispatcmode.cc (1672B)


      1 #include "config"
      2 
      3 void Config::setdispatchmode (string s) {
      4     if (s.substr(0, 2) == "e:") {
      5 	dmode.mode (Dispatchmode::m_external);
      6 	external_algorithm = s.substr (2);
      7     } else if (s.substr (0, 9) == "external:") {
      8 	dmode.mode (Dispatchmode::m_external);
      9 	external_algorithm = s.substr(9);
     10     } else if (s == "f" || s == "first-available")
     11 	dmode.mode (Dispatchmode::m_firstactive);
     12     else if (s == "h" || s == "strict-hashed-ip")
     13 	dmode.mode (Dispatchmode::m_strict_hashed_ip);
     14     else if (s == "H" || s == "lax-hashed-ip")
     15 	dmode.mode (Dispatchmode::m_lax_hashed_ip);
     16     else if (s == "l" || s == "least-connections")
     17 	dmode.mode (Dispatchmode::m_leastconn);
     18     else if (s == "r" || s == "round-robin")
     19 	dmode.mode (Dispatchmode::m_roundrobin);
     20     else if (s == "L" || s == "weighted-load" ) {
     21 	timeval t1;
     22 	gettimeofday(&t1, NULL);
     23 	mt_srand(t1.tv_sec * t1.tv_usec);
     24 	dmode.mode (Dispatchmode::m_weighted_load);
     25     }
     26     else if (s.substr(0, 2) == "s:") {
     27 	dmode.mode (Dispatchmode::m_strict_stored_ip);
     28 	ipstoretimeout(setinteger(s.substr(2)));
     29     } else if (s.substr(0, 17) == "strict-stored-ip:") {
     30 	dmode.mode (Dispatchmode::m_strict_stored_ip);
     31 	ipstoretimeout(setinteger(s.substr(17)));
     32     } else if (s.substr(0, 2) == "S:") {
     33 	dmode.mode (Dispatchmode::m_lax_stored_ip);
     34 	ipstoretimeout(setinteger(s.substr(2)));
     35     } else if (s.substr(0, 14) == "lax-stored-ip:") {
     36 	dmode.mode (Dispatchmode::m_lax_stored_ip);
     37 	ipstoretimeout(setinteger(s.substr(14)));
     38     } else
     39 	throw Error("Bad dispatch mode -d" + s);
     40 
     41     if (dmode.mode() == Dispatchmode::m_external &&
     42 	external_algorithm.size() < 1)
     43 	throw Error("External algorithm handler missing");
     44 }