int AddSupportedMethods(osip_message_t *msgPtr) { osip_message_set_allow(msgPtr, "INVITE"); osip_message_set_allow(msgPtr, "INFO"); osip_message_set_allow(msgPtr, "ACK"); osip_message_set_allow(msgPtr, "CANCEL"); osip_message_set_allow(msgPtr, "BYE"); return 0; }
int _eXosip_build_response_default (osip_message_t ** dest, osip_dialog_t * dialog, int status, osip_message_t * request) { osip_generic_param_t *tag; osip_message_t *response; int pos; int i; *dest = NULL; if (request == NULL) return -1; i = osip_message_init (&response); if (i != 0) return -1; /* initialise osip_message_t structure */ /* yet done... */ response->sip_version = (char *) osip_malloc (8 * sizeof (char)); sprintf (response->sip_version, "SIP/2.0"); osip_message_set_status_code (response, status); /* handle some internal reason definitions. */ if (MSG_IS_NOTIFY (request) && status == 481) { response->reason_phrase = osip_strdup ("Subcription Does Not Exist"); } else if (MSG_IS_SUBSCRIBE (request) && status == 202) { response->reason_phrase = osip_strdup ("Accepted subscription"); } else { response->reason_phrase = osip_strdup (osip_message_get_reason (status)); if (response->reason_phrase == NULL) { if (response->status_code == 101) response->reason_phrase = osip_strdup ("Dialog Establishement"); else response->reason_phrase = osip_strdup ("Unknown code"); } response->req_uri = NULL; response->sip_method = NULL; } i = osip_to_clone (request->to, &(response->to)); if (i != 0) goto grd_error_1; i = osip_to_get_tag (response->to, &tag); if (i != 0) { /* we only add a tag if it does not already contains one! */ if ((dialog != NULL) && (dialog->local_tag != NULL)) /* it should contain the local TAG we created */ { osip_to_set_tag (response->to, osip_strdup (dialog->local_tag)); } else { if (status != 100) osip_to_set_tag (response->to, osip_to_tag_new_random ()); } } i = osip_from_clone (request->from, &(response->from)); if (i != 0) goto grd_error_1; pos = 0; while (!osip_list_eol (request->vias, pos)) { osip_via_t *via; osip_via_t *via2; via = (osip_via_t *) osip_list_get (request->vias, pos); i = osip_via_clone (via, &via2); if (i != -0) goto grd_error_1; osip_list_add (response->vias, via2, -1); pos++; } i = osip_call_id_clone (request->call_id, &(response->call_id)); if (i != 0) goto grd_error_1; i = osip_cseq_clone (request->cseq, &(response->cseq)); if (i != 0) goto grd_error_1; if (MSG_IS_SUBSCRIBE (request)) { osip_header_t *exp; osip_header_t *evt_hdr; osip_message_header_get_byname (request, "event", 0, &evt_hdr); if (evt_hdr != NULL && evt_hdr->hvalue != NULL) osip_message_set_header (response, "Event", evt_hdr->hvalue); else osip_message_set_header (response, "Event", "presence"); i = osip_message_get_expires (request, 0, &exp); if (exp == NULL) { osip_header_t *cp; i = osip_header_clone (exp, &cp); if (cp != NULL) osip_list_add (response->headers, cp, 0); } } osip_message_set_allow (response, "INVITE"); osip_message_set_allow (response, "ACK"); osip_message_set_allow (response, "OPTIONS"); osip_message_set_allow (response, "CANCEL"); osip_message_set_allow (response, "BYE"); osip_message_set_allow (response, "SUBSCRIBE"); osip_message_set_allow (response, "NOTIFY"); osip_message_set_allow (response, "MESSAGE"); osip_message_set_allow (response, "INFO"); osip_message_set_allow (response, "REFER"); osip_message_set_allow (response, "UPDATE"); *dest = response; return 0; grd_error_1: osip_message_free (response); return -1; }