diff options
Diffstat (limited to 'src/frag_reassembly.c')
| -rw-r--r-- | src/frag_reassembly.c | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/src/frag_reassembly.c b/src/frag_reassembly.c index 08c0fd6..2a9217d 100644 --- a/src/frag_reassembly.c +++ b/src/frag_reassembly.c @@ -1314,6 +1314,7 @@ long get_media(void *data, const uint8_t *key, uint size, void *user_arg) media_t* mdi = (media_t*)data; media_info_t* media_info = (media_info_t*)user_arg; int opt_num = 0; + int opt_index = 0; if(NULL!=mdi) { media_info->td_query = mdi->td_query; @@ -1411,35 +1412,43 @@ long get_media(void *data, const uint8_t *key, uint size, void *user_arg) #if K_PROJECT #else if(mdi->proto!=AV_PROTOCOL_SIP) - { - /*�������ݷ�������ѡ��*/ - media_info->opt_unit = (struct opt_unit_t*)calloc(1, sizeof(struct opt_unit_t)); - media_info->opt_unit->opt_len = sizeof(uint32_t)+sizeof(uint8_t)+sizeof(unsigned int); - media_info->opt_unit->opt_type = OPT_SOURCE_IP; - media_info->opt_unit->opt_value = (char*)calloc(1, sizeof(unsigned int)); - *(unsigned int*)(media_info->opt_unit->opt_value) = g_frag_cfg.local_ip_nr; + { opt_num++; + if(mdi->opt[MEDIA_OPT_URL][0]!=NULL && mdi->opt[MEDIA_OPT_URL][0]->opt_value!=NULL) + { + opt_num++; + } + if(mdi->opt[MEDIA_OPT_REFERER][0]!=NULL && mdi->opt[MEDIA_OPT_REFERER][0]->opt_value!=NULL) + { + opt_num++; + } + media_info->opt_unit = (struct opt_unit_t*)calloc(opt_num, sizeof(struct opt_unit_t)); + + /*�������ݷ�������ѡ��*/ + media_info->opt_unit[opt_index].opt_len = sizeof(uint32_t)+sizeof(uint8_t)+sizeof(unsigned int); + media_info->opt_unit[opt_index].opt_type = OPT_SOURCE_IP; + media_info->opt_unit[opt_index].opt_value = (char*)calloc(1, sizeof(unsigned int)); + *(unsigned int*)(media_info->opt_unit[opt_index].opt_value) = g_frag_cfg.local_ip_nr; + opt_index++; /*URLѡ��*/ - if(mdi->opt[MEDIA_OPT_URL]->opt_value!=NULL) + if(mdi->opt[MEDIA_OPT_URL][0]!=NULL && mdi->opt[MEDIA_OPT_URL][0]->opt_value!=NULL) { - media_info->opt_unit = (struct opt_unit_t*)calloc(1, sizeof(struct opt_unit_t)); - media_info->opt_unit->opt_len = sizeof(uint32_t)+sizeof(uint8_t)+mdi->opt[MEDIA_OPT_URL]->opt_len; - media_info->opt_unit->opt_type = OPT_SOURCE_URL; - media_info->opt_unit->opt_value = (char*)calloc(1, mdi->opt[MEDIA_OPT_URL]->opt_len); - memcpy(media_info->opt_unit->opt_value, mdi->opt[MEDIA_OPT_URL]->opt_value, mdi->opt[MEDIA_OPT_URL]->opt_len); - opt_num++; + media_info->opt_unit[opt_index].opt_len = sizeof(uint32_t)+sizeof(uint8_t)+mdi->opt[MEDIA_OPT_URL][0]->opt_len; + media_info->opt_unit[opt_index].opt_type = OPT_SOURCE_URL; + media_info->opt_unit[opt_index].opt_value = (char*)calloc(1, mdi->opt[MEDIA_OPT_URL][0]->opt_len); + memcpy(media_info->opt_unit[opt_index].opt_value, mdi->opt[MEDIA_OPT_URL][0]->opt_value, mdi->opt[MEDIA_OPT_URL][0]->opt_len); + opt_index++; } /*refererѡ��*/ - if(mdi->opt[MEDIA_OPT_REFERER]->opt_value!=NULL) + if(mdi->opt[MEDIA_OPT_REFERER][0]!=NULL && mdi->opt[MEDIA_OPT_REFERER][0]->opt_value!=NULL) { - media_info->opt_unit = (struct opt_unit_t*)calloc(1, sizeof(struct opt_unit_t)); - media_info->opt_unit->opt_len = sizeof(uint32_t)+sizeof(uint8_t)+mdi->opt[MEDIA_OPT_REFERER]->opt_len; - media_info->opt_unit->opt_type = OPT_SOURCE_REFERER; - media_info->opt_unit->opt_value = (char*)calloc(1, mdi->opt[MEDIA_OPT_REFERER]->opt_len); - memcpy(media_info->opt_unit->opt_value, mdi->opt[MEDIA_OPT_REFERER]->opt_value, mdi->opt[MEDIA_OPT_REFERER]->opt_len); - opt_num++; + media_info->opt_unit[opt_index].opt_len = sizeof(uint32_t)+sizeof(uint8_t)+mdi->opt[MEDIA_OPT_REFERER][0]->opt_len; + media_info->opt_unit[opt_index].opt_type = OPT_SOURCE_REFERER; + media_info->opt_unit[opt_index].opt_value = (char*)calloc(1, mdi->opt[MEDIA_OPT_REFERER][0]->opt_len); + memcpy(media_info->opt_unit[opt_index].opt_value, mdi->opt[MEDIA_OPT_REFERER][0]->opt_value, mdi->opt[MEDIA_OPT_REFERER][0]->opt_len); + opt_index++; } } #endif |
