summaryrefslogtreecommitdiff
path: root/src/frag_monitor.h
blob: 7833209f8dfdddec6783ecc7c9b8c130f3b72ecb (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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
#ifndef _FRAG_MONITOR_H
#define _FRAG_MONITOR_H


#include "KafkaProducer.h"

#define		K_PROJECT							1
#define		FRGMNT_PLUGIN_NAME 					"[frag_monitor.so]"
#define		MAX_PATH_LEN						256
#define 	MAAT_RESULT_NUM						64
#define 	MAAT_DETAIL_NUM						64
#define		MAX_FIELD_LINE_SIZE					256
#define		MAX_FIELD_NUM						8
#define 	MAX_OPT_NAME_LEN					64
#define 	TCL_PROTOCOL						6   //for addr scan

#define		THREAD_MAXNUM						128

#define		SESSION_FRGMNT_UNKNOW				0
#define		SESSION_FRGMNT_INDEX				1
#define		SESSION_FRGMNT_DATA					2

#define		FRAG_TYPE_INDEX						0
#define		FRAG_TYPE_DATA_C2S					1
#define		FRAG_TYPE_DATA_S2C					2

#define		MAX_UINT64_VAL						(0xFFFFFFFFFFFFFFFF)

#define		TOPIC_MEDIA_INDEX_DATA				"MEDIA_INDEX_DATA"
#define		TOPIC_MEDIA_CONVERGE_DATA			"MEDIA_CONVERGE_DATA"
#define		TOPIC_FRAG_URL						"FRAG_URL"    /*��ƬԤ��topic*/
#define		TOPIC_CROSS_MEDIA					"frag"
#define 	MEDIA_INDEX_TOPIC_RKT   			0
#define 	MEDIA_CNVG_TOPIC_RKT    			1
#define 	MEDIA_FRAG_TOPIC_NUM    			2

/*data_dir=do_log in maat*/
#define 	DATA_DIR_C2S						1
#define 	DATA_DIR_S2C						2

#define 	IPV4_ADDR_LEN						16
#define 	PID_BUF_LEN							256

#define 	SERVICE_OSMF_DATA 					1122 
#define 	SERVICE_HLS_DATA 					2122 
#define 	SERVICE_APP  						3122

/*�����־ѡ��������*/
#define 	MAX_OPT_UNIT_NUM					16

/*���ݴ���״̬*/
#define FRAG_PROC_STAT_SCAN						0x00
#define FRAG_PROC_STAT_HIT						0x01
#define FRAG_PROC_STAT_SEND						0x02

#define	FILE_FRAG								0xA6  /*��ƬԤ��ʶ���,����url�������ƫ�����ģ�����iqiyi*/
#define	FILE_MAYBE_FRAG 						0xA7  /*ǰ�˻ش��Ŀ�������Ƭ������Ƶ*/

/*log type*/
typedef enum
{
	FRAG_INDEX_LOG=0,
	FRAG_META_LOG,
	FRAG_ZERO_LOG,
	FRAG_LOG_NUM,
}LOG_TYPE;

typedef enum
{
	HTTP_SESSION=0,
	HLS_SESSION,
	OSMF_SESSION,
	IOS_SESSION,
	ANDRIOD_SESSION,	
	APP_SESSION,	
	HIT_SESSION,	
	URLDROP_SESSION,
	DROP_SESSION,
	FRAG_SESSION,
	MAYBE_FRAG_SESSION,	
	WEIRD_SESSION,

	HLS_INDEX_SESSION,

	/*rssb�ĻỰ*/
	HLS_DATA_SESSION,	
	OSMF_DATA_SESSION,	
	IOS_DATA_SESSION,			
	ANDRIOD_DATA_SESSION,			
	APP_DATA_SESSION,
	FRAG_DATA_SESSION,
	MAYBE_FRAG_DATA_SESSION,
	WEIRD_DATA_SESSION,	
	
	HLS_DATA_PKTS,
	HLS_DATA_BYTES,	
	OSMF_DATA_PKTS,
	OSMF_DATA_BYTES,
	IOS_DATA_PKTS,
	IOS_DATA_BYTES,	
	ANDRIOD_DATA_PKTS,
	ANDRIOD_DATA_BYTES,
	APP_DATA_PKTS,
	APP_DATA_BYTES,
	FRAG_DATA_PKTS,
	FRAG_DATA_BYTES,
	MAYBE_FRAG_DATA_PKTS,
	MAYBE_FRAG_DATA_BYTES,
	WEIRD_DATA_PKTS,
	WEIRD_DATA_BYTES,

	CNVG_TOPIC,
	INDEX_TOPIC,	
	FRAG_PROG_TOPIC,	
	FRAG_URL_TOPIC,

	URL_META,
	KEY_META,
	
	HTTP_SESSION_CLOSE,

	INDEX_GZIP,

	STAT_FIELD_NUM, 	
}STAT_FIELD_TYPE;

#define MAX_MEDIA_OPT_NUM 	4
typedef struct media_opt_info_s
{	
	struct opt_unit_t* 		opt;
	int 					opt_num;	
	int 					opt_content_id; //-1 when init for no content
}media_opt_info_t;

typedef struct av_info_s
{	
	struct media_info_t  	media_info;
	media_opt_info_t*		media_optinfo;	
}av_info_t;

typedef enum
{
	FRAG_URL=0,
	FRAG_HOST,
	FRAG_UA,
	FRAG_REFERER,
	FRAG_S2C_CONTENT,	
	FRAG_S2C_CONTENT_TYPE,
	FRAG_KEY,	
	FRAG_OPR_NUM, 	
}FRAG_OPT_TYPE;

typedef struct frag_opt_s
{
	char* 					opt_value;
	uint32_t				opt_len;	/*����\0*/
}frag_opt_t;

typedef struct frag_info_s
{	
	scan_status_t 			mid;	
	uint64					related_id;        	//use for mutil thread , clientip+serverip+content_len . 	
	uint64					cont_offset;	
	av_info_t*				av_info;    		//index:[appdsender_t appdsender]   data:[struct av_info_t* media_info]
	uint64					tuple7_id;     		//7Ԫ�鹹����Ƭ�Ľ�ĿID
	char					tuple7[256];     
	int						config_id;
	int						service_id;	  		//use for extract
	uint32					session_type;  		//1:frgmnt_index   2:frgmnt_query	
	frag_opt_t				frag_opt[FRAG_OPR_NUM];	
	char					s2c_first_pkt;	
	char					proc_stat;	 	   //FRAG_PROC_STAT_SCAN  FRAG_PROC_STAT_HIT
	char					send_meta_flag;				
	uchar					proto;				//0x81 HTTP_STREAM
	uchar					media_type;  		//OSMF:0xA1	HLS: 0xA2	IOS_APP: 0xA3	ANDRIOD_APP: 0xA4	
	uchar					data_dir;
	uchar					hit_server_ip;
}frag_info_t;

typedef struct media_format_s
{
	const char  			feature[16];
	int 					feature_size;
	int 					format;
}media_format_t;

typedef struct media_format_hnode_s
{		
	uint64					relate_id;
	int						media_type; //ͨ�������غ����������ݸ�ʽ����ʶ��	
}media_format_hnode_t;

typedef struct frag_monitor_runtime_parameter_s
{	
	 rd_kafka_topic_t*                       frag_topic_rkt[MEDIA_FRAG_TOPIC_NUM]; 
	 char					 log_path[MAX_PATH_LEN]; 
	 void*					 logger; 
	 void*					 avconf_handle; 
	 void*					 avcomconf_handle; 
	 FILE*					 fraginfo_file[THREAD_MAXNUM];		 
	 struct tm				 fraginfo_filetime[THREAD_MAXNUM];
	 void*					 fs_handle; 			 //stat
	 Maat_feather_t 		 feather;		 
	 MESA_htable_handle 	 media_hash;			 //���߳�����hash	 
	 void*					 addr_trace; 
	 //KafkaProducer* 		 index_kafka_producer;	 
	 char					 index_brokers[512];	  //kafka	 
	 uint32 				 local_ip_nr;	 
	 uint32 				 s2c_cache_size; 
	 short					 expr_tableid;
	 short					 ip_tableid; 
	 short					 frag_serverip_tableid;   //��ƬԤ��
	 short					 log_switch; 
	 short					 app_switch;	 
	 short					 frag_report_switch;	 
	 short					 frag_forecast_switch;	 
	 short					 ip_switch;	 
	 short					 app_gzip_switch;		 
	 short					 osmf_data_feature_switch;		 	 
	 int 					 frag_url_table_id;
	 int					 fs_id[STAT_FIELD_NUM];  
	 char					 trace_dir[MAX_OPT_NAME_LEN];
	 char					 frag_project_id;
}frag_monitor_runtime_parameter_t;

#ifdef __cplusplus
extern "C" {
#endif

uchar FRAG_MONITOR_ENTRY(stSessionInfo* session_info, void **param,int thread_seq, struct streaminfo *a_tcp, void *a_packet);

#ifdef __cplusplus
}
#endif

#endif