/* Suggest a server for the initial field of the connection. Return NO_SERVER if none available. */ int initial_server(int conn) { int pd = match_acl(client_acl, &clients[conns[conn].client].addr); if (!pd) { DEBUG(1, "initial_server: denied by acl"); return abuse_server; } if (!(server_alg & ALG_ROUNDROBIN)) { // Load balancing with memory == No roundrobin int server = clients[conns[conn].client].server; /* server may be NO_SERVER if this is a new client */ if (server != NO_SERVER && server != emerg_server && server != abuse_server) { return server; } } if (server_alg & ALG_PRIO) return server_by_prio(); if (server_alg & ALG_WEIGHT) return server_by_weight(); if (server_alg & ALG_HASH) return pen_hash(&clients[conns[conn].client].addr); return server_by_roundrobin(); }
/* Suggest a server for the initial field of the connection. Return NO_SERVER if none available. */ int initial_server(int conn) { int pd = match_acl(client_acl, &clients[conns[conn].client].addr); if (!pd) { DEBUG(1, "initial_server: denied by acl"); return abuse_server; /* returning abuse_server is correct even if it is not set because it defaults to NO_SERVER */ } if (!(server_alg & ALG_ROUNDROBIN)) { // Load balancing with memory == No roundrobin int server = clients[conns[conn].client].server; /* server may be NO_SERVER if this is a new client */ if (server != NO_SERVER && server != emerg_server && server != abuse_server) { DEBUG(2, "Will try previous server %d for client %d", server, conns[conn].client); return server; } } if (server_alg & ALG_PRIO) return server_by_prio(); if (server_alg & ALG_WEIGHT) return server_by_weight(); if (server_alg & ALG_HASH) return pen_hash(&clients[conns[conn].client].addr); return server_by_roundrobin(); }