[MINOR] backend: reorganize the LB algorithm selection

We can now factor out some common tests between all map-based
algorithms. This removes some redundancy and makes the code more
logical.
diff --git a/src/backend.c b/src/backend.c
index 3e0bc8e..14ae705 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -502,94 +502,98 @@
 			goto out;
 		}
 
-		switch (s->be->lbprm.algo & BE_LB_ALGO) {
-		case BE_LB_ALGO_RR:
+		/* First check whether we need to fetch some data or simply call
+		 * the LB lookup function. Only the hashing functions will need
+		 * some input data in fact, and will support multiple algorithms.
+		 */
+		switch (s->be->lbprm.algo & BE_LB_LKUP) {
+		case BE_LB_LKUP_RRTREE:
 			s->srv = fwrr_get_next_server(s->be, s->prev_srv);
-			if (!s->srv) {
-				err = SRV_STATUS_FULL;
-				goto out;
-			}
 			break;
-		case BE_LB_ALGO_LC:
+
+		case BE_LB_LKUP_LCTREE:
 			s->srv = fwlc_get_next_server(s->be, s->prev_srv);
-			if (!s->srv) {
-				err = SRV_STATUS_FULL;
-				goto out;
-			}
 			break;
-		case BE_LB_ALGO_SH:
-			if (s->cli_addr.ss_family == AF_INET)
-				len = 4;
-			else if (s->cli_addr.ss_family == AF_INET6)
-				len = 16;
-			else {
-				/* unknown IP family */
+
+		case BE_LB_LKUP_MAP:
+			if ((s->be->lbprm.algo & BE_LB_KIND) != BE_LB_KIND_HI) {
+				/* unknown balancing algorithm */
 				err = SRV_STATUS_INTERNAL;
 				goto out;
 			}
+
+			switch (s->be->lbprm.algo & BE_LB_PARM) {
+			case BE_LB_HASH_SRC:
+				if (s->cli_addr.ss_family == AF_INET)
+					len = 4;
+				else if (s->cli_addr.ss_family == AF_INET6)
+					len = 16;
+				else {
+					/* unknown IP family */
+					err = SRV_STATUS_INTERNAL;
+					goto out;
+				}
 		
-			s->srv = get_server_sh(s->be,
-					       (void *)&((struct sockaddr_in *)&s->cli_addr)->sin_addr,
-					       len);
-			break;
-		case BE_LB_ALGO_UH:
-			/* URI hashing */
-			s->srv = get_server_uh(s->be,
-					       s->txn.req.sol + s->txn.req.sl.rq.u,
-					       s->txn.req.sl.rq.u_l);
-			break;
-		case BE_LB_ALGO_PH:
-			/* URL Parameter hashing */
-			if (s->txn.meth == HTTP_METH_POST &&
-			    memchr(s->txn.req.sol + s->txn.req.sl.rq.u, '&',
-				   s->txn.req.sl.rq.u_l ) == NULL)
-				s->srv = get_server_ph_post(s);
-			else
-				s->srv = get_server_ph(s->be,
+				s->srv = get_server_sh(s->be,
+						       (void *)&((struct sockaddr_in *)&s->cli_addr)->sin_addr,
+						       len);
+				break;
+
+			case BE_LB_HASH_URI:
+				/* URI hashing */
+				s->srv = get_server_uh(s->be,
 						       s->txn.req.sol + s->txn.req.sl.rq.u,
 						       s->txn.req.sl.rq.u_l);
+				break;
 
-			if (!s->srv) {
-				/* parameter not found, fall back to round robin on the map */
-				s->srv = map_get_server_rr(s->be, s->prev_srv);
-				if (!s->srv) {
-					err = SRV_STATUS_FULL;
-					goto out;
-				}
-			}
-			break;
-		case BE_LB_ALGO_HH:
-			/* Header Parameter hashing */
-			s->srv = get_server_hh(s);
+			case BE_LB_HASH_PRM:
+				/* URL Parameter hashing */
+				if (s->txn.meth == HTTP_METH_POST &&
+				    memchr(s->txn.req.sol + s->txn.req.sl.rq.u, '&',
+					   s->txn.req.sl.rq.u_l ) == NULL)
+					s->srv = get_server_ph_post(s);
+				else
+					s->srv = get_server_ph(s->be,
+							       s->txn.req.sol + s->txn.req.sl.rq.u,
+							       s->txn.req.sl.rq.u_l);
+				break;
 
-			if (!s->srv) {
-				/* parameter not found, fall back to round robin on the map */
-				s->srv = map_get_server_rr(s->be, s->prev_srv);
-				if (!s->srv) {
-					err = SRV_STATUS_FULL;
-					goto out;
-				}
+			case BE_LB_HASH_HDR:
+				/* Header Parameter hashing */
+				s->srv = get_server_hh(s);
+				break;
+
+			case BE_LB_HASH_RDP:
+				/* RDP Cookie hashing */
+				s->srv = get_server_rch(s);
+				break;
+
+			default:
+				/* unknown balancing algorithm */
+				err = SRV_STATUS_INTERNAL;
+				goto out;
 			}
-			break;
-		case BE_LB_ALGO_RCH:
-			/* RDP Cookie hashing */
-			s->srv = get_server_rch(s);
 
-			if (!s->srv) {
-				/* parameter not found, fall back to round robin on the map */
+			/* If the hashing parameter was not found, let's fall
+			 * back to round robin on the map.
+			 */
+			if (!s->srv)
 				s->srv = map_get_server_rr(s->be, s->prev_srv);
-				if (!s->srv) {
-					err = SRV_STATUS_FULL;
-					goto out;
-				}
-			}
+
+			/* end of map-based LB */
 			break;
+
 		default:
 			/* unknown balancing algorithm */
 			err = SRV_STATUS_INTERNAL;
 			goto out;
 		}
+
+		if (!s->srv) {
+			err = SRV_STATUS_FULL;
+			goto out;
+		}
-		if (s->srv != s->prev_srv) {
+		else if (s->srv != s->prev_srv) {
 			s->be->cum_lbconn++;
 			s->srv->cum_lbconn++;
 		}