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
|