prev = cur;
cur = cur->next;
}
+ ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
return res;
}
}
-#if 0
-static int sip_bridge(struct ast_channel *c0, struct ast_channel *c1, int flags, struct ast_frame **fo, struct ast_channel **rc)
-{
- struct sip_pvt *p0, *p1;
- struct ast_frame *f;
- struct ast_channel *who, *cs[3];
- int to;
-
- /* if need DTMF, cant native bridge */
- if (flags & (AST_BRIDGE_DTMF_CHANNEL_0 | AST_BRIDGE_DTMF_CHANNEL_1))
- return -2;
- ast_pthread_mutex_lock(&c0->lock);
- ast_pthread_mutex_lock(&c1->lock);
- p0 = c0->pvt->pvt;
- p1 = c1->pvt->pvt;
- ast_log(LOG_DEBUG, "Reinvite? %s: %s, %s: %s\n", c0->name, p0->canreinvite ? "yes" : "no", c1->name, p1->canreinvite ? "yes" : "no");
- if (!p0->canreinvite || !p1->canreinvite) {
- /* Not gonna support reinvite */
- ast_pthread_mutex_unlock(&c0->lock);
- ast_pthread_mutex_unlock(&c1->lock);
- return -2;
- }
- transmit_reinvite_with_sdp(p0, p1->rtp);
- transmit_reinvite_with_sdp(p1, p0->rtp);
- ast_pthread_mutex_unlock(&c0->lock);
- ast_pthread_mutex_unlock(&c1->lock);
- cs[0] = c0;
- cs[1] = c1;
- cs[2] = NULL;
- for (;;) {
- if ((c0->pvt->pvt != p0) ||
- (c1->pvt->pvt != p1) ||
- (c0->masq || c0->masqr || c1->masq || c1->masqr)) {
- ast_log(LOG_DEBUG, "Oooh, something is weird, backing out\n");
- if (c0->pvt->pvt == p0)
- transmit_reinvite_with_sdp(p0, NULL);
- if (c1->pvt->pvt == p1)
- transmit_reinvite_with_sdp(p1, NULL);
- /* Tell it to try again later */
- return -3;
- }
- to = -1;
- who = ast_waitfor_n(cs, 2, &to);
- if (!who) {
- ast_log(LOG_DEBUG, "Ooh, empty read...\n");
- continue;
- }
- f = ast_read(who);
- if (!f || ((f->frametype == AST_FRAME_DTMF) &&
- (((who == c0) && (flags & AST_BRIDGE_DTMF_CHANNEL_0)) ||
- ((who == c1) && (flags & AST_BRIDGE_DTMF_CHANNEL_1))))) {
- *fo = f;
- *rc = who;
- ast_log(LOG_DEBUG, "Oooh, got a %s\n", f ? "digit" : "hangup");
- if (c0->pvt->pvt == p0 && !c0->_softhangup)
- transmit_reinvite_with_sdp(p0, NULL);
- if (c1->pvt->pvt == p1 && !c1->_softhangup)
- transmit_reinvite_with_sdp(p1, NULL);
- /* That's all we needed */
- return 0;
- } else
- ast_frfree(f);
- /* Swap priority not that it's a big deal at this point */
- cs[2] = cs[0];
- cs[0] = cs[1];
- cs[1] = cs[2];
-
- }
- return -1;
-}
-#endif
static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
{
struct sip_request resp;
reqprep(&resp, p, "INVITE", 1);
add_sdp(&resp, p, rtp);
- return send_response(p, &resp, 1, p->ocseq);
+ return send_request(p, &resp, 1, p->ocseq);
}
static void initreqprep(struct sip_request *req, struct sip_pvt *p, char *cmd, char *vxml_url)
struct sip_pvt *p;
p = chan->pvt->pvt;
if (p) {
+ p->outgoing = 1;
transmit_reinvite_with_sdp(p, rtp);
return 0;
}