summaryrefslogtreecommitdiff
path: root/src/frag_voip.h
blob: 7b2b33e979b45408ce3e9671518bd1c95b9bd05b (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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#ifndef _VOIP_REASSEMBLY_H
#define _VOIP_REASSEMBLY_H

#include "frag_reassembly_in.h"

/*index in g_sip_opt_type*/
/*typedef enum
{
	SIP_HMGET_INDEX,//NOT SAVE OPT
	SIP_KEY_INDEX,//NOT SAVE OPT
	SIP_DATA_FLAG_INDEX,//NOT SAVE OPT
	SIP_RTP_4TUPLE_OPT_INDEX,//NOT SAVE OPT
	SIP_URI_OPT_INDEX,
	
	SIP_FROM_OPT_INDEX,
	SIP_TO_OPT_INDEX,
	SIP_SGATEWAY_OPT_INDEX,//NOT NEED SENDBACK
	SIP_CGATEWAY_OPT_INDEX,//NOT NEED SENDBACK
	SIP_DURATION_OPT_INDEX,

	SIP_S_CODING_OPT_INDEX,
	SIP_C_CODING_OPT_INDEX,
	SIP_FROM_TAGS_OPT_INDEX,
	SIP_TO_TAGS_OPT_INDEX,
	SIP_CALL_ID_OPT_INDEX,
	
	SIP_CSEQ_OPT_INDEX,
	SIP_C_CONTACT_OPT_INDEX,
	SIP_S_CONTACT_OPT_INDEX,
	SIP_USERAGENT_OPT_INDEX,
	SIP_SERVER_OPT_INDEX,//NOT NEED SENDBACK
	
	SIP_C_CRYPTO_OPT_INDEX,//NOT NEED SENDBACK
	SIP_C_INLINE_OPT_INDEX,//NOT NEED SENDBACK
	SIP_S_CRYPTO_OPT_INDEX,//NOT NEED SENDBACK
	SIP_S_INLINE_OPT_INDEX,//NOT NEED SENDBACK
	SIP_RINGING_OPT_INDEX,//NOT NEED SENDBACK
	
	SIP_REASON_OPT_INDEX,
	SIP_SIP_4TUPLE_OPT_INDEX,
	SIP_S_VIA_OPT_INDEX,
	SIP_S_RECORD_ROUTES_OPT_INDEX,
	SIP_S_ROUTE_OPT_INDEX,
	
	SIP_C_VIA_OPT_INDEX,
	SIP_C_RECORD_ROUTES_OPT_INDEX,
	SIP_C_ROUTE_OPT_INDEX,
	SIP_RESCODE_OPT_INDEX,
	SIP_CAPIP_OPT_INDEX,

	SIP_OPT_NUM,
}sip_opt_index;

#define SIP_OPT_MAXNUM  					16
#define SIP_CALL_ID_OPT_INDEX  				11
#define SIP_FROM_TAGS_OPT_INDEX  			9
#define SIP_TO_TAGS_OPT_INDEX  				10
#define SIP_RESCODE_OPT_INDEX  				30
#define SIP_REASON_OPT_INDEX  				22
#define SIP_CSEQ_OPT_INDEX  				12
#define SIP_USERAGENT_OPT_INDEX  			15
#define SIP_URI_OPT_INDEX  					1
#define SIP_C_CONTACT_OPT_INDEX  			13
#define SIP_S_CONTACT_OPT_INDEX  			14
#define SIP_C_VIA_OPT_INDEX  				27
#define SIP_S_VIA_OPT_INDEX  				24
#define SIP_C_RECORD_ROUTES_OPT_INDEX  		28
#define SIP_S_RECORD_ROUTES_OPT_INDEX  		25
#define SIP_C_ROUTE_OPT_INDEX  				29
#define SIP_S_ROUTE_OPT_INDEX  				26
#define SIP_C_CODING_OPT_INDEX  			8
#define SIP_S_CODING_OPT_INDEX  			7
#define SIP_FROM_OPT_INDEX  				2
#define SIP_TO_OPT_INDEX  					3
#define SIP_RTP_4TUPLE_OPT_INDEX  			0
#define SIP_SIP_4TUPLE_OPT_INDEX  			23
#define SIP_DURATION_OPT_INDEX  			6
#define SIP_CAPIP_OPT_INDEX  				31
*/

#define SIP_PROTO_SIP 					"SIP-RTP"
#define SIP_PROTO_RTP 					"RTP"
#define SIP_METHOD_OPT 						"INVITE"
#define SIP_PROTO_OPT 						"SIP"

/*ȫ����־�����ѡ�����*/
/*voip��־��Ϣͷsip_log_msg_header_t*/
#define SIP_LOG_CONT_CODE_NOTHING 			0
#define SIP_LOG_VERSION 					3
#define SIP_FULLLOG_MAGIC_NUM 				0x5632
#define SIP_FULLLOG_CONT_CODE_VERSION 		0X03
#define SIP_FULLLOG_MSG_TYPE 				0x21  
/*�����־��Ϣͷsip_og_msg_header_t*/
#define SIP_SURVEYLOG_MAGIC_NUM 			0x5641
#define SIP_SURVEYLOG_MSG_TYPE 				0x21 

/*ȫ����־����g_sip_opt_type*/
#define OPT_VOIP_PID 					0x29
#define OPT_VOIP_DUATION_FULLLOG			0x2A
#define OPT_VOIP_VOICE_DIR_FULLLOG			0x2B
#define OPT_VOIP_CAP_IP_FULLLOG				0x2C

/*�����־ѡ������*/
#define OPT_LAYER_ADDR_V4 				0x3B //0x3B:RTP, 0x2D:SIP, change
#define OPT_VOIP_RECV_TIME 				0x2F
#define OPT_VOIP_DUATION 				0x30
#define OPT_VOIP_PROTOCOL 				0x31
#define OPT_VOIP_CALLING_ACCOUNT			0x32
#define OPT_VOIP_CALLED_ACCOUNT				0x33
#define OPT_VOIP_RELATION_RTP_LAYER_ADDR_V4 		0x2D //0x3B:RTP, 0x2D:SIP, change
#define OPT_VOIP_FROM_TO_STORE_IP 			0x36
#define OPT_VOIP_FROM_TO_STORE_URL 			0x37
#define OPT_VOIP_TO_FROM_STORE_IP 			0x38
#define OPT_VOIP_TO_FROM_STORE_URL 			0x39
#define OPT_VOIP_VOICE_DIR 				0x3C
#define OPT_VOIP_CAP_IP			 		0x3D

/*sip_sendlog_flag*/
#define SIP_SEND_FULL_LOG 					0x01
#define SIP_SEND_SURVEY_LOG					0x02

/*sip��ѯʹ��key1 key2 key3*/
#define SIP_KEY_1 							1
#define SIP_KEY_2 							2
#define SIP_KEY_3 							3

/*RTP����ǰ8���ֽڣ�4���ֽڵ�ʱ�����4���ֽڵ�rtp_seq*/
#define VOIP_DATA_SEQ_OFFSET				4
#define VOIP_DATA_TIME_SEQ_LEN				8


typedef struct sip_fulllog_msg_body_s 
{
	char      	call_id[128];  // not NULL
	char      	from_tags[64]; 
	char      	to_tags[64];  
	char      	version[16];
	char      	method[16];
	char      	status[8];     //?? rescode not exist
	char      	reason[128];  
	char      	cseq[128];
	char      	src_ip[20];
	uint32_t  	src_port;
	char      	dst_ip[20];
	uint32_t  	dst_port;
	char      	useragent[128];
	char      	from_rtp_ip[20];
	uint32_t  	from_rtp_port;   
	char      	to_rtp_ip[20];
	uint32_t  	to_rtp_port;
	uint32_t  	paw_num;		//����ڱ�ţ���ʱΪ0
	char      	cly_ip[20];		//��������IP����ʱ��дΪ��ƿװIP
	time_t    	found_time;			
	uint16_t 	opt_num; 		//ѡ����Ϣ��Ԫ����
}__attribute__((packed))sip_fulllog_msg_body_t;

typedef struct sip_surveylog_msg_body_s 
{
	unsigned long long prog_id;				// ��Ŀ��ID�������ݻ�ȡ�ڵ�����,���ַ���
	uint32_t   	cfg_id;						// ��������ID
	uint32_t 	found_time;					// ����ʱ��
	uint32_t   	cap_ip;						// Ϊ��������IP��ַ
	uint8_t    	protocol;					// �������
	uint8_t		service;					// ҵ������
	uint8_t		level;						// ��������Ŷ�
	uint8_t  	fd_type;					// �������
	uint16_t 	opt_num; 					//ѡ����Ϣ��Ԫ����
	//struct opt_unit_t opt_info[opt_num];	//ѡ����Ϣ,����ʾ�⣬��������ͷ��
}__attribute__((packed))sip_surveylog_msg_body_t;

typedef struct sip_log_msg_header_s
{
	uint16_t 	magic_num; 				// ħ����survey logֵ����Ϊ0x5641 ; fulllogֵ����Ϊ0x5632
	uint8_t  	cont_code:4;  			// ��Ϣ������ʽ
	uint8_t  	version:4;  			// Э��汾��Ŀǰֵ��3
	uint8_t		msg_type; 				// ��Ϣ����
	uint32_t 	cont_len; 				// ��Ϣ�岿�ֵ��ֽڳ���
}sip_log_msg_header_t;


#ifdef __cplusplus
extern "C" {
#endif

void free_media_sip(media_t* mdi);
void free_frag_unit_sip_opt(frag_unit_t* 	frg_unit);


int redis_sip_index_query(frag_unit_t*  frg_unit, int thread_seq);
int sip_index_query(frag_unit_t*  frg_unit, int thread_seq);


int sip_send_full_log(media_t* mdi);
int sip_send_survey_log(media_t* mdi, char* survey, uint32_t survey_len);
void send_sip_log_when_expire(media_t* mdi);

void proc_sip_opt(frag_unit_t* frg_unit, media_t* mdi);
int proc_sip_mediainfo_opt(frag_unit_t* frg_unit, rssb_media_info_t* media_info);	


void set_frag_unit_from_media(media_t* mdi, frag_unit_t* frg_unit);
void set_sip_frag_unit(rssb_media_info_t* media_info, frag_unit_t* frg_unit);
int parse_sip_4tuple(char* str_4tuple,char* s_ip,char* s_port,char* c_ip,char* c_port);
#ifdef __cplusplus
}
#endif

#endif