|
@@ -17,6 +17,44 @@
|
|
|
#include "private.h"
|
|
|
|
|
|
|
|
|
+static bool_t ktpd_session_read_cb(faux_async_t *async,
|
|
|
+ void *data, size_t len, void *user_data)
|
|
|
+{
|
|
|
+ ktpd_session_t *session = (ktpd_session_t *)user_data;
|
|
|
+
|
|
|
+ assert(async);
|
|
|
+ assert(data);
|
|
|
+ assert(session);
|
|
|
+
|
|
|
+ printf("Read cb %lu\n", len);
|
|
|
+ faux_free(data);
|
|
|
+
|
|
|
+ async = async; // Happy compiler
|
|
|
+
|
|
|
+ return BOOL_TRUE;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static bool_t ktpd_session_stall_cb(faux_async_t *async,
|
|
|
+ size_t len, void *user_data)
|
|
|
+{
|
|
|
+ ktpd_session_t *session = (ktpd_session_t *)user_data;
|
|
|
+
|
|
|
+ assert(async);
|
|
|
+ assert(session);
|
|
|
+
|
|
|
+ if (!session->stall_cb)
|
|
|
+ return BOOL_TRUE;
|
|
|
+
|
|
|
+ session->stall_cb(session, session->stall_udata);
|
|
|
+
|
|
|
+ async = async; // Happy compiler
|
|
|
+ len = len; // Happy compiler
|
|
|
+
|
|
|
+ return BOOL_TRUE;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
ktpd_session_t *ktpd_session_new(int sock)
|
|
|
{
|
|
|
ktpd_session_t *session = NULL;
|
|
@@ -33,6 +71,7 @@ ktpd_session_t *ktpd_session_new(int sock)
|
|
|
session->state = KTPD_SESSION_STATE_NOT_AUTHORIZED;
|
|
|
session->async = faux_async_new(sock);
|
|
|
assert(session->async);
|
|
|
+ faux_async_set_read_cb(session->async, ktpd_session_read_cb, session);
|
|
|
|
|
|
return session;
|
|
|
}
|
|
@@ -70,6 +109,35 @@ int ktpd_session_fd(const ktpd_session_t *session)
|
|
|
return faux_async_fd(session->async);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+bool_t ktpd_session_async_in(ktpd_session_t *session)
|
|
|
+{
|
|
|
+ assert(session);
|
|
|
+ if (!session)
|
|
|
+ return BOOL_FALSE;
|
|
|
+ if (!ktpd_session_connected(session))
|
|
|
+ return BOOL_FALSE;
|
|
|
+
|
|
|
+ if (faux_async_in(session->async) < 0)
|
|
|
+ return BOOL_FALSE;
|
|
|
+
|
|
|
+ return BOOL_TRUE;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void faux_session_set_stall_cb(ktpd_session_t *session,
|
|
|
+ faux_session_stall_cb_f stall_cb, void *user_data)
|
|
|
+{
|
|
|
+ assert(session);
|
|
|
+ if (!session)
|
|
|
+ return;
|
|
|
+
|
|
|
+ session->stall_cb = stall_cb;
|
|
|
+ session->stall_udata = user_data;
|
|
|
+ faux_async_set_stall_cb(session->async, ktpd_session_stall_cb, session);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
#if 0
|
|
|
static void ktpd_session_bad_socket(ktpd_session_t *session)
|
|
|
{
|