summaryrefslogtreecommitdiff
path: root/include/MESA/MESA_tcp_interface.h
blob: 5d952585344e19f0cb825ca8df1c72b3e45df1d7 (plain)
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#ifndef MESA_TCP_INTERFACE_H__
#define MESA_TCP_INTERFACE_H__

#ifdef __cplusplus
extern "C"
{
#endif

#include <stdint.h>

/*the optype for MESA_tcp_set*/
#define  MESA_TCP_IO_MODE          				(0)  /*uint32_t, 1: block; 0:nonblock,Ĭ��:1*/
#define  MESA_TCP_L_PORT            				(1)  /*uint16_t, �����˿�*/
#define  MESA_TCP_RUNTIME_LOG				(2)	/*void *, ��־�����֧����־���,Ĭ��:NULL*/
#define  MESA_TCP_SOCKHD_LIMIT				(3) 	/*uint32_t, ����sock�������,Ĭ��:1024*/
#define  MESA_TCP_LIMITE_SEND_CACHE		(4)	/*uint32_t, ���ӷ��ͻ�������С,��λ:B ,Ĭ��:10M*/
#define  MESA_TCP_LIMITE_RECV_CACHE		(5)	/*uint32_t,���ӽ��ջ�������С,��λ:B ,Ĭ��:10M*/
#define  MESA_TCP_SEND_PTHREAD_AMOUNT	(6)  /*uint32_t, �����߳���Ĭ��:1*/
#define  MESA_TCP_RECV_PTHREAD_AMOUNT	(7)  /*uint32_t, �����߳���Ĭ��:1*/
#define  MESA_TCP_CONNECT_TIME				(8)  /* uint32_t, ���ӳ�ʱ, ��λ:s , Ĭ��:5s*/
#define  MESA_TCP_HIGH_SPEED_SEND			(9)   /*1:on, 0:off,Ĭ��:0*/
#define  MESA_TCP_C_PORT            				(10)  /*uint16_t, �ͷ��˰󶨶˿�*/
#define MESA_TCP_SEND_TIME_OUT				(11) /*uint32_t, ���ӷ��ͳ�ʱ��Ĭ��Ϊ0*/
#define MESA_TCP_RECV_TIME_OUT 			(12) /*uint32_t,���ӽ��ճ�ʱ,Ĭ��Ϊ0*/


/*ʹ��mesa_tcp_recv_v1 ʱϣ���������Ĵ�С*/
#define  MESA_TCP_RECV_LEN 	 	(1024*2)


/*the value for the MESA_tcp_set*/
#define  MESA_TCP_MOD_BLOCK             1
#define  MESA_TCP_MOD_NONBLOCK       0

typedef  void *  MESA_tcp_handle;


 enum mesa_tcp_state {
	MESA_TCP_STATE_CREATE = 0,	 
	MESA_TCP_STATE_ACCEPT,	//��һ�ε���recv
	MESA_TCP_STATE_CONTENT,	//��������
	MESA_TCP_STATE_CLOSE,		//���������ر�
	MESA_TCP_STATE_DISTORY,	 //���ӱ����ر�
	MESA_TCP_STATE_TIME_OUT     //���ӽ��ճ�ʱ
//	MESA_TCP_STATE_WAIT
//	MESA_TCP_STATE_RECONTENT
};

 enum mesa_tcp_peer {
	MESA_TCP_PEER_CHUNK_SIZE = 0,   	/*int */
	MESA_TCP_PEER_CONTEXT ,			/*void */
	MESA_TCP_PEER_CONTEXT_FREE 		/*peer_context_free_t */
};

typedef struct _mesa_tcp_snipping_
{
	int32_t len;
	void *data;
}meta_tcp_snipping_t;

typedef struct _mesa_chunk_
{
	uint32_t ip;
	uint16_t port;
	void *data;
	uint32_t data_len; 
	void *peer_context;
	enum mesa_tcp_state tcp_state;
}mesa_chunk_t;

typedef void peer_context_free_t(void *arg);

/*
 * return value: NULL is init fail
*/
MESA_tcp_handle  MESA_tcp_init  (void);

/*
 * return: 0: succ  < 0:fail
 * 		-8: Opttype����δ֪
*/
int   MESA_tcp_set ( MESA_tcp_handle	handle,int	optype, void*	value);
int   MESA_tcp_send (MESA_tcp_handle	handle,
				                       uint32_t        dst_ip, uint16_t dst_port, 
				                       void*      pmsg,  int    msglen,
				                       int thread_id);
int   MESA_tcp_send_snipping  (MESA_tcp_handle	handle,
				                       uint32_t        dst_ip, uint16_t dst_port, 
				                       meta_tcp_snipping_t *snip, int32_t sn_n,
				                       int thread_id);

/*
 * return: > 0: succ 
 *		== 0: ��ʾ���ճ�ʱ
 *		< 0:fail
 *		-1:��������
 *		-3:���ӱ����ر�
 * 		-5: �߳�ID��������ֵ
 *		-9:MESA_tcp_recv_chunk��MESA_tcp_recvͬʱ��ʹ��
*/
int   MESA_tcp_recv (MESA_tcp_handle	handle,
			                       void*     msgbuf, int    buflen,
			                   		    uint32_t*       src_ip, uint16_t* src_port);

/*
 * return: 0: succ  
 *		< 0:fail
 *		-1:��������
 * 		-5: �߳�ID��������ֵ
 *		-9:MESA_tcp_recv_chunk��MESA_tcp_recvͬʱ��ʹ��
*/
int MESA_tcp_recv_chunk(MESA_tcp_handle  handle,
								uint32_t *ip, uint16_t *port,
								void **data_chunk, uint32_t *data_len, 
								enum mesa_tcp_state *tcp_state, void **peer_context,
								uint32_t pthread_id);
int MESA_tcp_r_chunk (MESA_tcp_handle  handle, uint32_t pthread_id, mesa_chunk_t *out);
void MESA_tcp_chunk_free (void *data);
int MESA_tcp_set_peer(MESA_tcp_handle handle, 
							uint32_t ip, uint16_t port, 
								enum mesa_tcp_peer optype,
									char* data,int datalen);
int MESA_tcp_withdraw (MESA_tcp_handle handle, 
									uint32_t ip , uint32_t port,
										void *data, uint32_t data_len);
int MESA_tcp_getlasterror (MESA_tcp_handle handle, 
									char* msgbuf, int msg_len, 
										uint32_t ip, uint16_t port);
int MESA_tcp_close (MESA_tcp_handle handle, 
							uint32_t ip, uint16_t port, 
								int time_out,
								int tid);
int MESA_tcp_destroy (MESA_tcp_handle handle);


long MESA_tcp_get_memory_size  (MESA_tcp_handle handle);
int MESA_tcp_get_local_ip (MESA_tcp_handle handle);

/*
	ip,port ���������ֽ���
*/
MESA_tcp_handle  MESA_tcp_init_v1  (void);
int   MESA_tcp_set_v1 ( MESA_tcp_handle	handle,int	optype, void*	value);

/*
return value:
	-1, add hash fail
	-2, connect fail
	-3, tcp interlinkage is broke
	-4, epoll mod event fail
	-5, limits thread amount
	-6, limit buffer size
*/
int   MESA_tcp_send_v1 (MESA_tcp_handle	handle,
				                       uint32_t        dst_ip, uint16_t dst_port, 
				                       void*      pmsg,  int    msglen);

/*
	ֻ֧�ֵ��̵߳��á�
*/
int   MESA_tcp_recv_v1 (MESA_tcp_handle	handle,
			                       void*     msgbuf, int    buflen,
			                       uint32_t*       src_ip, uint16_t* src_port);
int MESA_tcp_close_v1 (MESA_tcp_handle handle, uint32_t ip, uint16_t port);
int MESA_tcp_getlasterror_v1 (MESA_tcp_handle handle, 
										char* msgbuf, int msg_len, 
										uint32_t ip, uint16_t port);
int MESA_tcp_destroy_v1 (MESA_tcp_handle handle);

#ifdef __cplusplus
}
#endif

#endif