[asterisk-commits] file: trunk r369858 - /trunk/main/stun.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Jul 9 17:38:29 CDT 2012


Author: file
Date: Mon Jul  9 17:38:25 2012
New Revision: 369858

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=369858
Log:
When receiving a STUN binding request send one out as the Google Talk client uses this as a method to determine if the remote party is still reachable or not.

Failure to do this results in the Google Talk client ignoring RTP packets after a specific period of time. This is also done as a result of receiving a STUN binding request so that the username information can be used from the inbound request, thus not requiring it to be stored on a per candidate basis.

(closes issue ASTERISK-20107)
Reported by: Malcolm Davenport

Modified:
    trunk/main/stun.c

Modified: trunk/main/stun.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/stun.c?view=diff&rev=369858&r1=369857&r2=369858
==============================================================================
--- trunk/main/stun.c (original)
+++ trunk/main/stun.c Mon Jul  9 17:38:25 2012
@@ -328,6 +328,7 @@
 		struct stun_header *resp = (struct stun_header *)respdata;
 		int resplen = 0;	/* len excluding header */
 		int respleft = sizeof(respdata) - sizeof(struct stun_header);
+		char combined[33];
 
 		resp->id = hdr->id;
 		resp->msgtype = 0;
@@ -338,12 +339,16 @@
 			if (stundebug)
 				ast_verbose("STUN Bind Request, username: %s\n",
 					    st.username ? st.username : "<none>");
-			if (st.username)
+			if (st.username) {
 				append_attr_string(&attr, STUN_USERNAME, st.username, &resplen, &respleft);
+				snprintf(combined, sizeof(combined), "%16s%16s", st.username + 16, st.username);
+			}
+
 			append_attr_address(&attr, STUN_MAPPED_ADDRESS, src, &resplen, &respleft);
 			resp->msglen = htons(resplen);
 			resp->msgtype = htons(STUN_BINDRESP);
 			stun_send(s, src, resp);
+			ast_stun_request(s, src, combined, NULL);
 			ret = AST_STUN_ACCEPT;
 			break;
 		default:




More information about the asterisk-commits mailing list