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
|