summaryrefslogtreecommitdiff
path: root/src/ftp_decoder_hash.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ftp_decoder_hash.h')
-rw-r--r--src/ftp_decoder_hash.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/ftp_decoder_hash.h b/src/ftp_decoder_hash.h
new file mode 100644
index 0000000..21a702f
--- /dev/null
+++ b/src/ftp_decoder_hash.h
@@ -0,0 +1,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); \ No newline at end of file