diff options
| author | liuchang <[email protected]> | 2023-04-21 10:12:32 +0000 |
|---|---|---|
| committer | liuchang <[email protected]> | 2023-05-06 08:50:17 +0000 |
| commit | ba8c84626312d84b61fba98965cec9c320f71a14 (patch) | |
| tree | c250e279fcafd5538be457b1a088424e9d5f5ba6 /shaping/src/shaper_session.cpp | |
| parent | a78f8e8eb9773abf6b8bb1a7a47844cabe50d572 (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.cpp | 55 |
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; |
