/* * Send a transactional request, no dialogs involved */ int request(str* m, str* ruri, str* to, str* from, str* h, str* b, str *oburi, transaction_cb cb, void* cbp,release_tmcb_param release_func) { str callid, fromtag; dlg_t* dialog; int res; if (check_params(m, to, from, &dialog) < 0) goto err; generate_callid(&callid); generate_fromtag(&fromtag, &callid); if (new_dlg_uac(&callid, &fromtag, DEFAULT_CSEQ, from, to, &dialog) < 0) { LM_ERR("failed to create temporary dialog\n"); goto err; } if (ruri) { dialog->rem_target.s = ruri->s; dialog->rem_target.len = ruri->len; dialog->hooks.request_uri = &dialog->rem_target; } if (oburi && oburi->s) dialog->hooks.next_hop = oburi; w_calculate_hooks(dialog); res = t_uac(m, h, b, dialog, cb, cbp, release_func); dialog->rem_target.s = 0; free_dlg(dialog); return res; err: return -1; }
/* * Send a transactional request, no dialogs involved */ int request(str* m, str* ruri, str* to, str* from, str* h, str* b, transaction_cb c, void* cp) { str callid, fromtag; dlg_t* dialog; int res; if (check_params(m, to, from, &dialog) < 0) goto err; generate_callid(&callid); generate_fromtag(&fromtag, &callid); if (new_dlg_uac(&callid, &fromtag, DEFAULT_CSEQ, from, to, &dialog) < 0) { LOG(L_ERR, "req_outside(): Error while creating temorary dialog\n"); goto err; } if (ruri) { dialog->rem_target.s = ruri->s; dialog->rem_target.len = ruri->len; dialog->hooks.request_uri = &dialog->rem_target; } res = t_uac(m, h, b, dialog, c, cp); dialog->rem_target.s = 0; free_dlg(dialog); return res; err: if (cp) shm_free(cp); return -1; }
/* * Send an initial request that will start a dialog * WARNING: writes uac_r->dialog */ int req_outside(uac_req_t *uac_r, str* ruri, str* to, str* from, str *next_hop) { str callid, fromtag; if (check_params(uac_r, to, from) < 0) goto err; generate_callid(&callid); generate_fromtag(&fromtag, &callid); if (new_dlg_uac(&callid, &fromtag, DEFAULT_CSEQ, from, to, &uac_r->dialog) < 0) { LOG(L_ERR, "req_outside(): Error while creating new dialog\n"); goto err; } if (ruri) { uac_r->dialog->rem_target.s = ruri->s; uac_r->dialog->rem_target.len = ruri->len; /* hooks will be set from w_calculate_hooks */ } if (next_hop) uac_r->dialog->dst_uri = *next_hop; w_calculate_hooks(uac_r->dialog); return t_uac(uac_r); err: /* callback parameter must be freed outside of tm module if (cbp) shm_free(cbp); */ return -1; }
/* * Send a transactional request, no dialogs involved * WARNING: writes uac_r->dialog */ int request(uac_req_t *uac_r, str* ruri, str* to, str* from, str *next_hop) { str callid, fromtag; dlg_t* dialog; int res; if (check_params(uac_r, to, from) < 0) goto err; if (uac_r->callid == NULL || uac_r->callid->len <= 0) generate_callid(&callid); else callid = *uac_r->callid; generate_fromtag(&fromtag, &callid); if (new_dlg_uac(&callid, &fromtag, DEFAULT_CSEQ, from, to, &dialog) < 0) { LOG(L_ERR, "request(): Error while creating temporary dialog\n"); goto err; } if (ruri) { dialog->rem_target.s = ruri->s; dialog->rem_target.len = ruri->len; /* hooks will be set from w_calculate_hooks */ } if (next_hop) dialog->dst_uri = *next_hop; w_calculate_hooks(dialog); /* WARNING: * to be clean it should be called * set_dlg_target(dialog, ruri, next_hop); * which sets both uris if given [but it duplicates them in shm!] * * but in this case the _ruri parameter in set_dlg_target * must be optional (it is needed now) and following hacks * dialog->rem_target.s = 0; * dialog->dst_uri.s = 0; * before freeing dialog here must be removed */ uac_r->dialog = dialog; if(uac_r->ssock!=NULL && uac_r->ssock->len>0 && uac_r->dialog->send_sock==NULL) { /* set local send socket */ uac_r->dialog->send_sock = lookup_local_socket(uac_r->ssock); } res = t_uac(uac_r); dialog->rem_target.s = 0; dialog->dst_uri.s = 0; free_dlg(dialog); uac_r->dialog = 0; return res; err: /* callback parameter must be freed outside of tm module if (cp) shm_free(cp); */ return -1; }
/* * Send a transactional request, no dialogs involved */ int request(str* m, str* ruri, str* to, str* from, str* h, str* b, str *next_hop, transaction_cb c, void* cp) { str callid, fromtag; dlg_t* dialog; int res; if (check_params(m, to, from, &dialog) < 0) goto err; generate_callid(&callid); generate_fromtag(&fromtag, &callid); if (new_dlg_uac(&callid, &fromtag, DEFAULT_CSEQ, from, to, &dialog) < 0) { LOG(L_ERR, "request(): Error while creating temporary dialog\n"); goto err; } if (ruri) { dialog->rem_target.s = ruri->s; dialog->rem_target.len = ruri->len; /* hooks will be set from w_calculate_hooks */ } if (next_hop) dialog->dst_uri = *next_hop; w_calculate_hooks(dialog); /* WARNING: * to be clean it should be called * set_dlg_target(dialog, ruri, next_hop); * which sets both uris if given [but it duplicates them in shm!] * * but in this case the _ruri parameter in set_dlg_target * must be optional (it is needed now) and following hacks * dialog->rem_target.s = 0; * dialog->dst_uri.s = 0; * before freeing dialog here must be removed */ res = t_uac(m, h, b, dialog, c, cp); dialog->rem_target.s = 0; dialog->dst_uri.s = 0; free_dlg(dialog); return res; err: if (cp) shm_free(cp); return -1; }
/* * Send an initial request that will start a dialog */ int req_outside(str* method, str* to, str* from, str* headers, str* body, dlg_t** dialog, transaction_cb cb, void* cbp) { str callid, fromtag; if (check_params(method, to, from, dialog) < 0) goto err; generate_callid(&callid); generate_fromtag(&fromtag, &callid); if (new_dlg_uac(&callid, &fromtag, DEFAULT_CSEQ, from, to, dialog) < 0) { LOG(L_ERR, "req_outside(): Error while creating new dialog\n"); goto err; } return t_uac(method, headers, body, *dialog, cb, cbp); err: if (cbp) shm_free(cbp); return -1; }
/* * Send an initial request that will start a dialog */ int req_outside(str* method, str* to, str* from, str* headers, str* body, dlg_t** dialog, transaction_cb cb, void* cbp,release_tmcb_param release_func) { str callid, fromtag; if (check_params(method, to, from, dialog) < 0) goto err; generate_callid(&callid); generate_fromtag(&fromtag, &callid); if (new_dlg_uac(&callid, &fromtag, DEFAULT_CSEQ, from, to, dialog) < 0) { LM_ERR("failed to create new dialog\n"); goto err; } return t_uac(method, headers, body, *dialog, cb, cbp, release_func); err: return -1; }