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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#include <stdlib.h>
#include <stdio.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <assert.h>
#include <time.h>
#include <arpa/inet.h>
#include "stream.h"
#include "ltsm.h"
char LTSM_TCPALL_ENTRY(struct streaminfo *pstream, void **pme, int thread_seq,void *apacket)
{
void *ltsm_handle;
struct ltsm_result tcpstate;
const struct ltsm_tcphdr *tcp_hdr;
const struct ip *iphdr = (const struct ip *)apacket;
if(apacket != NULL){
tcp_hdr = (const struct ltsm_tcphdr *)((char *)iphdr + iphdr->ip_hl*4);
}
if(OP_STATE_PENDING == pstream->pktstate){
tcpstate = ltsm_get_current_state(NULL, tcp_hdr->th_flags, pstream->curdir);
if(LTSM_START == tcpstate.lstate ){
ltsm_handle = ltsm_create_handle();
*pme = ltsm_handle;
}else{
return APP_STATE_DROPME;
}
}else{
ltsm_handle = *pme;
if(OP_STATE_CLOSE == pstream->pktstate){
ltsm_destroy_handle(ltsm_handle);
return APP_STATE_DROPME;
}
}
tcpstate = ltsm_get_current_state(ltsm_handle, tcp_hdr->th_flags, pstream->curdir - 1);
printf("stream: %s, flags:0x%x, fstate: %s,\t lstate:%s\n", printaddr(&pstream->addr, thread_seq), tcp_hdr->th_flags, ltsm_fstate_ntop(tcpstate.fstate), ltsm_lstate_ntop(tcpstate.lstate));
return APP_STATE_GIVEME;
}
int LTSM_INIT(void)
{
return 1;
}
|