#include #include #include #include #include #include #include #include #include #include #include #include "MESA_handle_logger.h" #include "MESA_prof_load.h" #include "MESA_htable.h" #include "MESA_list_queue.h" #include "MESA_trace.h" #include "stream.h" #include "bizman.h" #include "interval_index.h" #include "stream_fuzzy_hash.h" #include "soqav_dedup.h" #include "app_detect.h" #include "KafkaProducer.h" #include "common.h" #include "frag_reassembly_in.h" #include "frag_proc.h" #include "log.h" extern frag_rssb_parameter_t g_frag_run; extern frag_rssb_configure_t g_frag_cfg; extern frag_rssb_status_t g_frag_stat; extern frag_reassembly_t frag_rssb; extern sip_opt_t g_sip_opt_type[SIP_OPT_NUM]; /*use for mid*/ unsigned long long idMaskIndex[16] = { 0x0000000000000000, /* unknown */ 0x1000000000000000, /*url*/ 0x2000000000000000, /*服务器ip +len*/ 0x3000000000000000, /*文件内容*/ 0x4000000000000000, /*四元组*/ 0x5000000000000000, /*唯一计数*/ 0x6000000000000000, /*resort data*/ 0x7000000000000000, /*youtube data*/ }; void create_media_write_to_log(media_t* mdi, int type, void* param) { char buf[2048] = {0}; int buflen = 0; time_t cur_time; struct timeval tv; struct timezone tz; struct tm now; char now_time[32] = {0}; char day_time[32] = {0}; char filename[MAX_PATH_LEN] = {0}; FILE* fp = NULL; char ip_buf[64] = {0}; time(&cur_time); //localtime_r(&cur_time, &now); gettimeofday(&tv, &tz); localtime_r(&tv.tv_sec, &now); strftime(now_time, sizeof(now_time), "%Y-%m-%d %H:%M:%S", &now); /*init*/ pthread_mutex_lock(&g_frag_run.media_create_file_lock); if(NULL==g_frag_run.media_create_file) { strftime(day_time, sizeof(day_time), "%Y-%m-%d", &now); snprintf(filename, sizeof(filename), "%s.%s", g_frag_cfg.media_create_filename, day_time); g_frag_run.media_create_file = fopen(filename, "a+"); g_frag_run.cur_time = cur_time; localtime_r(&g_frag_run.cur_time, &g_frag_run.media_create_filetime); } if(now.tm_mday!=g_frag_run.media_create_filetime.tm_mday || now.tm_mon!=g_frag_run.media_create_filetime.tm_mon || now.tm_year!=g_frag_run.media_create_filetime.tm_year) { if(g_frag_run.media_create_file) { fclose(g_frag_run.media_create_file); strftime(day_time, sizeof(day_time), "%Y-%m-%d", &now); snprintf(filename, sizeof(filename), "%s.%s", g_frag_cfg.media_create_filename, day_time); g_frag_run.media_create_file = fopen(filename, "a+"); } g_frag_run.cur_time = cur_time; localtime_r(&g_frag_run.cur_time, &g_frag_run.media_create_filetime); } pthread_mutex_unlock(&g_frag_run.media_create_file_lock); switch(type) { case MEDIA_NEW: buflen = snprintf(buf, sizeof(buf), "%20s.%ld,%15s,MID:%" PRIu64 ",media_type:0x%02x,media_len:%10" PRIu64 "\n", now_time, tv.tv_usec, "create_media", mdi->mid,mdi->media_type,mdi->media_len); fp = g_frag_run.media_create_file; break; case MEDIA_RENEW: buflen = snprintf(buf, sizeof(buf), "%20s.%ld,%15s,MID:%" PRIu64 ",media_type:0x%02x,media_len:%10" PRIu64 "\n", now_time, tv.tv_usec, "renew_media", mdi->mid, mdi->media_type,mdi->media_len); fp = g_frag_run.media_create_file; break; case MEDIA_MID_CHANGE: inet_ntop(AF_INET, &mdi->multisrc_bizmanip, ip_buf, sizeof(ip_buf)); buflen = snprintf(buf, sizeof(buf), "%20s.%ld,%15s,MID:%" PRIu64 ",media_type:0x%02x,media_len:%10" PRIu64 ",new_mid:%" PRIu64 ",to_cpz:%s\n", now_time, tv.tv_usec, "change_mid", mdi->mid, mdi->media_type,mdi->media_len, *(uint64_t*)param,ip_buf); fp = g_frag_run.media_create_file; break; case MEDIA_OFFSET_ZERO: buflen = snprintf(buf, sizeof(buf), "%20s.%ld,%15s,MID:%" PRIu64 ",media_type:0x%02x,media_len:%10" PRIu64 ",offset:0\n", now_time, tv.tv_usec, "media_offset_0", mdi->mid, mdi->media_type,mdi->media_len); fp = g_frag_run.media_create_file; break; case MEDIA_FROM_CAPIP: buflen = snprintf(buf, sizeof(buf), "%20s.%ld,%15s,MID:%" PRIu64 ",media_type:0x%02x,media_len:%10" PRIu64 ",capIP:%s\n", now_time, tv.tv_usec, "media_from_qd", mdi->mid, mdi->media_type,mdi->media_len, (char*)param); fp = g_frag_run.media_create_file; break; case MEDIA_FROM_CPZIP: buflen = snprintf(buf, sizeof(buf), "%20s.%ld,%15s,MID:%" PRIu64 ",media_type:0x%02x,media_len:%10" PRIu64 ",capIP:%s\n", now_time, tv.tv_usec, "media_from_cpz", mdi->mid, mdi->media_type,mdi->media_len, (char*)param); fp = g_frag_run.media_create_file; break; case MEDIA_FROM_QDIP: buflen = snprintf(buf, sizeof(buf), "%20s.%ld,%15s,MID:%" PRIu64 ",media_type:0x%02x,media_len:%10" PRIu64 ",qdIP:%s\n", now_time, tv.tv_usec, "media_query_qd", mdi->mid, mdi->media_type,mdi->media_len, (char*)param); fp = g_frag_run.media_create_file; break; default: break; } if(fp) { fwrite(buf, buflen, 1, fp); fflush(fp); } } void expire_media_write_to_log(media_t* mdi, int type, void* param) { char buf[2048] = {0}; int buflen = 0; time_t cur_time; struct tm now; struct tm time_cache; char now_time[32] = {0}; char create_time[32] = {0}; char day_time[32] = {0}; char filename[MAX_PATH_LEN] = {0}; char renew_desc[MAX_PATH_LEN] = {"renew_expire_media"}; char expire_desc[MAX_PATH_LEN] = {"expire_media"}; char* type_desc = NULL; FILE* fp = NULL; time(&cur_time); localtime_r(&cur_time, &now); strftime(now_time, sizeof(now_time), "%Y-%m-%d %H:%M:%S", &now); /*init*/ pthread_mutex_lock(&g_frag_run.media_expire_file_lock); if(NULL==g_frag_run.media_expire_file) { strftime(day_time, sizeof(day_time), "%Y-%m-%d", &now); snprintf(filename, sizeof(filename), "%s.%s", g_frag_cfg.media_expire_filename, day_time); g_frag_run.media_expire_file = fopen(filename, "a+"); g_frag_run.cur_time = cur_time; localtime_r(&g_frag_run.cur_time, &g_frag_run.media_expire_filetime); } if(now.tm_mday!=g_frag_run.media_expire_filetime.tm_mday || now.tm_mon!=g_frag_run.media_expire_filetime.tm_mon || now.tm_year!=g_frag_run.media_expire_filetime.tm_year) { if(g_frag_run.media_expire_file) { fclose(g_frag_run.media_expire_file); strftime(day_time, sizeof(day_time), "%Y-%m-%d", &now); snprintf(filename, sizeof(filename), "%s.%s", g_frag_cfg.media_expire_filename, day_time); g_frag_run.media_expire_file = fopen(filename, "a+"); } g_frag_run.cur_time = cur_time; localtime_r(&g_frag_run.cur_time, &g_frag_run.media_expire_filetime); } pthread_mutex_unlock(&g_frag_run.media_expire_file_lock); switch(type) { case MEDIA_RENEW_EXPIRE: type_desc = renew_desc; break; case MEDIA_EXPIRE: type_desc = expire_desc; break; default: break; } localtime_r(&mdi->create_time,&time_cache); strftime(create_time, sizeof(create_time), "%Y-%m-%d %H:%M:%S", &time_cache); fp = g_frag_run.media_expire_file; buflen = snprintf(buf, sizeof(buf), "%20s,%12s,MID:%" PRIu64 ",media_type:0x%02x,media_len:%10" PRIu64 ",maxoffset:%10" PRIu64 ",frag_unit_cnt:%3u,pkt:%7u/%7u,byte:%10" PRIu64 "/%10" PRIu64 ",time:%s/%s\n", now_time, type_desc, mdi->mid, mdi->media_type,mdi->media_len,mdi->maxoffset,mdi->frag_unit_cnt, mdi->pkt_proc, mdi->pkt_in, mdi->byte_proc, mdi->byte_in, now_time, create_time); if(fp) { fwrite(buf, buflen, 1, fp); fflush(fp); } } void frag_write_to_log(int type, uint64_t mid, void* param1, void* param2, uint32_t param3) { char ip_buf[32] = {0}; frag_in_t* frg = NULL; frag_unit_t* frg_unit = NULL; media_t* mdi = NULL; media_info_t* media_info = NULL; int trace_flag = 0; char buf[2048] = {0}; int buflen = 0; char strbuf[1024] = {0}; char strbuf1[1024] = {0}; int strbuflen = 1024; time_t cur_time; struct tm* now; char now_time[32] = {0}; char filename[MAX_PATH_LEN] = {0}; FILE* fp = NULL; if(NULL!=g_frag_run.mid_trace_hd) { trace_flag = MESA_trace_match_numerial(g_frag_run.mid_trace_hd, mid); } if(trace_flag) { time(&cur_time); now = localtime(&cur_time); strftime(now_time, sizeof(now_time), "%Y-%m-%d %H:%M:%S", now); } switch(type) { case ADD_META: frg_unit = (frag_unit_t*)param1; inet_ntop(AF_INET, &frg_unit->capIP, ip_buf, sizeof(ip_buf)); MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [PID:%" PRIu64 ", media_len:%" PRIu64 ", media_type:0x%02x, cap_IP:%s]", __FILE__,__LINE__, "add_mediainfo", frg_unit->pid, frg_unit->media_len, frg_unit->media_type, ip_buf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", media_len:%" PRIu64 ", media_type:0x%02x, cap_IP:%s]\n", now_time, "add_mediainfo", frg_unit->pid, frg_unit->media_len, frg_unit->media_type, ip_buf); } break; case FRAG_FORECAST_ERROR: frg_unit = (frag_unit_t*)param1; inet_ntop(AF_INET, &frg_unit->capIP, ip_buf, sizeof(ip_buf)); MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [PID:%" PRIu64 ", media_len:%" PRIu64 ", media_type:0x%02x, cap_IP:%s, url:%s]", __FILE__,__LINE__, "frag_forecast_error", frg_unit->pid, frg_unit->media_len, frg_unit->media_type, ip_buf, frg_unit->opt[MEDIA_OPT_URL]->opt_value); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", media_len:%" PRIu64 ", media_type:0x%02x, cap_IP:%s, url:%s]\n", now_time, "frag_forecast_error", frg_unit->pid, frg_unit->media_len, frg_unit->media_type, ip_buf, frg_unit->opt[MEDIA_OPT_URL]->opt_value); } break; case GET_META: media_info = (media_info_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [MID:%" PRIu64 ", media_len:%" PRIu64 ", media_type:0x%02x, protocol:%hu]", __FILE__,__LINE__, "get_mediainfo", media_info->mid, media_info->prog_len, media_info->media_type, media_info->protocol); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ", media_len:%" PRIu64 ", media_type:0x%02x, protocol:%hu]\n", now_time, "get_mediainfo", media_info->mid, media_info->prog_len, media_info->media_type, media_info->protocol); } break; case ADD_FRAG: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "add_frag", frg->pid, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]\n", now_time, "add_frag", frg->pid, frg->offset, frg->datalen); } break; case ADD_FRAG_NOUSE: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "add_frag_no_unit", frg->pid, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]\n", now_time, "add_frag_no_unit", frg->pid, frg->offset, frg->datalen); } break; case GET_FRAG: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [MID:%" PRIu64 ", PID:%" PRIu64 ", reoffset:%hu, aboffset:%" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "get_frag", frg->mid, frg->pid, frg->seq, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ", PID:%" PRIu64 ", reoffset:%hu, aboffset:%" PRIu64 ", datalen:%u]\n", now_time, "get_frag", frg->mid, frg->pid, frg->seq, frg->offset, frg->datalen); } break; case ADD_FRAG_TO_CNVG_LQ: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "add frg_cnvg_lq", frg->pid, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]\n", now_time, "add frg_cnvg_lq", frg->pid, frg->offset, frg->datalen); } break; case GET_FRAG_FROM_CNVG_LQ: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "get frg_cnvg_lq", frg->pid, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]\n", now_time, "get frg_cnvg_lq", frg->pid, frg->offset, frg->datalen); } break; case ADD_FRAG_TO_INDEX_LQ: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "add frg_index_lq", frg->pid, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]\n", now_time, "add frg_index_lq", frg->pid, frg->offset, frg->datalen); } break; case GET_FRAG_FROM_INDEX_LQ: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "get frg_index_lq", frg->pid, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]\n", now_time, "get frg_index_lq", frg->pid, frg->offset, frg->datalen); } break; case ADD_FRAG_TO_WAIT_LQ: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [MID: %" PRIu64 ", PID: %" PRIu64 ", offset_in:%" PRIu64 ", reoffset:%hu, aboffset:%" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "add wait_queue", frg->mid, frg->pid, frg->offset_in, frg->seq, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID: %" PRIu64 ", PID: %" PRIu64 ", offset_in:%" PRIu64 ", reoffset:%hu, aboffset:%" PRIu64 ", datalen:%u]\n", now_time, "add wait_queue", frg->mid, frg->pid, frg->offset_in, frg->seq, frg->offset, frg->datalen); } break; case ADD_FRAG_TO_TAILQ: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [MID: %" PRIu64 ", PID: %" PRIu64 ", offset_in:%" PRIu64 ", reoffset:%hu, aboffset:%" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "add tailq", frg->mid, frg->pid, frg->offset_in, frg->seq, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID: %" PRIu64 ", PID: %" PRIu64 ", offset_in:%" PRIu64 ", reoffset:%hu, aboffset:%" PRIu64 ", datalen:%u]\n", now_time, "add tailq", frg->mid, frg->pid, frg->offset_in, frg->seq, frg->offset, frg->datalen); } break; case ADD_FRAG_FROM_TAILQ: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "get tailq", frg->pid, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", offset: %" PRIu64 ", datalen:%u]\n", now_time, "get tailq", frg->pid, frg->offset, frg->datalen); } break; case ADD_FRAG_TO_APP_LQ: frg = (frag_in_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [MID: %" PRIu64 ", PID: %" PRIu64 ", offset_in:%" PRIu64 ", reoffset:%hu, aboffset:%" PRIu64 ", datalen:%u]", __FILE__,__LINE__, "add app_queue", frg->mid, frg->pid, frg->offset_in, frg->seq, frg->offset, frg->datalen); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID: %" PRIu64 ", PID: %" PRIu64 ", offset_in:%" PRIu64 ", reoffset:%hu, aboffset:%" PRIu64 ", datalen:%u]\n", now_time, "add wait_queue", frg->mid, frg->pid, frg->offset_in, frg->seq, frg->offset, frg->datalen); } break; case MEDIA_NO_META: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [MID: %" PRIu64 "]", __FILE__,__LINE__,"no mediainfo", mid); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID: %" PRIu64 "]\n", now_time, "no mediainfo", mid); } break; case HLS_OSMF_REPEAT: frg_unit = (frag_unit_t*)param1; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s : [MID: %" PRIu64 ", PID: %" PRIu64 ", reoffset:%" PRIu64 "]", __FILE__,__LINE__, "hls and osmf repeat", mid, frg_unit->pid, frg_unit->re_offset); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID: %" PRIu64 ", PID: %" PRIu64 ", reoffset: %" PRIu64 "]\n", now_time, "hls and osmf repeat", mid, frg_unit->pid, frg_unit->re_offset); } break; case SET_OFFSET: frg_unit = (frag_unit_t*)param1; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [MID:%" PRIu64 ", PID:%" PRIu64 ", frag_unit_reoffset:%" PRIu64 ", frag_unit_aboffset:%" PRIu64 ", frag_unit_offset_in:%" PRIu64 "]", __FILE__,__LINE__, "set frag_unit offset", mid, frg_unit->pid, frg_unit->re_offset, frg_unit->ab_offset, frg_unit->ab_offset_for_in); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ", PID:%" PRIu64 ", frag_unit_reoffset:%" PRIu64 ", frag_unit_aboffset:%" PRIu64 ", frag_unit_offset_in:%" PRIu64 "]\n", now_time, "set frag_unit offset", mid, frg_unit->pid, frg_unit->re_offset, frg_unit->ab_offset, frg_unit->ab_offset_for_in); } break; case APP_CHANGE_PID: frg_unit = (frag_unit_t*)param1; MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 " change to PID: %" PRIu64 "]", __FILE__,__LINE__, "app_change_pid", mid, frg_unit->pid); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 " change to PID: %" PRIu64 "]\n", now_time, "app_change_pid", mid, frg_unit->pid); } break; //**********************************************碎片单向流查询 case SEND_CNVG_QUERY_1: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 ", key: %s]", __FILE__,__LINE__, "send_cnvg_query_1", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", key: %s]\n", now_time, "send_cnvg_query_1", mid, strbuf); } break; case SEND_CNVG_QUERY_2: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 ", key: %s]", __FILE__,__LINE__, "send_cnvg_query_2", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", key: %s]\n", now_time, "send_cnvg_query_2", mid, strbuf); } break; case RECV_CNVG_ACK_1: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 ", key: %s]", __FILE__,__LINE__, "recv_cnvg_ack_1", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", key: %s]\n", now_time, "recv_cnvg_ack_1", mid, strbuf); } break; case RECV_CNVG_ACK_2: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 ", key: %s]", __FILE__,__LINE__, "recv_cnvg_ack_2", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", key: %s]\n", now_time, "recv_cnvg_ack_2", mid, strbuf); } break; case CNVG_QUERY_FAIL_1: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 ", key: %s]", __FILE__,__LINE__, "cnvg_query_fail_1", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", key: %s]\n", now_time, "cnvg_query_fail_1", mid, strbuf); } break; case CNVG_QUERY_FAIL_2: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 ", key: %s]", __FILE__,__LINE__, "cnvg_query_fail_2", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", key: %s]\n", now_time, "cnvg_query_fail_2", mid, strbuf); } break; case CNVG_FAIL_PROC: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 ", key: %s]", __FILE__,__LINE__, "cnvg_fail_proc", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", key: %s]\n", now_time, "cnvg_fail_proc", mid, strbuf); } break; //**********************************************传统节目单向流查询 case SEND_AV_QUERY_1: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 ", key:%s]", __FILE__,__LINE__, "send_av_query_1", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", key:%s]\n", now_time, "send_av_query_1", mid, strbuf); } break; case SEND_AV_QUERY_2: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID: %" PRIu64 ", key:%s]", __FILE__,__LINE__, "send_av_query_2", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID: %" PRIu64 ", key:%s]\n", now_time, "send_av_query_2", mid, strbuf); } break; case RECV_AV_ACK_1: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", key:%s]", __FILE__,__LINE__, "recv_av_ack_1", mid, frg_unit->mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", key:%s]\n", now_time, "recv_av_ack_1", mid, frg_unit->mid, strbuf); } break; case RECV_AV_ACK_2: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", key:%s]", __FILE__,__LINE__, "recv_av_ack_2", mid, frg_unit->mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", key:%s]\n", now_time, "recv_av_ack_2", mid, frg_unit->mid, strbuf); } break; case AV_QUERY_FAIL_1: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", key:%s]", __FILE__,__LINE__, "av_query_fail_1", mid, frg_unit->mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", key:%s]\n", now_time, "av_query_fail_1", mid, frg_unit->mid, strbuf); } break; case AV_QUERY_FAIL_2: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_SINGLE_KEY]->opt_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", key:%s]", __FILE__,__LINE__, "av_query_fail_2", mid, frg_unit->mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", key:%s]\n", now_time, "av_query_fail_2", mid, frg_unit->mid, strbuf); } break; //**********************************************碎片索引查询 case SEND_INDEX_QUERY_1: frg_unit = (frag_unit_t*)param1; if(frg_unit->frg_info[FRAG_UNIT_ID]!=NULL) { memcpy(strbuf, (char*)frg_unit->frg_info[FRAG_UNIT_ID]->text, MIN((int)(frg_unit->frg_info[FRAG_UNIT_ID]->text_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", FRAG_UNIT_ID: %s]", __FILE__,__LINE__, "send_index_query_1", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", FRAG_UNIT_ID: %s]\n", now_time, "send_index_query_1", mid, strbuf); } break; case SEND_INDEX_QUERY_2: frg_unit = (frag_unit_t*)param1; if(frg_unit->frg_info[FRAG_UNIT_ID]!=NULL) { memcpy(strbuf, (char*)frg_unit->frg_info[FRAG_UNIT_ID]->text, MIN((int)(frg_unit->frg_info[FRAG_UNIT_ID]->text_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", FRAG_UNIT_ID: %s]", __FILE__,__LINE__, "send_index_query_2", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", FRAG_UNIT_ID: %s]\n", now_time, "send_index_query_2", mid, strbuf); } break; case RECV_INDEX_ACK_1: frg_unit = (frag_unit_t*)param1; if(frg_unit->opt[MEDIA_OPT_INDEX_URL]!=NULL) { memcpy(strbuf, (char*)frg_unit->opt[MEDIA_OPT_INDEX_URL]->opt_value, MIN((int)(frg_unit->opt[MEDIA_OPT_INDEX_URL]->opt_len), strbuflen-1)); } if(frg_unit->frg_info[FRAG_UNIT_ID]!=NULL) { memcpy(strbuf1, (char*)frg_unit->frg_info[FRAG_UNIT_ID]->text, MIN((int)(frg_unit->frg_info[FRAG_UNIT_ID]->text_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", reoffset:%lld, FRAG_UNIT_ID:%s, INDEX_URL:%s]", __FILE__,__LINE__, "recv_index_ack_1", mid, frg_unit->mid, frg_unit->re_offset, strbuf1, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", FRAG_UNIT_ID:%s]\n", now_time, "recv_index_ack_1", mid, frg_unit->mid, strbuf); } break; case RECV_INDEX_ACK_2: frg_unit = (frag_unit_t*)param1; if(frg_unit->frg_info[FRAG_UNIT_ID]!=NULL) { memcpy(strbuf, (char*)frg_unit->frg_info[FRAG_UNIT_ID]->text, MIN((int)(frg_unit->frg_info[FRAG_UNIT_ID]->text_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", FRAG_UNIT_ID:%s]", __FILE__,__LINE__, "recv_index_ack_2", mid, frg_unit->mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", FRAG_UNIT_ID:%s]\n", now_time, "recv_index_ack_2", mid, frg_unit->mid, strbuf); } break; case INDEX_QUERY_FAIL_1: frg_unit = (frag_unit_t*)param1; if(frg_unit->frg_info[FRAG_UNIT_ID]!=NULL) { memcpy(strbuf, (char*)frg_unit->frg_info[FRAG_UNIT_ID]->text, MIN((int)(frg_unit->frg_info[FRAG_UNIT_ID]->text_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", FRAG_UNIT_ID: %s]", __FILE__,__LINE__, "index_query_fail_1", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", FRAG_UNIT_ID: %s]\n", now_time, "index_query_fail_1", mid, strbuf); } break; case INDEX_QUERY_FAIL_2: frg_unit = (frag_unit_t*)param1; if(frg_unit->frg_info[FRAG_UNIT_ID]!=NULL) { memcpy(strbuf, (char*)frg_unit->frg_info[FRAG_UNIT_ID]->text, MIN((int)(frg_unit->frg_info[FRAG_UNIT_ID]->text_len), strbuflen-1)); } MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", FRAG_UNIT_ID: %s]", __FILE__,__LINE__, "index_query_fail_2", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", FRAG_UNIT_ID: %s]\n", now_time, "index_query_fail_2", mid, strbuf); } break; case INDEX_FAIL_PROC: MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 "]", __FILE__,__LINE__, "index_fail_proc", mid); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 "]\n", now_time, "index_fail_proc", mid); } break; //**********************************************voip查询 case SEND_VOIP_QUERY_1: frg_unit = (frag_unit_t*)param1; memcpy(strbuf, (char*)frg_unit->sip_diadata_ID->opt_value, MIN((int)(frg_unit->sip_diadata_ID->opt_len), strbuflen-1)); MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]", __FILE__,__LINE__, "send_voip_query_1", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]\n", now_time, "send_voip_query_1", mid, strbuf); } break; case SEND_VOIP_QUERY_2: frg_unit = (frag_unit_t*)param1; memcpy(strbuf, (char*)frg_unit->sip_diadata_ID->opt_value, MIN((int)(frg_unit->sip_diadata_ID->opt_len), strbuflen-1)); MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]", __FILE__,__LINE__, "send_voip_query_2", mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]\n", now_time, "send_voip_query_2", mid, strbuf); } break; case RECV_VOIP_ACK_1: frg_unit = (frag_unit_t*)param1; memcpy(strbuf, (char*)frg_unit->sip_diadata_ID->opt_value, MIN((int)(frg_unit->sip_diadata_ID->opt_len), strbuflen-1)); MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]", __FILE__,__LINE__, "recv_voip_ack_1", mid, frg_unit->mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]\n", now_time, "recv_voip_ack_1", mid, frg_unit->mid, strbuf); } break; case RECV_VOIP_ACK_2: frg_unit = (frag_unit_t*)param1; memcpy(strbuf, (char*)frg_unit->sip_diadata_ID->opt_value, MIN((int)(frg_unit->sip_diadata_ID->opt_len), strbuflen-1)); MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]", __FILE__,__LINE__, "recv_voip_ack_2", mid, frg_unit->mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]\n", now_time, "recv_voip_ack_2", mid, frg_unit->mid, strbuf); } break; case VOIP_QUERY_FAIL_1: frg_unit = (frag_unit_t*)param1; memcpy(strbuf, (char*)frg_unit->sip_diadata_ID->opt_value, MIN((int)(frg_unit->sip_diadata_ID->opt_len), strbuflen-1)); MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]", __FILE__,__LINE__, "voip_query_fail_1", mid, frg_unit->mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]\n", now_time, "voip_query_fail_1", mid, frg_unit->mid, strbuf); } break; case VOIP_QUERY_FAIL_2: frg_unit = (frag_unit_t*)param1; memcpy(strbuf, (char*)frg_unit->sip_diadata_ID->opt_value, MIN((int)(frg_unit->sip_diadata_ID->opt_len), strbuflen-1)); MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [PID:%" PRIu64 ", MID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]", __FILE__,__LINE__, "voip_query_fail_2", mid, frg_unit->mid, strbuf); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [PID:%" PRIu64 ", MID:%" PRIu64 ", VOIP_SIP_DIADATA_ID: %s]\n", now_time, "voip_query_fail_2", mid, frg_unit->mid, strbuf); } break; case SEND_AV_DEDUP_QUERY: mdi = (media_t*)param1; if(mdi->opt[MEDIA_OPT_URL][mdi->url_opt_index]!=NULL) { MESA_handle_runtime_log(g_frag_run.dedup_logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [MID:%" PRIu64 ", td_query:%hhu, TD: %s, addr: %s url: %s]", __FILE__,__LINE__, "soqav_dedup_query", mid, mdi->td_query, mdi->td, mdi->opt[MEDIA_OPT_ADDR][mdi->url_opt_index]->opt_value, mdi->opt[MEDIA_OPT_URL][mdi->url_opt_index]->opt_value); } else { MESA_handle_runtime_log(g_frag_run.dedup_logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [MID:%" PRIu64 ", td_query:%hhu, TD: %s, addr: %s, url: ]", __FILE__,__LINE__, "soqav_dedup_query", mid, mdi->td_query, mdi->td, mdi->opt[MEDIA_OPT_ADDR][mdi->url_opt_index]->opt_value); } if(trace_flag) { if(mdi->opt[MEDIA_OPT_URL][mdi->url_opt_index]!=NULL) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ", td_query:%hhu, TD: %s, addr: %s url: %s]\n", now_time, "soqav_dedup_query", mid, mdi->td_query, mdi->td, mdi->opt[MEDIA_OPT_ADDR][mdi->url_opt_index]->opt_value, mdi->opt[MEDIA_OPT_URL][mdi->url_opt_index]->opt_value); } else { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ", td_query:%hhu, TD: %s, addr: %s url: ]\n", now_time, "soqav_dedup_query", mid, mdi->td_query, mdi->td, mdi->opt[MEDIA_OPT_ADDR][mdi->url_opt_index]->opt_value); } } break; case RECV_AV_DEDUP_ACK: MESA_handle_runtime_log(g_frag_run.dedup_logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [MID:%" PRIu64 ", TD: %s, result:0x%x]", __FILE__,__LINE__, "soqav_query_callback", mid, (char*)param1, *(int*)param2); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ", TD: %s, result:0x%x]\n", now_time, "soqav_query_callback", mid, (char*)param1, *(int*)param2); } break; case RECV_AV_DEDUP_ACK_KNOWN: MESA_handle_runtime_log(g_frag_run.dedup_logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [MID:%" PRIu64 ", TD: %s, result:0x%x]", __FILE__,__LINE__, "soqav_query_callback_known", mid, (char*)param1, *(int*)param2); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ", TD: %s, result:0x%x]\n", now_time, "soqav_query_callback_known", mid, (char*)param1, *(int*)param2); } break; case RECV_AV_DEDUP_ACK_MULTI: mdi = (media_t*)param1; MESA_handle_runtime_log(g_frag_run.dedup_logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [MID:%" PRIu64 ", TD: %s, cpz_ip:%s, addr: %s, url: %s]", __FILE__,__LINE__, "soqav_query_callback_multisrc", mid, mdi->td, (char*)param2, mdi->opt[MEDIA_OPT_ADDR][mdi->url_opt_index]->opt_value, mdi->opt[MEDIA_OPT_URL][mdi->url_opt_index]->opt_value); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ", TD: %s, cpz_ip:%s, addr: %s, url: %s]", now_time, "soqav_query_callback_multisrc", mid, mdi->td, (char*)param2, mdi->opt[MEDIA_OPT_ADDR][mdi->url_opt_index]->opt_value, mdi->opt[MEDIA_OPT_URL][mdi->url_opt_index]->opt_value); } break; case AV_DEDUP_QUERY_TIMEOUT: MESA_handle_runtime_log(g_frag_run.dedup_logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [MID:%" PRIu64 "]", __FILE__,__LINE__, "soqav_query_timeout", mid); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ",]\n", now_time, "soqav_query_timeout", mid); } break; case AV_DEDUP_REPORT: MESA_handle_runtime_log(g_frag_run.dedup_logger, RLOG_LV_INFO, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} %20s [MID:%" PRIu64 ", TD: %s, cur_len:%" PRIu64 ", config:%u]", __FILE__,__LINE__, "soqav_dedup_report", mid, (char*)param1, *(uint64_t*)param2, param3); if(trace_flag) { buflen = snprintf(buf, sizeof(buf), "%20s, %20s : [MID:%" PRIu64 ", TD: %s, cur_len:%" PRIu64 " config:%u]\n", now_time, "soqav_dedup_report", mid, (char*)param1, *(uint64_t*)param2, param3); } break; default: break; } if(trace_flag) { snprintf(filename, MAX_PATH_LEN, "%s/%" PRIu64 ".log", g_frag_cfg.trace_filepath, mid); fp = fopen(filename, "a+"); if(NULL!=fp) { fwrite(buf, buflen,1, fp); fclose(fp); } } } /*opt_addr is printaddr result*/ char* merge_addr(char* addr_buf, uint32_t* addr_buflen, char* opt_addr, uint32_t opt_addrlen, int thread_seq) { char* ip = opt_addr; uint32_t ip_len = strlen(ip); //printaddr 包括\0 if(NULL==addr_buf) { addr_buf = (char*)malloc(ip_len); memcpy(addr_buf, ip, ip_len); *addr_buflen = ip_len; } else { addr_buf = (char*)realloc(addr_buf, (*addr_buflen)+strlen(";")+ip_len); memcpy(addr_buf+*addr_buflen, ";", strlen(";")); memcpy(addr_buf+*addr_buflen+strlen(";"), ip, ip_len); *addr_buflen += +strlen(";")+ip_len; } return addr_buf; } int frag_unit_removal(media_t* mdi, uint64_t reoffset) { return 0; int array_x = 0, bit_x = 0; #if 1 int i=0; for(i=0;(mdi->repeat_reoffset[i]!=-1&&irepeat_reoffset[i]==(int64_t)reoffset) return 1; } mdi->repeat_reoffset[mdi->repeat_reoffset_idx_last] = (int64_t)reoffset; mdi->repeat_reoffset_idx_last = (mdi->repeat_reoffset_idx_last+1%KEEP_REOFFSET_MAXNUM); return 0; #else /*超过限制,认为不重复*/ if(reoffset>KEEP_REOFFSET_MAXNUM) return 0; array_x = reoffset>>3; bit_x = reoffset & 7; if(GET_BIT(array_x,bit_x)) return 1; SET_BIT(array_x, bit_x); return 0; #endif } int add_to_seg(IVI_seg_t* seg, OFFSET_TYPE left, OFFSET_TYPE right) { seg->left = MIN(seg->left, left); seg->right = MAX(seg->right, right); return 0; } /* *return -1:error *return 0: delete frag return 1 : keep frag to add wait_lq return 2 : new frag to add wait_lq * */ /*IVI removal IVI节点归并*/ int frag_removal_and_merge(IVI_t* ivi, frag_ivi_info_t* frag_ivi_info) { frag_in_t* frg = frag_ivi_info->frg; IVI_seg_t contain_segs[FRAG_CONTAIN_MAXNUM]; int contain_segs_cnt = 0; IVI_seg_t** overlap_segs; //声明指针数组,不用分配内存 int overlap_cnt = 0; int break_flag = 0; OFFSET_TYPE left_before = frg->offset; OFFSET_TYPE right_before = frg->offset+frg->datalen-1; OFFSET_TYPE left = left_before; OFFSET_TYPE right = right_before; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_removal before : [ MID: %llu, PID: %llu, frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left_before, right_before); if((overlap_cnt = IVI_query(ivi, left_before, right_before, &overlap_segs)) < 0) { MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_query error: [mid: %llu]", __FILE__,__LINE__, frg->mid); free(overlap_segs); return -1; } /*create curseg*/ IVI_seg_t* seg_before = IVI_seg_malloc(left_before, right_before, NULL); IVI_seg_t* seg_to_add = IVI_seg_malloc(left_before, right_before, NULL); int seq_add_flag = 1; Relation_t rea; OFFSET_TYPE overlap_left = 0; OFFSET_TYPE overlap_right = 0; for(int i=0;ileft; overlap_right = overlap_segs[i]->right; switch(rea) { case LEFT_OVERLAP: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval LEFT_OVERLAP: [ MID: %llu, PID: %llu, seg_left:%u, seg_right:%u ,frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, overlap_left, overlap_right, left, right); right = overlap_left-1; add_to_seg(seg_to_add, overlap_left, overlap_right); seq_add_flag =1; /*删除之前的节点*/ MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_remove succ: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, overlap_segs[i]->left, overlap_segs[i]->right); IVI_remove(ivi, overlap_segs[i]); IVI_seg_free(overlap_segs[i], NULL, NULL); break; /*被包含,不需要此frag*/ case CONTAINED: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval CONTAINED: [ MID: %llu, PID: %llu, seg_left:%u, seg_right:%u ,frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, overlap_left, overlap_right, left, right); left = 0; right = 0; break_flag = 1; seq_add_flag = 0; break; /*包含已有区间,删除并释放已有区间*/ case CONTAIN: if(contain_segs_cntmid, frg->pid, overlap_left, overlap_right, left, right); contain_segs[contain_segs_cnt].left = overlap_left; contain_segs[contain_segs_cnt].right = overlap_right; contain_segs_cnt++; add_to_seg(seg_to_add, overlap_left, overlap_right); seq_add_flag = 1; /*可以被删除,因为当前frag会包含该区间*/ MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_remove succ: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, overlap_segs[i]->left, overlap_segs[i]->right); IVI_remove(ivi, overlap_segs[i]); IVI_seg_free(overlap_segs[i], NULL, NULL); } else { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval CONTAIN fatal bigger than FRAG_CONTAIN_MAXNUM: [ MID: %llu, PID: %llu, frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left, right); /*delete this frag*/ left = 0; right = 0; break_flag = 1; seq_add_flag = 0; } break; case RIGHT_OVERLAP: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval RIGHT_OVERLAP: [ MID: %llu, PID: %llu, seg_left:%u, seg_right:%u ,frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, overlap_left, overlap_right, left, right); left = overlap_right+1; add_to_seg(seg_to_add, overlap_left, overlap_right); seq_add_flag =1; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_remove succ: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, overlap_segs[i]->left, overlap_segs[i]->right); IVI_remove(ivi, overlap_segs[i]); IVI_seg_free(overlap_segs[i], NULL, NULL); break; /*以下情况不应该发生*/ case LEFT_NO_OVERLAP: left = 0; right = 0; break_flag = 1; seq_add_flag = 0; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_relative_position error LEFT_NO_OVERLAP: [ MID: %llu, PID: %llu, aboffset:%llu, datalen:%u]", __FILE__,__LINE__, frg->mid, frg->pid, frg->offset, frg->datalen); break; case RIGHT_NO_OVERLAP: left = 0; right = 0; break_flag = 1; seq_add_flag = 0; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_relative_position error RIGHT_NO_OVERLAP: [ MID: %llu, PID: %llu, aboffset:%llu, datalen:%u]", __FILE__,__LINE__, frg->mid, frg->pid, frg->offset, frg->datalen); break; default: left = 0; right = 0; break_flag = 1; seq_add_flag = 0; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_relative_position error: [ MID: %llu, PID: %llu, aboffset:%llu, datalen:%u]", __FILE__,__LINE__, frg->mid, frg->pid, frg->offset, frg->datalen); break; } } free(overlap_segs); //释放指针数组 IVI_seg_free(seg_before, NULL, NULL); /*更新IVI节点*/ if(seq_add_flag) { /*frag加入到IVI区间里面*//*插入失败,该frag依然入队列!!!!!!!*/ if(-1==IVI_insert(ivi, seg_to_add)) { MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_insert error: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, seg_to_add->left, seg_to_add->right); } else { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_insert succ: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, seg_to_add->left, seg_to_add->right); /*merge IVI 节点*/ IVI_seg_t* prev_seg = IVI_prev_continuous_seg(seg_to_add); IVI_seg_t* next_seg = IVI_next_continuous_seg(seg_to_add); IVI_seg_t* new_seg = IVI_seg_malloc(seg_to_add->left, seg_to_add->right, NULL); int del_seg_flag = 0; if(NULL!=prev_seg) { if(prev_seg->right+1==seg_to_add->left) { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_remove succ: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, prev_seg->left, prev_seg->right); new_seg->left = prev_seg->left; IVI_remove(ivi, prev_seg); IVI_seg_free(prev_seg, NULL, NULL); del_seg_flag = 1; } } if(NULL!=next_seg) { if(seg_to_add->right+1==next_seg->left) { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_remove succ: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, next_seg->left, next_seg->right); new_seg->right = next_seg->right; IVI_remove(ivi, next_seg); IVI_seg_free(next_seg, NULL, NULL); del_seg_flag = 1; } } if(del_seg_flag) { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_remove succ: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, seg_to_add->left, seg_to_add->right); IVI_remove(ivi, seg_to_add); IVI_seg_free(seg_to_add, NULL, NULL); if(-1==IVI_insert(ivi, new_seg)) { MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_insert error: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, new_seg->left, new_seg->right); } else { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_insert succ: [ MID: %llu, PID: %llu, left:%u, right:%u ]", __FILE__,__LINE__, frg->mid, frg->pid, new_seg->left, new_seg->right); } } else { IVI_seg_free(new_seg, NULL, NULL); } } } else { IVI_seg_free(seg_to_add, NULL, NULL); } /*修正frag*/ if(right>left && contain_segs_cnt==0) { /*有去重*/ if(left!=left_before || right!=right_before) { /*修正frag*/ frg->datalen = right-left+1; frg->offset = left; char* data = (char*)malloc(frg->datalen); memcpy(data, frg->data+left-left_before, frg->datalen); free(frg->data); frg->data = data; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval after overlop: [ MID: %llu, PID: %llu, before_left:%u, before_right:%u ,after_left:%u, after_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left_before, right_before, left, right); } else { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval after new: [ MID: %llu, PID: %llu, before_left:%u, before_right:%u ,after_left:%u, after_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left_before, right_before, left, right); } return 1; } else if(right>left && contain_segs_cnt!=0) { int i=0,frg_array_cnt=0; OFFSET_TYPE left_forlq = left; /*处理CONTAIN的区间,因为此时左边界和右边界已经确定*/ for(i=0;i0) { frag_ivi_info->frg_array[frg_array_cnt] = (frag_in_t*)malloc(sizeof(frag_in_t)); frag_ivi_info->frg_array[frg_array_cnt]->data = (char*)malloc(contain_segs[i].left-left_forlq); frag_ivi_info->frg_array[frg_array_cnt]->offset = left_forlq; memcpy(frag_ivi_info->frg_array[frg_array_cnt]->data, frg->data+left_forlq-left_before, contain_segs[i].left-left_forlq); frag_ivi_info->frg_array[frg_array_cnt]->datalen = contain_segs[i].left-left_forlq; frg_array_cnt++; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval after contain: [ MID: %llu, PID: %llu, before_left:%u, before_right:%u ,after_left:%u, after_right:%u]", __FILE__,__LINE__,frg->mid, frg->pid, left_before, right_before, left_forlq, contain_segs[i].left-1); } left_forlq = contain_segs[i].right+1; } /*处理最后一个被包含的区间的右边部分*/ if(right>left_forlq) { frag_ivi_info->frg_array[frg_array_cnt] = (frag_in_t*)malloc(sizeof(frag_in_t)); frag_ivi_info->frg_array[frg_array_cnt]->data = (char*)malloc(right-left_forlq+1); frag_ivi_info->frg_array[frg_array_cnt]->offset = left_forlq; memcpy(frag_ivi_info->frg_array[frg_array_cnt]->data, frg->data+left_forlq-left_before, right-left_forlq+1); frag_ivi_info->frg_array[frg_array_cnt]->datalen = right-left_forlq+1; frg_array_cnt++; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval after contain: [ MID: %llu, PID: %llu, before_left:%u, before_right:%u ,after_left:%u, after_right:%u]", __FILE__,__LINE__,frg->mid, frg->pid, left_before, right_before, left_forlq, right); } frag_ivi_info->frg_array_cnt = frg_array_cnt; return 2; } else { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval after contained: [ MID: %llu, PID: %llu, before_left:%u, before_right:%u ,after_left:%u, after_right:%u]", __FILE__,__LINE__,frg->mid, frg->pid, left_before, right_before, left, right); return 0; } return 0; } /* *return -1:error *return 0: delete frag return 1 : keep frag to add wait_lq return 2 : new frag to add wait_lq * */ /*IVI removal IVI节点没有归并*/ int frag_removal(IVI_t* ivi, frag_ivi_info_t* frag_ivi_info) { frag_in_t* frg = frag_ivi_info->frg; IVI_seg_t contain_segs[FRAG_CONTAIN_MAXNUM]; int contain_segs_cnt = 0; IVI_seg_t** overlap_segs; //声明指针数组,不用分配内存 int overlap_cnt = 0; int break_flag = 0; OFFSET_TYPE left_before = frg->offset; OFFSET_TYPE right_before = frg->offset+frg->datalen-1; OFFSET_TYPE left = left_before; OFFSET_TYPE right = right_before; MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_removal : [ MID: %llu, PID: %llu, frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left_before, right_before); if((overlap_cnt = IVI_query(ivi, left_before, right_before, &overlap_segs)) < 0) { MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_query error: [mid: %llu]", __FILE__,__LINE__, frg->mid); free(overlap_segs); return -1; } /*create curseg*/ IVI_seg_t* seg_before = IVI_seg_malloc(left_before, right_before, NULL); Relation_t rea; OFFSET_TYPE overlap_left = 0; OFFSET_TYPE overlap_right = 0; for(int i=0;ileft; overlap_right = overlap_segs[i]->right; switch(rea) { case LEFT_OVERLAP: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval LEFT_OVERLAP: [ MID: %llu, PID: %llu, seg_left:%u, seg_right:%u ,frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, overlap_left, overlap_right, left, right); right = overlap_left-1; break; /*被包含,不需要此frag*/ case CONTAINED: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval CONTAINED: [ MID: %llu, PID: %llu, seg_left:%u, seg_right:%u ,frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, overlap_left, overlap_right, left, right); left = 0; right = 0; break_flag = 1; break; /*包含已有区间,删除并释放已有区间*/ case CONTAIN: if(contain_segs_cntmid, frg->pid, overlap_left, overlap_right, left, right); } else { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval CONTAIN fatal bigger than FRAG_CONTAIN_MAXNUM: [ MID: %llu, PID: %llu, frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left, right); /*delete this frag*/ left = 0; right = 0; break_flag = 1; } break; case RIGHT_OVERLAP: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval RIGHT_OVERLAP: [ MID: %llu, PID: %llu, seg_left:%u, seg_right:%u ,frag_left:%u, frag_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, overlap_left, overlap_right, left, right); left = overlap_right+1; break; /*以下情况不应该发生*/ case LEFT_NO_OVERLAP: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_relative_position error LEFT_NO_OVERLAP: [ MID: %llu, PID: %llu, aboffset:%llu, datalen:%u]", __FILE__,__LINE__, frg->mid, frg->pid, frg->offset, frg->datalen); break; case RIGHT_NO_OVERLAP: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_relative_position error RIGHT_NO_OVERLAP: [ MID: %llu, PID: %llu, aboffset:%llu, datalen:%u]", __FILE__,__LINE__, frg->mid, frg->pid, frg->offset, frg->datalen); break; default: MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} IVI_relative_position error: [ MID: %llu, PID: %llu, aboffset:%llu, datalen:%u]", __FILE__,__LINE__, frg->mid, frg->pid, frg->offset, frg->datalen); break; } } free(overlap_segs); //释放指针数组 /*把本次的frag加入到IVI中*/ if(right>left && contain_segs_cnt==0) { IVI_seg_t* seg = NULL; /*有去重*/ if(left!=left_before || right!=right_before) { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval frag_overlop: [ MID: %llu, PID: %llu, before_left:%u, before_right:%u ,after_left:%u, after_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left_before, right_before, left, right); seg = IVI_seg_malloc(left, right, NULL); IVI_seg_free(seg_before, NULL, NULL); /*修正frag*/ frg->datalen = right-left+1; frg->offset = left; char* data = (char*)malloc(frg->datalen); memcpy(data, frg->data+left-left_before, frg->datalen); free(frg->data); frg->data = data; } else { seg = seg_before; } /*frag加入到IVI区间里面*//*插入失败,该frag依然入队列!!!!!!!*/ if(-1==IVI_insert(ivi, seg)) { MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval IVI_insert_overlap_error: [ MID: %llu, PID: %llu, before_left:%u, before_right:%u ,insert_left:%u, insert_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left_before, right_before, left, right); } else { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval IVI_insert_overlap_succ: [ MID: %llu, PID: %llu, before_left:%u, before_right:%u ,insert_left:%u, insert_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left_before, right_before, left, right); } return 1; } else if(right>left && contain_segs_cnt!=0) { int i=0,frg_array_cnt=0; OFFSET_TYPE left_forlq = left; /*处理CONTAIN的区间,因为此时左边界和右边界已经确定*/ for(i=0;i0) { frag_ivi_info->frg_array[frg_array_cnt] = (frag_in_t*)malloc(sizeof(frag_in_t)); frag_ivi_info->frg_array[frg_array_cnt]->data = (char*)malloc(contain_segs[i].left-left_forlq); frag_ivi_info->frg_array[frg_array_cnt]->offset = left_forlq; memcpy(frag_ivi_info->frg_array[frg_array_cnt]->data, frg->data+left_forlq-left_before, contain_segs[i].left-left_forlq); frag_ivi_info->frg_array[frg_array_cnt]->datalen = contain_segs[i].left-left_forlq; frg_array_cnt++; } left_forlq = contain_segs[i].right+1; } /*处理最后一个被包含的区间的右边部分*/ if(right>left_forlq) { frag_ivi_info->frg_array[frg_array_cnt] = (frag_in_t*)malloc(sizeof(frag_in_t)); frag_ivi_info->frg_array[frg_array_cnt]->data = (char*)malloc(right-left_forlq+1); frag_ivi_info->frg_array[frg_array_cnt]->offset = left_forlq; memcpy(frag_ivi_info->frg_array[frg_array_cnt]->data, frg->data+left_forlq-left_before, right-left_forlq+1); frag_ivi_info->frg_array[frg_array_cnt]->datalen = right-left_forlq+1; frg_array_cnt++; } frag_ivi_info->frg_array_cnt = frg_array_cnt; IVI_seg_t* seg = IVI_seg_malloc(left, right, NULL); IVI_seg_free(seg_before, NULL, NULL); /*frag加入到IVI区间里面*//*插入失败,该frag依然入队列!!!!!!!*/ if(-1==IVI_insert(ivi, seg)) { MESA_handle_runtime_log(frag_rssb.logger, RLOG_LV_FATAL, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval IVI_insert_contain_error: [ MID: %llu, PID: %llu, insert_left:%u, insert_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left, right); } else { MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval IVI_insert_contain_succ: [ MID: %llu, PID: %llu, insert_left:%u, insert_right:%u]", __FILE__,__LINE__, frg->mid, frg->pid, left, right); } return 2; } else { IVI_seg_free(seg_before, NULL, NULL); MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME, "{%s:%d} frag_moval frag_contained: [ MID: %llu, PID: %llu, before_left:%u, before_right:%u ,after_left:%u, after_right:%u]", __FILE__,__LINE__,frg->mid, frg->pid, left_before, right_before, left, right); return 0; } return 0; } /*use AV_make_porg_id*/ uint64_t make_mid(char * key, unsigned int size, unsigned char type) { unsigned long long hash = 0; unsigned char *p = NULL; unsigned int hashH = 1610612741L, hashL = 2166136261L; unsigned int i=0, ch=0; unsigned char* key_tmp=NULL; if(size <= 0) { return(idMaskIndex[0]); } //force convert key from uint8_t* to uint* will over read 3 bytes,make a copy to be safe; key_tmp=(unsigned char*)calloc(sizeof(unsigned char),size+4); memcpy(key_tmp,key,size); p=key_tmp; i = size; while(i--) { ch = (unsigned int)(*p++); if(ch != 0) { hashH = (hashH ^ ch) * 12255871; hashL = (hashL ^ ch) * 16777619; } } hash = ( (unsigned long long)hashH << 32) | (unsigned long long)hashL; hash = (hash & 0x0FFFFFFFFFFFFFFF) | idMaskIndex[type]; free(key_tmp); return(hash); } int save_qd_info(qd_info_t qd_info[], uint32_t qd_info_maxnum, uint8_t* qd_info_idx_last, uint32_t capip, uint64_t mid) { int ip_set = 0; for(uint32_t i=0; i%[0-9.],%hu", touple4.sip, &touple4.sport, touple4.dip, &touple4.dport) == 4) { touple4.addr_type = 4; } else if(sscanf(addr, "%[0-9A-Fa-f:.],%hu>%[0-9A-Fa-f:.],%hu", touple4.sip, &touple4.sport, touple4.dip, &touple4.dport) == 4) { touple4.addr_type = 6; } memcpy(d_ip, touple4.dip, sizeof(touple4.dip)); return 0; } void send_ack_to_qd(frag_in_t* frg, uint32_t src_ip, int thread_seq) { /*ack for sapp*/ if(g_frag_cfg.ack_switch) { memcpy(g_frag_run.fb_ack_hdr[thread_seq]->prog_id, (char*)(&frg->mid), 8); g_frag_run.fb_ack_hdr[thread_seq]->ack_offset = frg->offset+frg->datalen; bizman_send(g_frag_run.answer_sapp_bizman, thread_seq, src_ip, g_frag_cfg.qd_msg_port, (const char*)g_frag_run.fb_ack_buf[thread_seq], MSG_HEADER_LEN + sizeof(msg_data_ack_t), 1, BIZMAN_SMOOTH_DEST|BIZMAN_PUSH_SEND); atomic_inc(&g_frag_stat.stat_info[RESP_CHARACTER_ACK][TOTAL_PKTS]); atomic_add(&g_frag_stat.stat_info[RESP_CHARACTER_ACK][TOTAL_BYTES], MSG_HEADER_LEN+sizeof(msg_data_ack_t)); } } int caculate_md5(const char *meta, unsigned long meta_len, const char *data, unsigned long len, char *result, unsigned int result_len) { MD5_CTX c; unsigned char md5[17]={0}; int i; if(result_len < 33) return -1; if(MD5_Init(&c) != 1) return -1; if(meta!=NULL && MD5_Update(&c, meta, meta_len) != 1) return -1; if(data!=NULL && MD5_Update(&c, data, len) != 1) return -1; if(MD5_Final(md5, &c) != 1) return -1; for(i=0; i<16; i++) { sprintf(result + i*2, "%02x", md5[i]); } return 0; }