#include #include #include #include #include #include #include #include #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; }