summaryrefslogtreecommitdiff
path: root/shaping/src/shaper_session.cpp
diff options
context:
space:
mode:
authorliuchang <[email protected]>2023-04-21 10:12:32 +0000
committerliuchang <[email protected]>2023-05-06 08:50:17 +0000
commitba8c84626312d84b61fba98965cec9c320f71a14 (patch)
treec250e279fcafd5538be457b1a088424e9d5f5ba6 /shaping/src/shaper_session.cpp
parenta78f8e8eb9773abf6b8bb1a7a47844cabe50d572 (diff)
add feature: send log to sapp when session close, incomplete code
Diffstat (limited to 'shaping/src/shaper_session.cpp')
-rw-r--r--shaping/src/shaper_session.cpp55
1 files changed, 54 insertions, 1 deletions
diff --git a/shaping/src/shaper_session.cpp b/shaping/src/shaper_session.cpp
index 587dca1..ae3dfae 100644
--- a/shaping/src/shaper_session.cpp
+++ b/shaping/src/shaper_session.cpp
@@ -24,6 +24,7 @@ struct shaping_flow* shaper_session_opening(struct shaping_thread_ctx *ctx, stru
sf = shaping_flow_new();
raw_packet_parser_get_most_inner_tuple4(raw_parser, &sf->tuple4);
//shaper_rules_update(ctx, sf, ctrl_data->shaping_rule_ids, ctrl_data->shaping_rule_num);
+ shaper_marsio_metadata_deep_copy(sf->ctrl_meta, meta);
session_table_insert(ctx->session_table, meta->session_id, &sf->tuple4, sf, NULL);
@@ -32,6 +33,56 @@ struct shaping_flow* shaper_session_opening(struct shaping_thread_ctx *ctx, stru
return sf;
}
+static void shaper_session_log_send(struct shaping_thread_ctx *ctx, struct shaping_flow *sf)
+{
+ if (!sf->ctrl_meta) {
+ LOG_ERROR("%s: ctrl meta for session %s doesn't exist", LOG_TAG_SHAPING, addr_tuple4_to_str(&sf->tuple4));
+ return;
+ }
+
+ /************************/
+ //TODO: add content to msgpack
+ /************************/
+
+ marsio_buff_t *tx_buff;
+ char *pkt_header_data = sf->ctrl_meta->raw_data;
+ int pkt_header_len = sf->ctrl_meta->l7_offset;
+ struct metadata *ctrl_meta = sf->ctrl_meta;
+ struct sids sids;
+
+ marsio_buff_malloc_global(ctx->marsio_info->instance, &tx_buff, 1, 0, ctx->thread_index);
+ char *dst = marsio_buff_append(tx_buff, pkt_header_len + msgpack_len);
+ memcpy(dst, pkt_header_data, pkt_header_len);
+ memcpy(dst + pkt_header_len, msgpack_data, msgpack_len);
+
+ if (marsio_buff_set_metadata(tx_buff, MR_BUFF_SESSION_ID, &ctrl_meta->session_id, sizeof(ctrl_meta->session_id)) != 0) {
+ LOG_ERROR("%s: marsio_buff_set_metadata MR_BUFF_SESSION_ID failed for session %s", LOG_TAG_SHAPING, addr_tuple4_to_str(&sf->tuple4));
+ return;
+ }
+
+ if (marsio_buff_set_metadata(tx_buff, MR_BUFF_PAYLOAD_OFFSET, &pkt_header_len, sizeof(pkt_header_len)) != 0) {
+ LOG_ERROR("%s: marsio_buff_set_metadata MR_BUFF_PAYLOAD_OFFSET failed for session %s", LOG_TAG_SHAPING, addr_tuple4_to_str(&sf->tuple4));
+ return;
+ }
+
+ sids.elems[0] = ctx->firewall_sid;
+ sids.num = 1;
+ if (marsio_buff_set_sid_list(tx_buff, sids.elems, sids.num) != 0) {
+ LOG_ERROR("%s: marsio_buff_set_sid_list failed for session %s", LOG_TAG_SHAPING, addr_tuple4_to_str(&sf->tuple4));
+ return;
+ }
+
+ if (marsio_buff_set_metadata(tx_buff, MR_BUFF_ROUTE_CTX, ctrl_meta->route_ctx.data, ctrl_meta->route_ctx.len) != 0) {
+ LOG_ERROR("%s: marsio_buff_set_metadata MR_BUFF_ROUTE_CTX failed for session %s", LOG_TAG_SHAPING, addr_tuple4_to_str(&sf->tuple4));
+ return;
+ }
+
+ marsio_send_burst(ctx->marsio_info->mr_path, ctx->thread_index, &tx_buff, 1);
+ shaper_global_stat_session_log_send_num_inc(ctx->global_stat);
+
+ return;
+}
+
struct shaping_flow* shaper_session_close(struct shaping_thread_ctx *ctx, struct metadata *meta)
{
struct session_node *session_node = NULL;
@@ -44,8 +95,10 @@ struct shaping_flow* shaper_session_close(struct shaping_thread_ctx *ctx, struct
sf = (struct shaping_flow *)session_node->val_data;
sf->flag |= STREAM_CLOSE;
- session_table_delete_by_id(ctx->session_table, meta->session_id);
+ shaper_session_log_send(ctx, sf);
+
+ session_table_delete_by_id(ctx->session_table, meta->session_id);
shaper_global_stat_curr_session_dec(ctx->global_stat);
return sf;