MINOR: stream: Slightly rework stream_new to separate CS/SI initialization

It is just a minor reforctoring of stream_new() function to ease next
changes. Especially to move the SI from the stream to the conn-stream.
diff --git a/src/stream.c b/src/stream.c
index 8ceb9bc..774c74c 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -393,8 +393,6 @@
 	memcpy(s->stkctr, sess->stkctr, sizeof(s->stkctr));
 
 	s->sess = sess;
-	s->si[0].flags = SI_FL_NONE;
-	s->si[1].flags = SI_FL_ISBACK;
 
 	s->stream_epoch = _HA_ATOMIC_LOAD(&stream_epoch);
 	s->uniq_id = _HA_ATOMIC_FETCH_ADD(&global.req_count, 1);
@@ -436,19 +434,35 @@
 	vars_init_head(&s->vars_txn,    SCOPE_TXN);
 	vars_init_head(&s->vars_reqres, SCOPE_REQ);
 
+        /* Set SF_HTX flag for HTTP frontends. */
+	if (sess->fe->mode == PR_MODE_HTTP)
+		s->flags |= SF_HTX;
+
+	cs->app = &s->obj_type;
 	s->csf = cs;
+	s->csb = cs_new(NULL, NULL, &s->obj_type, &s->si[1], NULL);
+	if (!s->csb)
+		goto out_fail_alloc_cs;
 
-	/* this part should be common with other protocols */
+	s->si[0].flags = SI_FL_NONE;
 	if (si_reset(&s->si[0]) < 0)
-		goto out_fail_alloc;
+		goto out_fail_reset_si0;
+	si_attach_cs(&s->si[0], s->csf);
 	si_set_state(&s->si[0], SI_ST_EST);
 	s->si[0].hcto = sess->fe->timeout.clientfin;
 
-        /* Set SF_HTX flag for HTTP frontends. */
-	if (sess->fe->mode == PR_MODE_HTTP)
-		s->flags |= SF_HTX;
+	if (likely(sess->fe->options2 & PR_O2_INDEPSTR))
+		s->si[0].flags |= SI_FL_INDEP_STR;
+
+	s->si[1].flags = SI_FL_ISBACK;
+	if (si_reset(&s->si[1]) < 0)
+		goto out_fail_reset_si1;
+	si_attach_cs(&s->si[1], s->csb);
+	s->si[1].hcto = TICK_ETERNITY;
+
+	if (likely(sess->fe->options2 & PR_O2_INDEPSTR))
+		s->si[1].flags |= SI_FL_INDEP_STR;
 
-	si_attach_cs(&s->si[0], cs);
 	if (cs->flags & CS_FL_WEBSOCKET)
 		s->flags |= SF_WEBSOCKET;
 	if (cs_conn(cs)) {
@@ -462,25 +476,6 @@
 		}
 	}
 
-
-	if (likely(sess->fe->options2 & PR_O2_INDEPSTR))
-		s->si[0].flags |= SI_FL_INDEP_STR;
-
-	/* pre-initialize the other side's stream interface to an INIT state. The
-	 * callbacks will be initialized before attempting to connect.
-	 */
-	if (si_reset(&s->si[1]) < 0)
-		goto out_fail_alloc_si1;
-	s->si[1].hcto = TICK_ETERNITY;
-
-	if (likely(sess->fe->options2 & PR_O2_INDEPSTR))
-		s->si[1].flags |= SI_FL_INDEP_STR;
-
-	s->csb = cs_new(NULL, NULL, &s->obj_type, &s->si[1], NULL);
-	if (!s->csb)
-		goto out_fail_alloc_cs;
-	s->si[1].cs = s->csb;
-
 	stream_init_srv_conn(s);
 	s->target = sess->listener ? sess->listener->default_target : NULL;
 
@@ -576,13 +571,14 @@
 	/* Error unrolling */
  out_fail_accept:
 	flt_stream_release(s, 0);
-	task_destroy(t);
 	tasklet_free(s->si[1].wait_event.tasklet);
 	LIST_DELETE(&s->list);
- out_fail_alloc_cs:
-	si_release_endpoint(&s->si[1]);
- out_fail_alloc_si1:
+ out_fail_reset_si1:
 	tasklet_free(s->si[0].wait_event.tasklet);
+ out_fail_reset_si0:
+	si_release_endpoint(&s->si[1]);
+ out_fail_alloc_cs:
+	task_destroy(t);
  out_fail_alloc:
 	pool_free(pool_head_stream, s);
 	DBG_TRACE_DEVEL("leaving on error", STRM_EV_STRM_NEW|STRM_EV_STRM_ERR);