/*---------------------------------------------------------------------------*/ static int on_session_event(struct xio_session *session, struct xio_session_event_data *event_data, void *cb_user_context) { struct xio_connection_attr conn_attr; struct test_params *test_params = cb_user_context; pr_info("session event: %s. session:%p, connection:%p, reason: %s\n", xio_session_event_str(event_data->event), session, event_data->conn, xio_strerror(event_data->reason)); switch (event_data->event) { case XIO_SESSION_NEW_CONNECTION_EVENT: /* assign connection private data */ conn_attr.user_context = cb_user_context; xio_modify_connection(event_data->conn, &conn_attr, XIO_CONNECTION_ATTR_USER_CTX); if (!test_params->connection) test_params->connection = event_data->conn; break; case XIO_SESSION_CONNECTION_TEARDOWN_EVENT: if (event_data->reason != XIO_E_SESSION_REJECTED) { pr_info("last recv:%llu\n", test_params->nrecv); test_params->connection = NULL; } xio_connection_destroy(event_data->conn); test_params->connection = NULL; break; case XIO_SESSION_TEARDOWN_EVENT: test_params->session = NULL; xio_session_destroy(session); if (event_data->reason != XIO_E_SESSION_REJECTED) { if (atomic_read(&module_state) & 0x80) xio_context_stop_loop( test_params->ctx); /* exit */ } break; default: break; }; return 0; }
static int server_on_session_event(struct xio_session *session, struct xio_session_event_data *event_data, void *cb_user_context) { struct client_info *ci; struct xio_connection_attr attr; struct server_data *server_data = (struct server_data *)cb_user_context; sd_debug("session event: %s. session:%p, connection:%p, reason: %s", xio_session_event_str(event_data->event), session, event_data->conn, xio_strerror(event_data->reason)); switch (event_data->event) { case XIO_SESSION_NEW_CONNECTION_EVENT: server_data->nr_conn++; memset(&attr, 0, sizeof(attr)); ci = xio_create_client(session, event_data->conn); list_add_tail(&ci->conn.list, &server_data->conn_list); attr.user_context = ci; xio_modify_connection(event_data->conn, &attr, XIO_CONNECTION_ATTR_USER_CTX); xio_context_stop_loop(xio_get_main_ctx()); break; case XIO_SESSION_CONNECTION_TEARDOWN_EVENT: server_data->nr_conn--; sd_assert(0 <= server_data->nr_conn); xio_connection_destroy(event_data->conn); xio_context_stop_loop(xio_get_main_ctx()); break; case XIO_SESSION_TEARDOWN_EVENT: xio_session_destroy(session); xio_context_stop_loop(xio_get_main_ctx()); break; default: break; }; return 0; }