This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
av-frag-rssb/src/frag_proc.c

1722 lines
68 KiB
C
Raw Normal View History

2018-09-29 14:57:32 +08:00
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <math.h>
#include <net/if.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <openssl/md5.h>
#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, /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip +len*/
0x3000000000000000, /*<2A>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>*/
0x4000000000000000, /*<2A><>Ԫ<EFBFBD><D4AA>*/
0x5000000000000000, /*Ψһ<CEA8><D2BB><EFBFBD><EFBFBD>*/
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;
//**********************************************<2A><>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
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;
//**********************************************<2A><>ͳ<EFBFBD><CDB3>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
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;
//**********************************************<2A><>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
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<69><70>ѯ
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 <20><><EFBFBD><EFBFBD>\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&&i<KEEP_REOFFSET_MAXNUM);i++)
{
if(mdi->repeat_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
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ظ<EFBFBD>*/
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<56>ڵ<EFBFBD><DAB5>鲢*/
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; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD>ڴ<EFBFBD>
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;i<overlap_cnt && !break_flag;i++)
{
rea = IVI_relative_position(seg_before, overlap_segs[i]);
overlap_left = overlap_segs[i]->left;
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;
/*ɾ<><C9BE>֮ǰ<D6AE>Ľڵ<C4BD>*/
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;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>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;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䣬ɾ<E4A3AC><C9BE><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
case CONTAIN:
if(contain_segs_cnt<FRAG_CONTAIN_MAXNUM)
{
MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME,
"{%s:%d} frag_moval CONTAIN: [ 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);
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;
/*<2A><><EFBFBD>Ա<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǰfrag<61><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
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;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD>*/
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); //<2F>ͷ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IVI_seg_free(seg_before, NULL, NULL);
/*<2A><><EFBFBD><EFBFBD>IVI<56>ڵ<EFBFBD>*/
if(seq_add_flag)
{
/*frag<61><67><EFBFBD>뵽IVI<56><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*//*<2A><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>frag<61><67>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!*/
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 <20>ڵ<EFBFBD>*/
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);
}
/*<2A><><EFBFBD><EFBFBD>frag*/
if(right>left && contain_segs_cnt==0)
{
/*<2A><>ȥ<EFBFBD><C8A5>*/
if(left!=left_before || right!=right_before)
{
/*<2A><><EFBFBD><EFBFBD>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;
/*<2A><><EFBFBD><EFBFBD>CONTAIN<49><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4A3AC>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD>ұ߽<D2B1><DFBD>Ѿ<EFBFBD>ȷ<EFBFBD><C8B7>*/
for(i=0;i<contain_segs_cnt;i++)
{
if(contain_segs[i].left-left_forlq>0)
{
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;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ߲<D2B1><DFB2><EFBFBD>*/
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<56>ڵ<EFBFBD>û<EFBFBD>й鲢*/
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; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD>ڴ<EFBFBD>
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;i<overlap_cnt && !break_flag;i++)
{
rea = IVI_relative_position(seg_before, overlap_segs[i]);
overlap_left = overlap_segs[i]->left;
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;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>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;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䣬ɾ<E4A3AC><C9BE><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
case CONTAIN:
if(contain_segs_cnt<FRAG_CONTAIN_MAXNUM)
{
contain_segs[contain_segs_cnt].left = overlap_left;
contain_segs[contain_segs_cnt].right = overlap_right;
contain_segs_cnt++;
/*<2A><><EFBFBD>Ա<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǰfrag<61><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
IVI_remove(ivi, overlap_segs[i]);
IVI_seg_free(overlap_segs[i], NULL, NULL);
MESA_handle_runtime_log(frag_rssb.media_logger, RLOG_LV_DEBUG, FRAG_REASSEMBLY_MODULE_NAME,
"{%s:%d} frag_moval CONTAIN: [ 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);
}
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;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD>*/
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); //<2F>ͷ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*<2A>ѱ<EFBFBD><D1B1>ε<EFBFBD>frag<61><67><EFBFBD>뵽IVI<56><49>*/
if(right>left && contain_segs_cnt==0)
{
IVI_seg_t* seg = NULL;
/*<2A><>ȥ<EFBFBD><C8A5>*/
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);
/*<2A><><EFBFBD><EFBFBD>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<61><67><EFBFBD>뵽IVI<56><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*//*<2A><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>frag<61><67>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!*/
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;
/*<2A><><EFBFBD><EFBFBD>CONTAIN<49><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4A3AC>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD>ұ߽<D2B1><DFBD>Ѿ<EFBFBD>ȷ<EFBFBD><C8B7>*/
for(i=0;i<contain_segs_cnt;i++)
{
if(contain_segs[i].left-left_forlq>0)
{
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;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ߲<D2B1><DFB2><EFBFBD>*/
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<61><67><EFBFBD>뵽IVI<56><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*//*<2A><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>frag<61><67>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!*/
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<qd_info_maxnum; i++)
{
if(capip == qd_info[i].cap_ip)
{
ip_set = 1;
break;
}
}
if(!ip_set)
{
qd_info[*qd_info_idx_last].cap_ip = capip;
qd_info[*qd_info_idx_last].mid = mid;
*qd_info_idx_last = (*qd_info_idx_last+1)%qd_info_maxnum;
return 1;
}
return 0;
}
int get_serverIP(const char *addr, uint32_t addr_len, char* d_ip)
{
touple4_type_t touple4;
if(sscanf(addr, "%[0-9.],%hu>%[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,
2018-09-29 14:57:32 +08:00
(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;
}