Session manager add builtin ex data

This commit is contained in:
luwenpeng
2023-12-22 14:45:31 +08:00
parent fa4cc898d8
commit 2aeb699359
10 changed files with 220 additions and 129 deletions

View File

@@ -487,6 +487,66 @@ TEST(PACKET_UTILS, UDP_AND_TCP)
}
#endif
#if 1
TEST(PACKET_UTILS, PACKET_DUP)
{
struct packet handler;
packet_parse(&handler, (const char *)data5, sizeof(data5));
// IP
EXPECT_TRUE(paket_is_fragment(&handler) == false);
// TCP
EXPECT_TRUE(packet_has_tcp(&handler) == true);
EXPECT_TRUE(packet_get_tcp_sport(&handler) == 443);
EXPECT_TRUE(packet_get_tcp_dport(&handler) == 46582);
EXPECT_TRUE(packet_get_tcp_seq(&handler) == 2198097831);
EXPECT_TRUE(packet_get_tcp_ack(&handler) == 2264498872);
EXPECT_TRUE(packet_get_tcp_flags(&handler) == 0x10);
EXPECT_TRUE(packet_has_tcp_flag_urg(&handler) == false);
EXPECT_TRUE(packet_has_tcp_flag_ack(&handler) == true);
EXPECT_TRUE(packet_has_tcp_flag_psh(&handler) == false);
EXPECT_TRUE(packet_has_tcp_flag_rst(&handler) == false);
EXPECT_TRUE(packet_has_tcp_flag_syn(&handler) == false);
EXPECT_TRUE(packet_has_tcp_flag_fin(&handler) == false);
// UDP
EXPECT_TRUE(packet_has_udp(&handler) == true);
EXPECT_TRUE(packet_get_inner_udp_sport(&handler) == 2152);
EXPECT_TRUE(packet_get_inner_udp_dport(&handler) == 2152);
EXPECT_TRUE(packet_get_outer_udp_sport(&handler) == 2152);
EXPECT_TRUE(packet_get_outer_udp_dport(&handler) == 2152);
struct packet *dup = packet_dup(&handler);
// IP
EXPECT_TRUE(paket_is_fragment(&handler) == false);
// TCP
EXPECT_TRUE(packet_has_tcp(&handler) == true);
EXPECT_TRUE(packet_get_tcp_sport(&handler) == 443);
EXPECT_TRUE(packet_get_tcp_dport(&handler) == 46582);
EXPECT_TRUE(packet_get_tcp_seq(&handler) == 2198097831);
EXPECT_TRUE(packet_get_tcp_ack(&handler) == 2264498872);
EXPECT_TRUE(packet_get_tcp_flags(&handler) == 0x10);
EXPECT_TRUE(packet_has_tcp_flag_urg(&handler) == false);
EXPECT_TRUE(packet_has_tcp_flag_ack(&handler) == true);
EXPECT_TRUE(packet_has_tcp_flag_psh(&handler) == false);
EXPECT_TRUE(packet_has_tcp_flag_rst(&handler) == false);
EXPECT_TRUE(packet_has_tcp_flag_syn(&handler) == false);
EXPECT_TRUE(packet_has_tcp_flag_fin(&handler) == false);
// UDP
EXPECT_TRUE(packet_has_udp(&handler) == true);
EXPECT_TRUE(packet_get_inner_udp_sport(&handler) == 2152);
EXPECT_TRUE(packet_get_inner_udp_dport(&handler) == 2152);
EXPECT_TRUE(packet_get_outer_udp_sport(&handler) == 2152);
EXPECT_TRUE(packet_get_outer_udp_dport(&handler) == 2152);
packet_free(dup);
}
#endif
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);

View File

@@ -1101,6 +1101,7 @@ const char *packet_parse(struct packet *handler, const char *data, uint16_t len)
handler->data_ptr = data;
handler->data_len = len;
handler->zone_id = 0;
handler->user_data = NULL;
// TESTED
return parse_ether(handler, data, len);

View File

@@ -86,6 +86,8 @@ struct packet
const char *data_ptr;
uint16_t data_len;
uint64_t zone_id;
const void *user_data;
};
// return innermost payload

View File

@@ -1,3 +1,5 @@
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
#include <netinet/ip6.h>
@@ -42,6 +44,94 @@ static bool ipv6_is_fragment(const struct ip6_hdr *ip6_hdr, uint16_t hdr_len)
* Public API
******************************************************************************/
// metadata
struct metadata *metadata_dup(const struct metadata *metadata)
{
if (metadata == NULL)
{
return NULL;
}
struct metadata *metadata_dup = (struct metadata *)calloc(1, sizeof(struct metadata));
if (metadata_dup == NULL)
{
return NULL;
}
memcpy(metadata_dup, metadata, sizeof(struct metadata));
return metadata_dup;
}
void metadata_free(struct metadata *metadata)
{
if (metadata)
{
free(metadata);
metadata = NULL;
}
}
void packet_set0_metadata(struct packet *pkt, const struct metadata *metadata)
{
pkt->user_data = (const void *)metadata;
}
const struct metadata *packet_get0_metadata(const struct packet *pkt)
{
return (const struct metadata *)pkt->user_data;
}
// packet
struct packet *packet_dup(const struct packet *pkt)
{
if (pkt == NULL)
{
return NULL;
}
struct packet *pkt_dup = (struct packet *)calloc(1, sizeof(struct packet));
if (pkt_dup == NULL)
{
return NULL;
}
memcpy(pkt_dup, pkt, sizeof(struct packet));
if (pkt->data_len)
{
pkt_dup->data_ptr = (const char *)calloc(1, pkt->data_len);
if (pkt_dup->data_ptr == NULL)
{
free(pkt_dup);
return NULL;
}
memcpy((char *)pkt_dup->data_ptr, pkt->data_ptr, pkt->data_len);
for (int8_t i = 0; i < pkt->layers_used; i++)
{
pkt_dup->layers[i].hdr_ptr = pkt_dup->data_ptr + pkt->layers[i].hdr_offset;
pkt_dup->layers[i].pld_ptr = pkt_dup->data_ptr + pkt->layers[i].hdr_offset + pkt->layers[i].hdr_len;
}
}
return pkt_dup;
}
void packet_free(struct packet *pkt)
{
if (pkt)
{
if (pkt->data_ptr)
{
free((char *)pkt->data_ptr);
pkt->data_ptr = NULL;
}
free(pkt);
pkt = NULL;
}
}
// packet
uint64_t packet_get_zone_id(const struct packet *pkt)
{

View File

@@ -8,7 +8,21 @@ extern "C"
#include "packet.h"
struct metadata
{
// TODO
};
// metadata
struct metadata *metadata_dup(const struct metadata *metadata);
void metadata_free(struct metadata *metadata);
void packet_set0_metadata(struct packet *pkt, const struct metadata *metadata);
const struct metadata *packet_get0_metadata(const struct packet *pkt);
// packet
struct packet *packet_dup(const struct packet *pkt);
void packet_free(struct packet *pkt);
uint64_t packet_get_zone_id(const struct packet *pkt);
uint16_t packet_get_raw_len(const struct packet *pkt);
const char *packet_get0_raw_data(const struct packet *pkt);