diff --git a/include/proto/session.h b/include/proto/session.h index 3f008e16e..cb4deeceb 100644 --- a/include/proto/session.h +++ b/include/proto/session.h @@ -33,6 +33,7 @@ #include extern struct pool_head *pool2_session; +struct session *session_new(struct proxy *fe, struct listener *li, enum obj_type *origin); void session_free(struct session *sess); int init_session(); int session_accept_fd(struct listener *l, int cfd, struct sockaddr_storage *addr); diff --git a/src/session.c b/src/session.c index 070c340b8..5580d4f3d 100644 --- a/src/session.c +++ b/src/session.c @@ -42,6 +42,27 @@ struct data_cb sess_conn_cb = { .init = conn_complete_session, }; +/* Create a a new session and assign it to frontend , listener
  • , + * origin , set the current date and clear the stick counters pointers. + * Returns the session upon success or NULL. The session may be released using + * session_free(). + */ +struct session *session_new(struct proxy *fe, struct listener *li, enum obj_type *origin) +{ + struct session *sess; + + sess = pool_alloc2(pool2_session); + if (sess) { + sess->listener = li; + sess->fe = fe; + sess->origin = origin; + sess->accept_date = date; /* user-visible date for logging */ + sess->tv_accept = now; /* corrected date for internal use */ + memset(sess->stkctr, 0, sizeof(sess->stkctr)); + } + return sess; +} + void session_free(struct session *sess) { session_store_counters(sess);