[asterisk-commits] branch oej/02-labarea r20842 - in /team/oej/02-labarea: ./ channels/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Sun Apr 16 23:57:59 MST 2006


Author: oej
Date: Mon Apr 17 01:57:53 2006
New Revision: 20842

URL: http://svn.digium.com/view/asterisk?rev=20842&view=rev
Log:
Try to separate requests with different branches

Modified:
    team/oej/02-labarea/Makefile
    team/oej/02-labarea/channels/chan_sip.c

Modified: team/oej/02-labarea/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/Makefile?rev=20842&r1=20841&r2=20842&view=diff
==============================================================================
--- team/oej/02-labarea/Makefile (original)
+++ team/oej/02-labarea/Makefile Mon Apr 17 01:57:53 2006
@@ -57,7 +57,7 @@
 #K6OPT  = -DK6OPT
 
 # Tell gcc to optimize the code
-OPTIMIZE+=-O6
+OPTIMIZE+=#-O6
 else
   # Stack backtraces, while useful for debugging, are incompatible with optimizations
   ifeq (${OSARCH},Linux)

Modified: team/oej/02-labarea/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/channels/chan_sip.c?rev=20842&r1=20841&r2=20842&view=diff
==============================================================================
--- team/oej/02-labarea/channels/chan_sip.c (original)
+++ team/oej/02-labarea/channels/chan_sip.c Mon Apr 17 01:57:53 2006
@@ -514,6 +514,11 @@
 	int method;		/*!< Method of this request */
 	int lines;		/*!< SDP Content */
 	unsigned int flags;	/*!< SIP_PKT Flags for this packet */
+	const char *callid;	/*!< Call-id of this packet */
+	const char *via;	/*!< First via header of this packet */
+	const char *from;	/*!< From header */
+	const char *to;		/*!< To header */
+	const char *cseq;	/*!< Cseq header */
 	char *header[SIP_MAX_HEADERS];
 	char *line[SIP_MAX_LINES];
 	char data[SIP_MAX_PACKET];
@@ -3395,12 +3400,13 @@
 	char *tag = "";	/* note, tag is never NULL */
 	char totag[128];
 	char fromtag[128];
-	const char *callid = get_header(req, "Call-ID");
-	const char *from = get_header(req, "From");
-	const char *to = get_header(req, "To");
-	const char *cseq = get_header(req, "Cseq");
-
-	if (!callid || !to || !from || !cseq)		/* Call-ID, to, from and Cseq are required by RFC 3261. (Max-forwards and via too - ignored now) */
+	req->callid = get_header(req, "Call-ID");
+	req->from = get_header(req, "From");
+	req->to = get_header(req, "To");
+	req->cseq = get_header(req, "Cseq");
+	req->via = get_header(req, "Via");
+
+	if (!req->callid || !req->to || !req->from || !req->cseq)	/* Call-ID, to, from and Cseq are required by RFC 3261. (Max-forwards and via too - ignored now) */
 		return NULL;	/* Invalid packet */
 
 	if (pedanticsipchecking) {
@@ -3417,17 +3423,18 @@
 		tag = (req->method == SIP_RESPONSE) ? totag : fromtag;
 
 		if (option_debug > 4 )
-			ast_log(LOG_DEBUG, "= Looking for  Call ID: %s (Checking %s) --From tag %s --To-tag %s  \n", callid, req->method==SIP_RESPONSE ? "To" : "From", fromtag, totag);
+			ast_log(LOG_DEBUG, "= Looking for  Call ID: %s (Checking %s) --From tag %s --To-tag %s  \n", req->callid, req->method==SIP_RESPONSE ? "To" : "From", fromtag, totag);
 	}
 
 	ast_mutex_lock(&iflock);
 	for (p = iflist; p; p = p->next) {
 		/* In pedantic, we do not want packets with bad syntax to be connected to a PVT */
 		int found = FALSE;
+
 		if (req->method == SIP_REGISTER)
-			found = (!strcmp(p->callid, callid));
+			found = (!strcmp(p->callid, req->callid));
 		else 
-			found = (!strcmp(p->callid, callid) && 
+			found = (!strcmp(p->callid, req->callid) && 
 			(!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) ;
 
 		if (option_debug > 4)
@@ -3450,15 +3457,15 @@
 
 		if (found) {
 			/* Found the call */
-			ast_mutex_lock(&p->lock);
-			ast_mutex_unlock(&iflock);
-			return p;
-		}
-	}
-	ast_mutex_unlock(&iflock);
-	/* Allocate new call */
-	if ((p = sip_alloc(callid, sin, 1, intended_method)))
-		ast_mutex_lock(&p->lock);
+			ast_mutex_lock(&p->lock);	/* Lock this PVT while we are working on it */
+			ast_mutex_unlock(&iflock);	/* Unlock the interface list */
+			return p;			/* Return with this PVT */
+		}
+	}
+	ast_mutex_unlock(&iflock);			/* Unlock the interface list */
+
+	if ((p = sip_alloc(req->callid, sin, 1, intended_method)))	/* Allocate new call */
+		ast_mutex_lock(&p->lock);		/* Lock this new PVT while we are in action */
 	return p;
 }
 
@@ -4264,8 +4271,8 @@
 		ot = newto;
 	}
 	add_header(resp, "To", ot);
-	copy_header(resp, req, "Call-ID");
-	copy_header(resp, req, "CSeq");
+	add_header(resp, "Call-ID", req->callid);
+	add_header(resp, "Cseq", req->cseq);
 	add_header(resp, "User-Agent", global_useragent);
 	add_header(resp, "Allow", ALLOWED_METHODS);
 	if (msg[0] == '2' && (p->method == SIP_SUBSCRIBE || p->method == SIP_REGISTER)) {
@@ -11506,7 +11513,7 @@
 	memset(&resp, 0, sizeof(resp));
 
 	/* Get Method and Cseq */
-	cseq = get_header(req, "Cseq");
+	cseq = req->cseq;
 	cmd = req->header[0];
 
 	/* Must have Cseq */
@@ -11573,6 +11580,12 @@
 	p->method = req->method;	/* Find out which SIP method they are using */
 	if (option_debug > 3)
 		ast_log(LOG_DEBUG, "**** Received %s (%d) - Command in SIP %s\n", sip_methods[p->method].text, sip_methods[p->method].id, cmd); 
+
+	/* Check for loop in INVITE */
+	if (p->icseq && (p->icseq > seqno) && req->method == SIP_INVITE) {
+		//SKREP
+		ast_log(LOG_DEBUG, "**** Our initial VIA %s - This req VIA %s\n", p->initreq.via, req->via);
+	}
 
 	if (p->icseq && (p->icseq > seqno)) {
 		if (option_debug)



More information about the asterisk-commits mailing list