diff options
| author | yangwei <[email protected]> | 2023-11-16 14:12:19 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2023-11-16 15:33:09 +0800 |
| commit | 1457a9f4fe5d0c29b3b6fdaf6133f289f2a3b2e7 (patch) | |
| tree | 3bf05eac979a749a4be28adf2cb7ebfddc6340f6 | |
| parent | 4a212e17d87003dcce38d88f4b47275cfaa6de8d (diff) | |
🦄 refactor(adapter session): Merged Status Update Interface
Consolidated the adapter's session state update interfaces into a single, unified method. This simplification streamlines the process and improves overall code maintainability.
| -rw-r--r-- | examples/sapp_plugin/publisher_loader.c | 7 | ||||
| -rw-r--r-- | src/adapter/adapter.c | 55 | ||||
| -rw-r--r-- | src/adapter/adapter.h | 7 | ||||
| -rw-r--r-- | src/stellar_on_sapp/stellar_on_sapp.c | 10 |
4 files changed, 32 insertions, 47 deletions
diff --git a/examples/sapp_plugin/publisher_loader.c b/examples/sapp_plugin/publisher_loader.c index cc26dc7..9f1e8ab 100644 --- a/examples/sapp_plugin/publisher_loader.c +++ b/examples/sapp_plugin/publisher_loader.c @@ -108,7 +108,7 @@ static void loader_transfer_stream_entry(struct streaminfo *pstream, UCHAR state { case OP_STATE_PENDING: ctx->sess=adapter_session_new(g_stellar, pstream); - adapter_session_open(pstream, ctx->sess, a_packet); + adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_OPENING); break; case OP_STATE_DATA: msg = stream_ctx_dup((const struct simple_stream_ctx *)*pme); @@ -116,10 +116,11 @@ static void loader_transfer_stream_entry(struct streaminfo *pstream, UCHAR state { FREE(msg); } - adapter_session_active(pstream, ctx->sess, a_packet); + adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_ACTIVE); break; case OP_STATE_CLOSE: - adapter_session_close(pstream, ctx->sess, a_packet); + adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_CLOSING); + adapter_session_free(ctx->sess); print_stream_ctx(pstream, ctx); FREE(*pme); break; diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index f7d499d..c3333a0 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -172,48 +172,33 @@ struct session *adapter_session_new(struct stellar *st, struct streaminfo *strea return session_new(st, type, stream->threadnum); } -void adapter_session_open(struct streaminfo *stream, struct session *sess, void *a_packet) +void adapter_session_free(struct session *sess) { - struct packet *pkt=CALLOC(struct packet, 1); - pkt->raw_pkt=(void *)get_current_rawpkt_from_streaminfo(stream); - pkt->a_stream=stream; - session_set_current_packet(sess, pkt); - session_dispatch(sess, SESSION_STATE_OPENING, pkt); + return session_free(sess); } -void adapter_session_active(struct streaminfo *stream, struct session *sess, void *a_packet) -{ - if (sess) - { - struct packet *pkt=(struct packet *)session_get0_current_packet(sess); - pkt->raw_pkt=(void *)get_current_rawpkt_from_streaminfo(stream); - session_dispatch( sess, SESSION_STATE_ACTIVE, pkt); - } - return; -} - -void adapter_session_control(struct streaminfo *stream, struct session *sess, void *a_packet) -{ - if (sess) - { - struct packet *pkt=(struct packet *)session_get0_current_packet(sess); - pkt->raw_pkt=(void *)get_current_rawpkt_from_streaminfo(stream); - session_dispatch(sess, SESSION_STATE_CONTROL, pkt); - } - return; - -} - - -//streaminfo close, or firewall active close streaminfo -void adapter_session_close(struct streaminfo *stream, struct session *sess, void *a_packet) +void adapter_session_state_update(struct streaminfo *stream, struct session *sess, void *a_packet, enum session_state state) { + struct packet *pkt = NULL; if(sess) { - struct packet *pkt=(struct packet *)session_get0_current_packet(sess); + if(state == SESSION_STATE_OPENING) + { + pkt=CALLOC(struct packet, 1); + session_set_current_packet(sess, pkt); + pkt->a_stream=stream; + } + else + { + pkt=(struct packet *)session_get0_current_packet(sess); + } pkt->raw_pkt=(void *)get_current_rawpkt_from_streaminfo(stream); - session_dispatch(sess, SESSION_STATE_CLOSING, a_packet); - session_free(sess); + session_dispatch( sess, state, pkt); + if(state == SESSION_STATE_CLOSING) + { + FREE(pkt); + session_set_current_packet(sess, NULL); + } } return; } diff --git a/src/adapter/adapter.h b/src/adapter/adapter.h index ec32929..d281be3 100644 --- a/src/adapter/adapter.h +++ b/src/adapter/adapter.h @@ -10,11 +10,8 @@ void stellar_exit(struct stellar *st); //streaminfo open struct session *adapter_session_new(struct stellar *st, struct streaminfo *stream); -void adapter_session_open(struct streaminfo *stream, struct session *session, void *a_packet); -void adapter_session_active(struct streaminfo *stream, struct session *session, void *a_packet); -void adapter_session_control(struct streaminfo *stream, struct session *session, void *a_packet); +void adapter_session_free(struct session *sess); -//streaminfo close, or firewall active close streaminfo -void adapter_session_close(struct streaminfo *stream, struct session *session, void *a_packet); +void adapter_session_state_update(struct streaminfo *stream, struct session *sess, void *a_packet, enum session_state state); void adapter_session_poll(struct session *sess);
\ No newline at end of file diff --git a/src/stellar_on_sapp/stellar_on_sapp.c b/src/stellar_on_sapp/stellar_on_sapp.c index 4d454a1..6843f32 100644 --- a/src/stellar_on_sapp/stellar_on_sapp.c +++ b/src/stellar_on_sapp/stellar_on_sapp.c @@ -48,7 +48,9 @@ static int is_l7_type_tunnels(struct streaminfo *a_stream) static void stellar_on_sapp_bridge_free(const struct streaminfo *stream, int bridge_id, void *data) { - return adapter_session_close((struct streaminfo *)stream, (struct session *)data, NULL); + adapter_session_state_update((struct streaminfo *)stream, (struct session *)data, NULL, SESSION_STATE_CLOSING); + adapter_session_free((struct session *)data); + return; } int STELLAR_START_LOADER_INIT() @@ -124,19 +126,19 @@ static char loader_transfer_stream_entry(struct streaminfo *pstream, UCHAR state ctx->sess=adapter_session_new(g_stellar, pstream); session_set_ex_data(ctx->sess, g_streaminfo_exdata_id, pstream); stream_bridge_async_data_put(pstream, g_session_bridge_id, ctx->sess); - adapter_session_open(pstream, ctx->sess, a_packet); + adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_OPENING); break; case OP_STATE_DATA: raw_pkt = get_current_rawpkt_from_streaminfo(pstream); get_opt_from_rawpkt(raw_pkt, RAW_PKT_GET_IS_CTRL_PKT, (void *)&is_ctrl_pkt); if(is_ctrl_pkt==1) { - adapter_session_control(pstream, ctx->sess, a_packet); + adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_CONTROL); return APP_STATE_GIVEME|APP_STATE_DROPPKT; } else { - adapter_session_active(pstream, ctx->sess, a_packet); + adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_ACTIVE); } break; case OP_STATE_CLOSE: |
