diff options
| author | yangwei <[email protected]> | 2023-11-03 14:23:38 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2023-11-03 14:23:38 +0800 |
| commit | ee6b7e01559bb96dacbcdfc725e77e7a5bffae61 (patch) | |
| tree | c9be866cbb79043680d5c65b0ec2e55a65d0ea22 | |
| parent | 10bd9896f01688a5a725f76d5dbaf7aeab1a8723 (diff) | |
✨ feat(ctrl packet): add EV_CONTROL in session.h
| -rw-r--r-- | examples/sapp_plugin/simple_loader.c | 15 | ||||
| -rw-r--r-- | include/stellar/session.h | 3 | ||||
| -rw-r--r-- | src/adapter/adapter.c | 13 | ||||
| -rw-r--r-- | src/adapter/adapter.h | 1 |
4 files changed, 30 insertions, 2 deletions
diff --git a/examples/sapp_plugin/simple_loader.c b/examples/sapp_plugin/simple_loader.c index 3d64774..9ef03eb 100644 --- a/examples/sapp_plugin/simple_loader.c +++ b/examples/sapp_plugin/simple_loader.c @@ -95,7 +95,8 @@ static char loader_transfer_stream_entry(struct streaminfo *pstream, UCHAR state { struct simple_stream_ctx *ctx=(struct simple_stream_ctx *)*pme; struct tcpdetail *pdetail=(struct tcpdetail *)pstream->pdetail; - + int is_ctrl_pkt=0; + const void *raw_pkt=NULL; if(state == OP_STATE_PENDING && (is_l7_type_tunnels(pstream)==1)) { return APP_STATE_DROPME; @@ -125,7 +126,17 @@ static char loader_transfer_stream_entry(struct streaminfo *pstream, UCHAR state stream_bridge_async_data_put(pstream, g_session_bridge_id, ctx->sess); break; case OP_STATE_DATA: - adapter_session_active(pstream, ctx->sess, a_packet); + raw_pkt = get_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); + return APP_STATE_GIVEME|APP_STATE_DROPPKT; + } + else + { + adapter_session_active(pstream, ctx->sess, a_packet); + } break; case OP_STATE_CLOSE: FREE(*pme); diff --git a/include/stellar/session.h b/include/stellar/session.h index ca78423..d3155cc 100644 --- a/include/stellar/session.h +++ b/include/stellar/session.h @@ -18,6 +18,7 @@ enum session_state SESSION_STATE_OPENING = 1 , SESSION_STATE_ACTIVE = 2, SESSION_STATE_CLOSING = 3, + SESSION_STATE_CONTROL = 6, __SESSION_STATE_MAX, }; @@ -102,10 +103,12 @@ int packet_arrive_time(const struct packet *pkt, struct timeval *ts); #define SESS_EV_OPENING 1<<1 #define SESS_EV_PACKET 1<<2 #define SESS_EV_CLOSING 1<<3 +#define SESS_EV_CONTROL 1<<6 #define SESS_EV_TCP 1<<4 #define SESS_EV_UDP 1<<5 + typedef int session_event_cb_func(struct session *sess, int events, const struct packet *pkt, void *cb_arg); struct session_event; diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index 8bf0114..3052b54 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -188,6 +188,19 @@ void adapter_session_active(struct streaminfo *stream, struct session *sess, voi 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_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) { diff --git a/src/adapter/adapter.h b/src/adapter/adapter.h index 5f07399..6814403 100644 --- a/src/adapter/adapter.h +++ b/src/adapter/adapter.h @@ -11,6 +11,7 @@ void stellar_exit(struct stellar *st); //streaminfo open struct session *adapter_session_open(struct stellar *st, struct streaminfo *stream, 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); //streaminfo close, or firewall active close streaminfo void adapter_session_close(struct streaminfo *stream, struct session *session, void *a_packet); |
