2018-09-02 16:34:15 +08:00
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <sys/time.h>
|
|
|
|
|
|
|
|
|
|
#include "stream.h"
|
|
|
|
|
#include "MESA_prof_load.h"
|
|
|
|
|
#include "MESA_handle_logger.h"
|
|
|
|
|
#include "deliver.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern int g_iThreadNum;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern "C" char deliver_tcp_entry(const struct streaminfo* pstream,void** pme,int thread_seq,const void* ip_hdr)
|
|
|
|
|
{
|
|
|
|
|
char ret=APP_STATE_DROPPKT;
|
|
|
|
|
|
2018-09-02 18:23:01 +08:00
|
|
|
struct origin_stream_addr addrinfo;
|
2018-09-02 16:34:15 +08:00
|
|
|
struct sockaddr_in client_addr;
|
|
|
|
|
struct sockaddr_in server_addr;
|
|
|
|
|
|
|
|
|
|
if(pstream->opstate==OP_STATE_PENDING)
|
|
|
|
|
{
|
|
|
|
|
client_addr.sin_family=AF_INET;
|
|
|
|
|
client_addr.sin_port=pstream->addr.ipv4->source;
|
|
|
|
|
client_addr.sin_addr.s_addr=pstream->addr.ipv4->saddr;
|
|
|
|
|
|
|
|
|
|
server_addr.sin_family=AF_INET;
|
|
|
|
|
server_addr.sin_port=pstream->addr.ipv4->dest;
|
|
|
|
|
server_addr.sin_addr.s_addr=pstream->addr.ipv4->daddr;
|
|
|
|
|
|
|
|
|
|
memcpy(&addrinfo.client,&client_addr,sizeof(struct sockaddr));
|
|
|
|
|
memcpy(&addrinfo.server,&server_addr,sizeof(struct sockaddr));
|
|
|
|
|
|
2018-09-02 18:23:01 +08:00
|
|
|
mirror_stream_start(thread_seq,&addrinfo,pme);
|
2018-09-02 16:34:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(ip_hdr!=NULL)
|
|
|
|
|
{
|
2018-09-02 18:23:01 +08:00
|
|
|
mirror_stream_append(pstream->curdir,thread_seq,pstream->ptcpdetail->datalen,(char*)pstream->ptcpdetail->pdata,pme);
|
2018-09-02 16:34:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(pstream->opstate==OP_STATE_CLOSE)
|
|
|
|
|
{
|
2018-09-02 18:23:01 +08:00
|
|
|
mirror_stream_end(thread_seq,pme);
|
2018-09-02 16:34:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern "C" char deliver_tcpall_entry(const struct streaminfo* pstream,void** pme,int thread_seq,const void* ip_hdr)
|
|
|
|
|
{
|
|
|
|
|
char ret=APP_STATE_DROPPKT;
|
|
|
|
|
|
2018-09-02 18:23:01 +08:00
|
|
|
struct origin_stream_addr addrinfo;
|
2018-09-02 16:34:15 +08:00
|
|
|
struct sockaddr_in client_addr;
|
|
|
|
|
struct sockaddr_in server_addr;
|
|
|
|
|
|
|
|
|
|
if(pstream->pktstate==OP_STATE_PENDING)
|
|
|
|
|
{
|
|
|
|
|
client_addr.sin_port=pstream->addr.ipv4->source;
|
|
|
|
|
client_addr.sin_addr.s_addr=pstream->addr.ipv4->saddr;
|
|
|
|
|
server_addr.sin_port=pstream->addr.ipv4->dest;
|
|
|
|
|
server_addr.sin_addr.s_addr=pstream->addr.ipv4->daddr;
|
|
|
|
|
|
|
|
|
|
memcpy(&addrinfo.client,&client_addr,sizeof(struct sockaddr));
|
|
|
|
|
memcpy(&addrinfo.server,&server_addr,sizeof(struct sockaddr));
|
|
|
|
|
|
2018-09-02 18:23:01 +08:00
|
|
|
mirror_stream_start(thread_seq,&addrinfo,pme);
|
2018-09-02 16:34:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(ip_hdr!=NULL)
|
|
|
|
|
{
|
2018-09-02 18:23:01 +08:00
|
|
|
mirror_stream_append(pstream->curdir,thread_seq,pstream->ptcpdetail->datalen,(char*)pstream->ptcpdetail->pdata,pme);
|
2018-09-02 16:34:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(pstream->opstate==OP_STATE_CLOSE)
|
|
|
|
|
{
|
2018-09-02 18:23:01 +08:00
|
|
|
mirror_stream_end(thread_seq,pme);
|
2018-09-02 16:34:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" char test_deliver_init()
|
|
|
|
|
{
|
|
|
|
|
int ret=0;
|
|
|
|
|
|
2018-09-02 18:23:01 +08:00
|
|
|
ret=mirro_stream_init(g_iThreadNum,(char*)"./conf/deliver.conf");
|
2018-09-02 16:34:15 +08:00
|
|
|
if(ret<0)
|
|
|
|
|
{
|
|
|
|
|
printf("test deliver init error!\n");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|