[svn-commits] wedhorn: branch wedhorn/skinny-session r383963 - /team/wedhorn/skinny-session...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Mar 27 03:21:31 CDT 2013


Author: wedhorn
Date: Wed Mar 27 03:21:28 2013
New Revision: 383963

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=383963
Log:
skinny: move destroy session to end of skinny_session, change return to break and check session on session start.

Modified:
    team/wedhorn/skinny-session/channels/chan_skinny.c

Modified: team/wedhorn/skinny-session/channels/chan_skinny.c
URL: http://svnview.digium.com/svn/asterisk/team/wedhorn/skinny-session/channels/chan_skinny.c?view=diff&rev=383963&r1=383962&r2=383963
==============================================================================
--- team/wedhorn/skinny-session/channels/chan_skinny.c (original)
+++ team/wedhorn/skinny-session/channels/chan_skinny.c Wed Mar 27 03:21:28 2013
@@ -7443,6 +7443,11 @@
 	int *bufaddr;
 	struct pollfd fds[1];
 
+	if (!s) {
+		ast_verb(3, "Bad Skinny Session\n");
+		return 0;
+	}
+
 	ast_verb(3, "Starting Skinny session from %s\n", ast_inet_ntoa(s->sin.sin_addr));
 
 	for (;;) {
@@ -7451,16 +7456,14 @@
 			if(time(&now) == -1) {
 				ast_log(LOG_ERROR, "error executing time(): %s\n", strerror(errno));
 				ast_verb(3, "Ending Skinny session from %s (bad input)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			}
 			timeout = (auth_timeout - (now - s->start)) * 1000;
 			if (timeout < 0) {
 				/* we have timed out */
 				ast_log(LOG_WARNING, "Skinny Client failed to authenticate in %d seconds\n", auth_timeout);
 				ast_verb(3, "Ending Skinny session from %s (bad input)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			}
 		} else {
 			timeout = keep_alive * 1100;
@@ -7476,8 +7479,7 @@
 			if (errno != EINTR) {
 				ast_log(LOG_WARNING, "Select returned error: %s\n", strerror(errno));
 				ast_verb(3, "Ending Skinny session from %s (bad input)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			}
 		} else if (res == 0) {
 			if (s->device) {
@@ -7487,8 +7489,7 @@
 			}
 			skinny_unregister(NULL, s);
 			ast_verb(3, "Ending Skinny session from %s (bad input)\n", ast_inet_ntoa(s->sin.sin_addr));
-			destroy_session(s);
-			return NULL;
+			break;
 		}
 
 		if (fds[0].revents) {
@@ -7503,8 +7504,7 @@
 				skinny_unregister(NULL, s);
 				ast_mutex_unlock(&s->lock);
 				ast_verb(3, "Ending Skinny session from %s (bad input)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			} else if (res != 4) {
 				ast_log(LOG_WARNING, "Skinny Client sent less data than expected.  Expected 4 but got %d.\n", res);
 				ast_mutex_unlock(&s->lock);
@@ -7514,8 +7514,7 @@
 					skinny_unregister(NULL, s);
 				}
 				ast_verb(3, "Ending Skinny session from %s (bad input)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			}
 
 			bufaddr = (int *)s->inbuf;
@@ -7524,8 +7523,7 @@
 				ast_log(LOG_WARNING, "Skinny Client sent invalid data.\n");
 				ast_mutex_unlock(&s->lock);
 				ast_verb(3, "Ending Skinny session from %s (bad input)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			}
 			if (dlen+8 > sizeof(s->inbuf)) {
 				ast_log(LOG_WARNING, "Skinny packet too large (%d bytes), max length(%d bytes)\n", dlen+8, SKINNY_MAX_PACKET);
@@ -7538,21 +7536,18 @@
 			if (res < 0) {
 				ast_log(LOG_WARNING, "read() returned error: %s\n", strerror(errno));
 				ast_verb(3, "Ending Skinny session from %s (bad input)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			} else if (res != (dlen+4)) {
 				ast_log(LOG_WARNING, "Skinny Client sent less data than expected.\n");
 				ast_verb(3, "Ending Skinny session from %s (bad input)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			}
 		}
 
 		if (res > 0) {
 			if (!(req = ast_calloc(1, SKINNY_MAX_PACKET))) {
 				ast_verb(3, "Ending Skinny session from %s (failed parse)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			}
 
 			ast_mutex_lock(&s->lock);
@@ -7566,22 +7561,19 @@
 				ast_log(LOG_ERROR, "Event Message is NULL from socket %d, This is bad\n", s->fd);
 				ast_free(req);
 				ast_verb(3, "Ending Skinny session from %s (failed parse)\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
+				break;
 			}
 
 			res = handle_message(req, s);
 			if (res < 0) {
 				ast_verb(3, "Ending Skinny session from %s\n", ast_inet_ntoa(s->sin.sin_addr));
-				destroy_session(s);
-				return NULL;
-			}
-		}
-	}
+				break;
+			}
+		}
+	}
+
 	ast_debug(3, "Skinny Session returned: %s\n", strerror(errno));
-
-	if (s)
-		destroy_session(s);
+	destroy_session(s);
 
 	return 0;
 }




More information about the svn-commits mailing list