[commit] r4324 - in freeswitch/trunk/libs/iax: . src
Author: mikej Date: Mon Feb 19 11:56:48 2007 New Revision: 4324 Added: freeswitch/trunk/libs/iax/.update Modified: freeswitch/trunk/libs/iax/src/iax.c Log: don't create new iax sessions when we shouldn't Added: freeswitch/trunk/libs/iax/.update ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/iax/.update Mon Feb 19 11:56:48 2007 @@ -0,0 +1 @@ +Mon Feb 19 12:03:56 EST 2007 \ No newline at end of file Modified: freeswitch/trunk/libs/iax/src/iax.c ============================================================================== --- freeswitch/trunk/libs/iax/src/iax.c (original) +++ freeswitch/trunk/libs/iax/src/iax.c Mon Feb 19 11:56:48 2007 @@ -2916,17 +2916,29 @@ struct iax_session *session; if (ntohs(fh->scallno) & IAX_FLAG_FULL) { + int subclass = uncompress_subclass(fh->csub); + int makenew = 0; + /* Full size header */ if (len < sizeof(struct ast_iax2_full_hdr)) { DEBU(G "Short header received from %s\n", inet_ntoa(sin->sin_addr)); IAXERROR "Short header received from %s\n", inet_ntoa(sin->sin_addr)); } + /* Only allow it to make new sessions on types where that makes sense */ + if ((fh->type == AST_FRAME_IAX) && ((subclass == IAX_COMMAND_NEW) || + (subclass == IAX_COMMAND_POKE) || + (subclass == IAX_COMMAND_REGREL) || + (subclass == IAX_COMMAND_REGREQ))) { + makenew = 1; + } + /* We have a full header, process appropriately */ - session = iax_find_session(sin, ntohs(fh->scallno) & ~IAX_FLAG_FULL, ntohs(fh->dcallno) & ~IAX_FLAG_RETRANS, 1); + session = iax_find_session(sin, ntohs(fh->scallno) & ~IAX_FLAG_FULL, ntohs(fh->dcallno) & ~IAX_FLAG_RETRANS, makenew); if (!session) session = iax_txcnt_session(fh, len-sizeof(struct ast_iax2_full_hdr), sin, ntohs(fh->scallno) & ~IAX_FLAG_FULL, ntohs(fh->dcallno) & ~IAX_FLAG_RETRANS); if (session) return iax_header_to_event(session, fh, len - sizeof(struct ast_iax2_full_hdr), sin); + /* if we get here, the frame was invalid for some reason, we should probably send IAX_COMMAND_INVAL (as long as the subclass was not already IAX_COMMAND_INVAL) */ DEBU(G "No session?\n"); return NULL; } else {
participants (1)
-
Freeswitch SVN