summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangwei <[email protected]>2023-11-16 14:12:19 +0800
committeryangwei <[email protected]>2023-11-16 15:33:09 +0800
commit1457a9f4fe5d0c29b3b6fdaf6133f289f2a3b2e7 (patch)
tree3bf05eac979a749a4be28adf2cb7ebfddc6340f6
parent4a212e17d87003dcce38d88f4b47275cfaa6de8d (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.c7
-rw-r--r--src/adapter/adapter.c55
-rw-r--r--src/adapter/adapter.h7
-rw-r--r--src/stellar_on_sapp/stellar_on_sapp.c10
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: