📄 sdp.c
字号:
c->c_next = NULL; STR_DUP(p, c, src, c_address); assert((size_t)(p - *pp) == connection_xtra(src)); *pp = p; return c;}static size_t bandwidth_xtra(sdp_bandwidth_t const *b){ size_t rv = sizeof(*b); STR_XTRA(rv, b->b_modifier_name); return rv;}staticsdp_bandwidth_t *bandwidth_dup(char **pp, sdp_bandwidth_t const *src){ char *p; sdp_bandwidth_t *b; p = *pp; STRUCT_DUP(p, b, src); b->b_next = NULL; STR_DUP(p, b, src, b_modifier_name); assert((size_t)(p - *pp) == bandwidth_xtra(src)); *pp = p; return b;}static size_t time_xtra(sdp_time_t const *t){ size_t rv = sizeof(*t); PTR_XTRA(rv, t->t_repeat, repeat_xtra); PTR_XTRA(rv, t->t_zone, zone_xtra); return rv;}staticsdp_time_t *time_dup(char **pp, sdp_time_t const *src){ char *p; sdp_time_t *t; p = *pp; STRUCT_DUP(p, t, src); t->t_next = NULL; PTR_DUP(p, t, src, t_repeat, repeat_dup); PTR_DUP(p, t, src, t_zone, zone_dup); assert((size_t)(p - *pp) == time_xtra(src)); *pp = p; return t;}static size_t repeat_xtra(sdp_repeat_t const *r){ return (size_t)r->r_size;}staticsdp_repeat_t *repeat_dup(char **pp, sdp_repeat_t const *src){ char *p; sdp_repeat_t *r; p = *pp; STRUCT_DUP2(p, r, src); assert((size_t)(p - *pp) == repeat_xtra(src)); *pp = p; return r;}static size_t zone_xtra(sdp_zone_t const *z){ return z->z_size;}staticsdp_zone_t *zone_dup(char **pp, sdp_zone_t const *src){ char *p; sdp_zone_t *z; p = *pp; STRUCT_DUP2(p, z, src); assert((size_t)(p - *pp) == zone_xtra(src)); *pp = p; return z;}static size_t key_xtra(sdp_key_t const *k){ size_t rv = sizeof(*k); STR_XTRA(rv, k->k_method_name); STR_XTRA(rv, k->k_material); return rv;}staticsdp_key_t *key_dup(char **pp, sdp_key_t const *src){ char *p; sdp_key_t *k; p = *pp; STRUCT_DUP(p, k, src); STR_DUP(p, k, src, k_method_name); STR_DUP(p, k, src, k_material); assert((size_t)(p - *pp) == key_xtra(src)); *pp = p; return k;}static size_t attribute_xtra(sdp_attribute_t const *a){ size_t rv = sizeof(*a); STR_XTRA(rv, a->a_name); STR_XTRA(rv, a->a_value); return rv;}staticsdp_attribute_t *attribute_dup(char **pp, sdp_attribute_t const *src){ char *p; sdp_attribute_t *a; p = *pp; STRUCT_DUP(p, a, src); a->a_next = NULL; STR_DUP(p, a, src, a_name); STR_DUP(p, a, src, a_value); assert((size_t)(p - *pp) == attribute_xtra(src)); *pp = p; return a;}static size_t media_xtra(sdp_media_t const *m){ size_t rv = sizeof(*m); STR_XTRA(rv, m->m_type_name); STR_XTRA(rv, m->m_proto_name); LST_XTRA(rv, m->m_format, list_xtra); LST_XTRA(rv, m->m_rtpmaps, rtpmap_xtra); STR_XTRA(rv, m->m_information); LST_XTRA(rv, m->m_connections, connection_xtra); LST_XTRA(rv, m->m_bandwidths, bandwidth_xtra); PTR_XTRA(rv, m->m_key, key_xtra); LST_XTRA(rv, m->m_attributes, attribute_xtra); return rv;}staticsdp_media_t *media_dup(char **pp, sdp_media_t const *src, sdp_session_t *sdp){ char *p; sdp_media_t *m; p = *pp; STRUCT_DUP(p, m, src); m->m_next = NULL; STR_DUP(p, m, src, m_type_name); STR_DUP(p, m, src, m_proto_name); LST_DUP(p, m, src, m_format, list_dup); LST_DUP(p, m, src, m_rtpmaps, rtpmap_dup); STR_DUP(p, m, src, m_information); LST_DUP(p, m, src, m_connections, connection_dup); LST_DUP(p, m, src, m_bandwidths, bandwidth_dup); PTR_DUP(p, m, src, m_key, key_dup); LST_DUP(p, m, src, m_attributes, attribute_dup); /* note! we must not implicitly use 'src->m_session' as it might point to a temporary session */ m->m_session = sdp; m->m_rejected = src->m_rejected; m->m_mode = src->m_mode; assert((size_t)(p - *pp) == media_xtra(src)); *pp = p; return m;}#ifdef nomorestaticint media_xtra_ex(sdp_media_t const *m, sdp_connection_t const *c){ int rv = 0; for (; m; m = m->m_next) { rv += STRUCT_ALIGN(rv); rv += sizeof(*m); STR_XTRA(rv, m->m_type_name); STR_XTRA(rv, m->m_proto_name); LST_XTRA(rv, m->m_format, list_xtra); LST_XTRA(rv, m->m_rtpmaps, rtpmap_xtra); STR_XTRA(rv, m->m_information); if (c != m->m_connections) LST_XTRA(rv, m->m_connections, connection_xtra); LST_XTRA(rv, m->m_bandwidths, bandwidth_xtra); PTR_XTRA(rv, m->m_key, key_xtra); LST_XTRA(rv, m->m_attributes, attribute_xtra); } return rv;}staticsdp_media_t *media_dup_ex(char **pp, sdp_media_t const *src, sdp_session_t *sdp, sdp_connection_t *dst_c, sdp_connection_t const *src_c){ char *p; sdp_media_t *retval = NULL, *m, **mm = &retval; int xtra = media_xtra_ex(src, src_c); p = *pp; for (; src; src = src->m_next) { p += STRUCT_ALIGN(p); STRUCT_DUP(p, m, src); m->m_next = NULL; STR_DUP(p, m, src, m_type_name); STR_DUP(p, m, src, m_proto_name); LST_DUP(p, m, src, m_format, list_dup); LST_DUP(p, m, src, m_rtpmaps, rtpmap_dup); STR_DUP(p, m, src, m_information); if (src_c != src->m_connections) LST_DUP(p, m, src, m_connections, connection_dup); else m->m_connections = dst_c; LST_DUP(p, m, src, m_bandwidths, bandwidth_dup); PTR_DUP(p, m, src, m_key, key_dup); LST_DUP(p, m, src, m_attributes, attribute_dup); /* note! we must not implicitly use 'src->m_session' as it might point to a temporary session */ m->m_session = sdp; m->m_rejected = src->m_rejected; m->m_mode = src->m_mode; assert(m); *mm = m; mm = &m->m_next; } assert(p - *pp == xtra); *pp = p; return retval;}#endifstatic size_t media_xtra_all(sdp_media_t const *m){ size_t rv = 0; for (; m; m = m->m_next) { rv += STRUCT_ALIGN(rv); rv += media_xtra(m); } return rv;}staticsdp_media_t *media_dup_all(char **pp, sdp_media_t const *src, sdp_session_t *sdp){ char *p; sdp_media_t *retval = NULL, *m, **mm = &retval; p = *pp; for (; src; src = src->m_next) { p += STRUCT_ALIGN(p); m = media_dup(&p, src, sdp); assert(m); *mm = m; mm = &m->m_next; } *pp = p; return retval;}static size_t list_xtra(sdp_list_t const *l){ size_t rv = sizeof(*l); rv += strlen(l->l_text) + 1; return rv;}staticsdp_list_t *list_dup(char **pp, sdp_list_t const *src){ char *p; sdp_list_t *l; p = *pp; STRUCT_DUP(p, l, src); l->l_next = NULL; STR_DUP(p, l, src, l_text); assert((size_t)(p - *pp) == list_xtra(src)); *pp = p; return l;}static size_t rtpmap_xtra(sdp_rtpmap_t const *rm){ size_t rv = sizeof(*rm); STR_XTRA(rv, rm->rm_encoding); STR_XTRA(rv, rm->rm_params); STR_XTRA(rv, rm->rm_fmtp); return rv;}staticsdp_rtpmap_t *rtpmap_dup(char **pp, sdp_rtpmap_t const *src){ char *p; sdp_rtpmap_t *rm; p = *pp; STRUCT_DUP(p, rm, src); rm->rm_next = NULL; STR_DUP(p, rm, src, rm_encoding); STR_DUP(p, rm, src, rm_params); STR_DUP(p, rm, src, rm_fmtp); assert((size_t)(p - *pp) == rtpmap_xtra(src)); *pp = p; return rm;}/** Return total size of a list, including size of all nodes */static size_t list_xtra_all(xtra_f *xtra, void const *v){ size_t rv = 0; sdp_list_t const *l; for (l = v; l; l = l->l_next) { rv += STRUCT_ALIGN(rv); rv += xtra(l); } return rv;}staticvoid *list_dup_all(dup_f *dup, char **pp, void const *vsrc){ char *p; sdp_list_t const *src; sdp_list_t *retval = NULL, *l, **ll = &retval; p = *pp; for (src = vsrc; src; src = src->l_next) { p += STRUCT_ALIGN(p); l = dup(&p, src); assert(l); *ll = l; ll = &l->l_next; } *pp = p; return retval;}#if 0static size_t XXX_xtra(sdp_XXX_t const *YYY){ size_t rv = sizeof(*YYY); rv += strlen(YYY->YYY_encoding) + 1; if (YYY->YYY_params); rv += strlen(YYY->YYY_params) + 1; return rv;}staticsdp_XXX_t *XXX_dup(char **pp, sdp_XXX_t const *src){ char *p; sdp_XXX_t *YYY; p = *pp; ASSERT_STRUCT_ALIGN(p); YYY = memcpy(p, src, src->YYY_size); p += src->YYY_size; YYY->YYY_next = NULL; ZZZ *pp = p; return YYY;}#endifstatic size_t session_xtra(sdp_session_t const *sdp){ size_t rv = sizeof(*sdp); PTR_XTRA(rv, sdp->sdp_origin, origin_xtra); STR_XTRA(rv, sdp->sdp_subject); STR_XTRA(rv, sdp->sdp_information); STR_XTRA(rv, sdp->sdp_uri); LST_XTRA(rv, sdp->sdp_emails, list_xtra); LST_XTRA(rv, sdp->sdp_phones, list_xtra); LST_XTRA(rv, sdp->sdp_connection, connection_xtra); LST_XTRA(rv, sdp->sdp_bandwidths, bandwidth_xtra); LST_XTRA(rv, sdp->sdp_time, time_xtra); PTR_XTRA(rv, sdp->sdp_key, key_xtra); LST_XTRA(rv, sdp->sdp_attributes, attribute_xtra); STR_XTRA(rv, sdp->sdp_charset); MED_XTRA_ALL(rv, sdp->sdp_media); return rv;}staticsdp_session_t *session_dup(char **pp, sdp_session_t const *src){ char *p; sdp_session_t *sdp; p = *pp; STRUCT_DUP(p, sdp, src); sdp->sdp_next = NULL; PTR_DUP(p, sdp, src, sdp_origin, origin_dup); STR_DUP(p, sdp, src, sdp_subject); STR_DUP(p, sdp, src, sdp_information); STR_DUP(p, sdp, src, sdp_uri); LST_DUP(p, sdp, src, sdp_emails, list_dup); LST_DUP(p, sdp, src, sdp_phones, list_dup); LST_DUP(p, sdp, src, sdp_connection, connection_dup); LST_DUP(p, sdp, src, sdp_bandwidths, bandwidth_dup); LST_DUP(p, sdp, src, sdp_time, time_dup); PTR_DUP(p, sdp, src, sdp_key, key_dup); LST_DUP(p, sdp, src, sdp_attributes, attribute_dup); STR_DUP(p, sdp, src, sdp_charset); MED_DUP_ALL(p, sdp, src, sdp_media); assert((size_t)(p - *pp) == session_xtra(src)); *pp = p;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -