Add session_set_discard

This commit is contained in:
luwenpeng
2024-05-20 17:02:16 +08:00
parent be9a68935b
commit 3701fc7361
5 changed files with 43 additions and 18 deletions

View File

@@ -54,7 +54,7 @@ static void inject_packet_plugin(struct session *sess, int topic_id, const void
{
char buffer[1024] = {0};
struct inject_rule *p_rule = &rule;
struct packet *pkt = (struct packet *)msg;
// struct packet *pkt = (struct packet *)msg;
const struct tuple6 *tuple = session_get_tuple6(sess);
if (p_rule->ip_type == 4 &&
memcmp(&tuple->src_addr.v4, &p_rule->v4, sizeof(struct in_addr)) &&
@@ -75,8 +75,6 @@ static void inject_packet_plugin(struct session *sess, int topic_id, const void
if (session_get_stat(sess, FLOW_DIRECTION_C2S, STAT_INJECTED_PACKETS_SUCCESS) > 0 ||
session_get_stat(sess, FLOW_DIRECTION_S2C, STAT_INJECTED_PACKETS_SUCCESS) > 0)
{
// later packets need drop
packet_set_action(pkt, PACKET_ACTION_DROP);
return;
}
if (p_rule->count_dir == AFTER_RECV_C2S_N_PACKET && session_get_stat(sess, FLOW_DIRECTION_C2S, STAT_RAW_PACKETS_RECEIVED) != p_rule->count_num)
@@ -90,31 +88,27 @@ static void inject_packet_plugin(struct session *sess, int topic_id, const void
switch (p_rule->inject_type)
{
case INJECT_TYPE_TCP_RST:
// current packet need drop
packet_set_action(pkt, PACKET_ACTION_DROP);
EXPECT_TRUE(stellar_inject_tcp_rst(sess, FLOW_DIRECTION_C2S) > 0);
EXPECT_TRUE(stellar_inject_tcp_rst(sess, FLOW_DIRECTION_S2C) > 0);
session_set_discard(sess);
break;
case INJECT_TYPE_TCP_FIN:
// current packet need drop
packet_set_action(pkt, PACKET_ACTION_DROP);
EXPECT_TRUE(stellar_inject_tcp_fin(sess, FLOW_DIRECTION_C2S) > 0);
EXPECT_TRUE(stellar_inject_tcp_fin(sess, FLOW_DIRECTION_S2C) > 0);
session_set_discard(sess);
break;
case INJECT_TYPE_TCP_PAYLOAD:
// current packet need drop
packet_set_action(pkt, PACKET_ACTION_DROP);
snprintf(buffer, sizeof(buffer), "HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s", 5 + 5 + 2, "Hello");
EXPECT_TRUE(stellar_inject_payload(sess, FLOW_DIRECTION_S2C, buffer, strlen(buffer)) > 0); // inject payload to client
EXPECT_TRUE(stellar_inject_payload(sess, FLOW_DIRECTION_S2C, "World\r\n", 7) > 0);
EXPECT_TRUE(stellar_inject_tcp_fin(sess, FLOW_DIRECTION_S2C) > 0); // inject FIN to client
EXPECT_TRUE(stellar_inject_tcp_rst(sess, FLOW_DIRECTION_C2S) > 0); // inject RST to server
EXPECT_TRUE(stellar_inject_payload(sess, FLOW_DIRECTION_S2C, "World\r\n", 7) > 0); // inject payload to client
EXPECT_TRUE(stellar_inject_tcp_rst(sess, FLOW_DIRECTION_S2C) > 0); // inject RST to client
EXPECT_TRUE(stellar_inject_tcp_rst(sess, FLOW_DIRECTION_C2S) > 0); // inject RST to server
session_set_discard(sess);
break;
case INJECT_TYPE_UDP_PAYLOAD:
// current packet need drop
packet_set_action(pkt, PACKET_ACTION_DROP);
EXPECT_TRUE(stellar_inject_payload(sess, FLOW_DIRECTION_C2S, "Hello Server", 12) > 0);
EXPECT_TRUE(stellar_inject_payload(sess, FLOW_DIRECTION_S2C, "Hello Client", 12) > 0);
session_set_discard(sess);
break;
case INJECT_TYPE_CTRL_MSG:
// TOOD