辗转好久找到了有效的方法,如下:
osip_message_t *res;
i=osip_message_init(&res);
osip_message_set_version(res, osip_strdup("SIP/2.0"));
osip_message_set_status_code(res, 401);
osip_message_set_reason_phrase (res, osip_strdup("Unauthorized"));
osip_from_clone(req->from, &res->from);
osip_to_clone(req->to, &res->to);
osip_call_id_clone(req->call_id, &res->call_id);
osip_contact_t *contact = nullptr;
osip_message_get_contact(req, 0, &contact);
osip_uri_clone(osip_contact_get_url(contact), &res->req_uri);
osip_cseq_clone(req->cseq, &(res->cseq));
char *dest=NULL;
size_t length=0;
i = osip_message_to_str(res, &dest, &length);
if (i!=0) { fprintf(stderr, "cannot get printable message : %d\n", i); return -1; }
printf("message:\n%s\n", dest);
osip_free(dest);