int osip_call_info_clone (const osip_call_info_t * ctt, osip_call_info_t ** dest) { int i; osip_call_info_t *ct; *dest = NULL; if (ctt == NULL) return OSIP_BADPARAMETER; if (ctt->element == NULL) return OSIP_BADPARAMETER; i = osip_call_info_init (&ct); if (i != 0) /* allocation failed */ return i; ct->element = osip_strdup (ctt->element); if (ct->element==NULL) { osip_call_info_free (ct); return OSIP_NOMEM; } i = osip_list_clone(&ctt->gen_params, &ct->gen_params, &osip_generic_param_clone); if (i != 0) { osip_call_info_free (ct); return i; } *dest = ct; return OSIP_SUCCESS; }
int osip_message_set_call_info (osip_message_t * sip, const char *hvalue) { osip_call_info_t *call_info; int i; if (hvalue == NULL || hvalue[0] == '\0') return 0; i = osip_call_info_init (&call_info); if (i != 0) return -1; i = osip_call_info_parse (call_info, hvalue); if (i != 0) /* allocation failed */ { osip_call_info_free (call_info); return -1; } sip->message_property = 2; osip_list_add (sip->call_infos, call_info, -1); return 0; }
int osip_call_info_clone (const osip_call_info_t * ctt, osip_call_info_t ** dest) { int i; osip_call_info_t *ct; *dest = NULL; if (ctt == NULL) return -1; if (ctt->element == NULL) return -1; i = osip_call_info_init (&ct); if (i != 0) /* allocation failed */ return -1; ct->element = osip_strdup (ctt->element); { int pos = 0; osip_generic_param_t *u_param; osip_generic_param_t *dest_param; while (!osip_list_eol (ctt->gen_params, pos)) { u_param = (osip_generic_param_t *) osip_list_get (ctt->gen_params, pos); i = osip_generic_param_clone (u_param, &dest_param); if (i != 0) { osip_call_info_free (ct); return -1; } osip_list_add (ct->gen_params, dest_param, -1); pos++; } } *dest = ct; return 0; }