1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include "dlg_request.h"
- #include "dlg_mod_internal.h"
- /*
- * Send an initial request that will start a dialog with given route header
- * the dialog must be created before!!!
- */
- int request_outside(str* method, str* headers, str* body, dlg_t* dialog, transaction_cb cb, void* cbp)
- {
- uac_req_t uac_r;
- /* check parameters */
- if ((!dialog) || (!method)) goto err;
- if ((method->len < 0) || (!method->s)) goto err;
- if (dialog->state != DLG_NEW) {
- LOG(L_ERR, "req_within: Dialog is not in DLG_NEW state\n");
- goto err;
- }
- if (!dialog->hooks.next_hop) {
- /* FIXME: this is only experimental - hooks are calculated only when
- * next hop is not known */
- if (tmb.calculate_hooks(dialog) < 0) {
- LOG(L_ERR, "Error while calculating hooks\n");
- return -2;
- }
- }
- set_uac_req(&uac_r,
- method,
- headers,
- body,
- dialog,
- TMCB_LOCAL_COMPLETED,
- cb,
- cbp);
- return tmb.t_uac(&uac_r);
- err:
- /* if (cbp) shm_free(cbp);*/ /* !!! never do this automaticaly??? !!! */
- /* call the callback? Probably not because we can be in locked section
- * and the callback can try to lock it too. */
- return -1;
- }
- /*
- * Send a message within a dialog
- */
- int request_inside(str* method, str* headers, str* body, dlg_t* dialog, transaction_cb completion_cb, void* cbp)
- {
- uac_req_t uac_r;
- if (!method || !dialog) {
- LOG(L_ERR, "req_within: Invalid parameter value\n");
- goto err;
- }
- if (dialog->state != DLG_CONFIRMED) {
- LOG(L_ERR, "req_within: Dialog is not confirmed yet\n");
- goto err;
- }
- if ((method->len == 3) && (!memcmp("ACK", method->s, 3))) goto send;
- if ((method->len == 6) && (!memcmp("CANCEL", method->s, 6))) goto send;
- dialog->loc_seq.value++; /* Increment CSeq */
- send:
- set_uac_req(&uac_r,
- method,
- headers,
- body,
- dialog,
- TMCB_LOCAL_COMPLETED,
- completion_cb,
- cbp);
- return tmb.t_uac(&uac_r);
- err:
- /* if (cbp) shm_free(cbp); */ /* !!! never !!! */
- return -1;
- }
|