MINOR: peers: move peer initializations code to reduce the size of the I/O handler.

Implements two new functions to init peer flags and other stuff after
having accepted or connected them with the peer I/O handler so that
to reduce its size.

May be backported as far as 1.5.
diff --git a/src/peers.c b/src/peers.c
index 0248554..bbd9dfd 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -1917,6 +1917,87 @@
 }
 
 /*
+ * Init <peer> peer after having accepted it at peer protocol level.
+ */
+static inline void init_accepted_peer(struct peer *peer, struct peers *peers)
+{
+	struct shared_table *st;
+
+	/* Register status code */
+	peer->statuscode = PEER_SESS_SC_SUCCESSCODE;
+
+	/* Awake main task */
+	task_wakeup(peers->sync_task, TASK_WOKEN_MSG);
+
+	/* Init confirm counter */
+	peer->confirm = 0;
+
+	/* Init cursors */
+	for (st = peer->tables; st ; st = st->next) {
+		st->last_get = st->last_acked = 0;
+		st->teaching_origin = st->last_pushed = st->update;
+	}
+
+	/* reset teaching and learning flags to 0 */
+	peer->flags &= PEER_TEACH_RESET;
+	peer->flags &= PEER_LEARN_RESET;
+
+	/* if current peer is local */
+	if (peer->local) {
+		/* if current host need resyncfrom local and no process assined  */
+		if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMLOCAL &&
+		    !(peers->flags & PEERS_F_RESYNC_ASSIGN)) {
+			/* assign local peer for a lesson, consider lesson already requested */
+			peer->flags |= PEER_F_LEARN_ASSIGN;
+			peers->flags |= (PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
+		}
+
+	}
+	else if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
+	         !(peers->flags & PEERS_F_RESYNC_ASSIGN)) {
+		/* assign peer for a lesson  */
+		peer->flags |= PEER_F_LEARN_ASSIGN;
+		peers->flags |= PEERS_F_RESYNC_ASSIGN;
+	}
+}
+
+/*
+ * Init <peer> peer after having connected it at peer protocol level.
+ */
+static inline void init_connected_peer(struct peer *peer, struct peers *peers)
+{
+	struct shared_table *st;
+
+	/* Init cursors */
+	for (st = peer->tables; st ; st = st->next) {
+		st->last_get = st->last_acked = 0;
+		st->teaching_origin = st->last_pushed = st->update;
+	}
+
+	/* Init confirm counter */
+	peer->confirm = 0;
+
+	/* reset teaching and learning flags to 0 */
+	peer->flags &= PEER_TEACH_RESET;
+	peer->flags &= PEER_LEARN_RESET;
+
+	/* If current peer is local */
+	if (peer->local) {
+		/* flag to start to teach lesson */
+		peer->flags |= PEER_F_TEACH_PROCESS;
+	}
+	else if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
+	         !(peers->flags & PEERS_F_RESYNC_ASSIGN)) {
+		/* If peer is remote and resync from remote is needed,
+		and no peer currently assigned */
+
+		/* assign peer for a lesson */
+		peer->flags |= PEER_F_LEARN_ASSIGN;
+		peers->flags |= PEERS_F_RESYNC_ASSIGN;
+	}
+}
+
+/*
  * IO Handler to handle message exchance with a peer
  */
 static void peer_io_handler(struct appctx *appctx)
@@ -2008,8 +2089,6 @@
 				/* fall through */
 			}
 			case PEER_SESS_ST_SENDSUCCESS: {
-				struct shared_table *st;
-
 				prev_state = appctx->st0;
 				if (!curpeer) {
 					curpeer = appctx->ctx.peers.ptr;
@@ -2027,43 +2106,7 @@
 					goto switchstate;
 				}
 
-				/* Register status code */
-				curpeer->statuscode = PEER_SESS_SC_SUCCESSCODE;
-
-				/* Awake main task */
-				task_wakeup(curpeers->sync_task, TASK_WOKEN_MSG);
-
-				/* Init confirm counter */
-				curpeer->confirm = 0;
-
-				/* Init cursors */
-				for (st = curpeer->tables; st ; st = st->next) {
-					st->last_get = st->last_acked = 0;
-					st->teaching_origin = st->last_pushed = st->update;
-				}
-
-				/* reset teaching and learning flags to 0 */
-				curpeer->flags &= PEER_TEACH_RESET;
-				curpeer->flags &= PEER_LEARN_RESET;
-
-				/* if current peer is local */
-				if (curpeer->local) {
-					/* if current host need resyncfrom local and no process assined  */
-					if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMLOCAL &&
-					    !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) {
-						/* assign local peer for a lesson, consider lesson already requested */
-						curpeer->flags |= PEER_F_LEARN_ASSIGN;
-						curpeers->flags |= (PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-					}
-
-				}
-				else if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-				         !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) {
-					/* assign peer for a lesson  */
-					curpeer->flags |= PEER_F_LEARN_ASSIGN;
-					curpeers->flags |= PEERS_F_RESYNC_ASSIGN;
-				}
-
+				init_accepted_peer(curpeer, curpeers);
 
 				/* switch to waiting message state */
 				HA_ATOMIC_ADD(&connected_peers, 1);
@@ -2093,8 +2136,6 @@
 				/* fall through */
 			}
 			case PEER_SESS_ST_GETSTATUS: {
-				struct shared_table *st;
-
 				prev_state = appctx->st0;
 				if (!curpeer) {
 					curpeer = appctx->ctx.peers.ptr;
@@ -2123,35 +2164,7 @@
 
 				/* If status code is success */
 				if (curpeer->statuscode == PEER_SESS_SC_SUCCESSCODE) {
-					/* Init cursors */
-					for (st = curpeer->tables; st ; st = st->next) {
-						st->last_get = st->last_acked = 0;
-						st->teaching_origin = st->last_pushed = st->update;
-					}
-
-					/* Init confirm counter */
-					curpeer->confirm = 0;
-
-					/* reset teaching and learning flags to 0 */
-					curpeer->flags &= PEER_TEACH_RESET;
-					curpeer->flags &= PEER_LEARN_RESET;
-
-					/* If current peer is local */
-					if (curpeer->local) {
-						/* flag to start to teach lesson */
-						curpeer->flags |= PEER_F_TEACH_PROCESS;
-
-					}
-					else if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-					         !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) {
-						/* If peer is remote and resync from remote is needed,
-						   and no peer currently assigned */
-
-						/* assign peer for a lesson */
-						curpeer->flags |= PEER_F_LEARN_ASSIGN;
-						curpeers->flags |= PEERS_F_RESYNC_ASSIGN;
-					}
-
+					init_connected_peer(curpeer, curpeers);
 				}
 				else {
 					if (curpeer->statuscode == PEER_SESS_SC_ERRVERSION)