Session manager add builtin ex data
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user