1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
#include <stellar/session.h>
#include <stellar/session_exdata.h>
#include <stellar/session_mq.h>
#include <stellar/stellar.h>
#ifdef __cplusplus
}
#endif
#include <stddef.h>
#include <MESA/MESA_htable.h>
/*
for ftp passive mode, source port is random, so we can't use tuple4 to identify data link.
so always set source port to 0!
*/
struct ftp_link_key
{
enum session_addr_type addr_type;
int __pad__;
union
{
struct session_addr_ipv4 tuplev4;
struct session_addr_ipv6 tuplev6;
};
} __attribute__((packed));
int ftp_hash_add(void *handle, const void *key, u_int32_t key_len, void *value);
void *ftp_hash_search(void *handle, const struct ftp_link_key *hkey);
void ftp_hash_del(void *handle, const struct ftp_link_key *hkey);
void ftp_declare_datalink_free(void *data);
void ftp_make_hkey_v4(struct session_addr_ipv4 *keyv4, uint32_t sip_net, uint32_t dip_net, uint16_t dip_port_net);
void ftp_make_hkey_v6(struct session_addr_ipv6 *keyv6, const struct in6_addr *sip, const struct in6_addr *dip, uint16_t dip_port_net);
const char *ftp_hash_key_to_str(const struct ftp_link_key *hkey);
int ftp_build_hashkey_from_session(struct session *sess, struct ftp_link_key *hkey);
|