MINOR: session: introduce session_new()
This one creates a new session and does the minimum initialization.
diff --git a/include/proto/session.h b/include/proto/session.h
index 3f008e1..cb4deec 100644
--- a/include/proto/session.h
+++ b/include/proto/session.h
@@ -33,6 +33,7 @@
#include <proto/stick_table.h>
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 070c340..5580d4f 100644
--- a/src/session.c
+++ b/src/session.c
@@ -42,6 +42,27 @@
.init = conn_complete_session,
};
+/* Create a a new session and assign it to frontend <fe>, listener <li>,
+ * origin <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);