diff options
| author | yangwei <[email protected]> | 2023-08-30 00:36:15 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2023-08-30 00:36:15 +0800 |
| commit | a3e32acfe8a96ce517dcd1f361b4d10b795d1a5e (patch) | |
| tree | 9e2292ff875181e90cdc169c53abc8a64ac6c7e6 | |
| parent | 460967d296f8bf175d076f9a9498b0fd1f6ea419 (diff) | |
✨ feat(session addr): support session_get0_addr
| -rw-r--r-- | examples/sapp_plugin/simple_loader.c | 6 | ||||
| -rw-r--r-- | examples/sapp_plugin/simple_loader.inf | 4 | ||||
| -rw-r--r-- | include/stellar/session.h | 36 | ||||
| -rw-r--r-- | src/adapter/adapter.c | 49 |
4 files changed, 84 insertions, 11 deletions
diff --git a/examples/sapp_plugin/simple_loader.c b/examples/sapp_plugin/simple_loader.c index f8c6c77..f5eab17 100644 --- a/examples/sapp_plugin/simple_loader.c +++ b/examples/sapp_plugin/simple_loader.c @@ -86,3 +86,9 @@ char simple_loader_tcpall_stream_entry(struct streaminfo *pstream,void **pme, in loader_transfer_stream_entry(pstream, pstream->pktstate, pme, thread_seq, a_packet); return APP_STATE_GIVEME; } + +char simple_loader_tcp_stream_entry(struct streaminfo *pstream,void **pme, int thread_seq,void *a_packet) +{ + loader_transfer_stream_entry(pstream, pstream->opstate, pme, thread_seq, a_packet); + return APP_STATE_GIVEME; +} diff --git a/examples/sapp_plugin/simple_loader.inf b/examples/sapp_plugin/simple_loader.inf index d490fd4..76f027a 100644 --- a/examples/sapp_plugin/simple_loader.inf +++ b/examples/sapp_plugin/simple_loader.inf @@ -8,6 +8,10 @@ DESTROY_FUNC=SIMPLE_LOADER_EXIT FUNC_FLAG=ALL FUNC_NAME=simple_loader_tcpall_stream_entry +#[TCP] +#FUNC_FLAG=ALL +#FUNC_NAME=simple_loader_tcp_stream_entry + [UDP] FUNC_FLAG=ALL FUNC_NAME=simple_loader_udp_stream_entry
\ No newline at end of file diff --git a/include/stellar/session.h b/include/stellar/session.h index 75772b3..428130a 100644 --- a/include/stellar/session.h +++ b/include/stellar/session.h @@ -32,6 +32,42 @@ int session_is_symmetric(const struct session *sess, unsigned char *flag); #define SESSION_DIRECTION_OUT 1 int session_get_direction(const struct session *sess); +enum session_addr_type +{ + SESSION_ADDR_TYPE_IPV4_TCP, + SESSION_ADDR_TYPE_IPV4_UDP, + SESSION_ADDR_TYPE_IPV6_TCP, + SESSION_ADDR_TYPE_IPV6_UDP, + SESSION_ADDR_TYPE_UNKNOWN, + __SESSION_ADDR_TYPE_MAX, +}; +struct session_addr_ipv4{ + uint32_t saddr; /* network order */ + uint32_t daddr; /* network order */ + uint16_t sport; /* network order */ + uint16_t dport; /* network order */ +}; + +#include <netinet/in.h> +struct session_addr_ipv6 +{ + uint8_t saddr[INET6_ADDRSTRLEN] ; + uint8_t daddr[INET6_ADDRSTRLEN] ; + uint16_t sport; /* network order */ + uint16_t dport; /* network order */ +}; + +struct session_addr +{ + union + { + struct session_addr_ipv4 ipv4; + struct session_addr_ipv6 ipv6; + }; +}; + +struct session_addr *session_get0_addr(struct session *sess, enum session_addr_type *addr_type); + const char *session_get0_readable_addr(struct session *sess); const char *session_get0_current_payload(struct session *sess, size_t *payload_len); diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index cc4259f..c0bc299 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -117,20 +117,12 @@ struct stellar *stellar_init(const char *toml_conf_path) if (specs[i].init_cb != NULL) { spec_internal.plugin_ctx=specs[i].init_cb(st); - if(spec_internal.plugin_ctx == NULL) - { - goto ADAPTER_INIT_ERROR; - } spec_internal.specs=specs[i]; utarray_push_back(st->plugin_specs_array, &spec_internal); } } FREE(specs); return st; -ADAPTER_INIT_ERROR: - stellar_exit(st); - FREE(specs); - return NULL; } void stellar_exit(struct stellar *st) @@ -214,6 +206,41 @@ const char* session_get0_readable_addr(struct session *sess) return printaddr(&sess->cur_pkt->a_stream->addr, sess->cur_pkt->a_stream->threadnum); } +struct session_addr *session_get0_addr(struct session *sess, enum session_addr_type *addr_type) +{ + struct session_addr *addr=NULL; + *addr_type=SESSION_ADDR_TYPE_UNKNOWN; + if(sess && sess->cur_pkt && sess->cur_pkt->a_stream) + { + struct streaminfo *pstream=sess->cur_pkt->a_stream; + if(pstream->addr.addrtype==ADDR_TYPE_IPV4) + { + if(pstream->type == STREAM_TYPE_TCP) + { + *addr_type=SESSION_ADDR_TYPE_IPV4_TCP; + } + else if(pstream->type == STREAM_TYPE_UDP) + { + *addr_type=SESSION_ADDR_TYPE_IPV4_UDP; + } + addr=(struct session_addr *)pstream->addr.tuple4_v4; + } + if(pstream->addr.addrtype==ADDR_TYPE_IPV6) + { + if(pstream->type == STREAM_TYPE_TCP) + { + *addr_type=SESSION_ADDR_TYPE_IPV6_TCP; + } + else if(pstream->type == STREAM_TYPE_UDP) + { + *addr_type=SESSION_ADDR_TYPE_IPV6_UDP; + } + addr=(struct session_addr *)pstream->addr.tuple4_v6; + } + } + return addr; +} + const char *session_get0_current_payload(struct session *sess, size_t *payload_len) { *payload_len = (size_t)sess->cur_pkt->a_stream->ptcpdetail->datalen; @@ -280,16 +307,16 @@ int session_is_symmetric(const struct session *sess, unsigned char *flag) int is_symmetric=0; if(sess->cur_pkt && sess->cur_pkt->a_stream) { - if(sess->cur_pkt->a_stream->curdir==DIR_DOUBLE) + if(sess->cur_pkt->a_stream->dir==DIR_DOUBLE) { *flag=(SESSION_SEEN_C2S_FLOW|SESSION_SEEN_S2C_FLOW); is_symmetric=1; } - else if(sess->cur_pkt->a_stream->curdir==DIR_C2S) + else if(sess->cur_pkt->a_stream->dir==DIR_C2S) { *flag=SESSION_SEEN_C2S_FLOW; } - else if(sess->cur_pkt->a_stream->curdir==DIR_S2C) + else if(sess->cur_pkt->a_stream->dir==DIR_S2C) { *flag=SESSION_SEEN_S2C_FLOW; } |
