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
|