#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