From: <do...@us...> - 2008-05-05 05:07:03
|
Revision: 1429 http://iaxclient.svn.sourceforge.net/iaxclient/?rev=1429&view=rev Author: dohpaz Date: 2008-05-04 22:07:10 -0700 (Sun, 04 May 2008) Log Message: ----------- Additional prophylactic code to prevent certain problems. Modified Paths: -------------- branches/team/elbunce/iaxclient/lib/iaxclient_lib.c Modified: branches/team/elbunce/iaxclient/lib/iaxclient_lib.c =================================================================== --- branches/team/elbunce/iaxclient/lib/iaxclient_lib.c 2008-05-04 15:33:56 UTC (rev 1428) +++ branches/team/elbunce/iaxclient/lib/iaxclient_lib.c 2008-05-05 05:07:10 UTC (rev 1429) @@ -1483,7 +1483,7 @@ EXPORT void iaxc_setup_call_transfer(int sourceCallNo, int targetCallNo) { - if ( sourceCallNo < 0 || targetCallNo < 0 || + if ( ( sourceCallNo < 0 ) || ( targetCallNo < 0 ) || !(calls[sourceCallNo].state & IAXC_CALL_STATE_ACTIVE) || !(calls[targetCallNo].state & IAXC_CALL_STATE_ACTIVE) ) return; @@ -1491,12 +1491,15 @@ iax_setup_transfer(calls[sourceCallNo].session, calls[targetCallNo].session); } +/* + iaxc_dump_one_call dumps \a callNo. Expects the routine calling it to have + obtained the iaxc lock. + */ static void iaxc_dump_one_call(int callNo) { - if ( callNo < 0 ) + if ( ( callNo < 0 ) || ( callNo >= max_calls ) || + ( calls[callNo].state == IAXC_CALL_STATE_FREE ) ) return; - if ( calls[callNo].state == IAXC_CALL_STATE_FREE ) - return; iax_hangup(calls[callNo].session,"Dumped Call"); iaxci_usermsg(IAXC_STATUS, "Hanging up call %d", callNo); @@ -1515,12 +1518,9 @@ EXPORT void iaxc_dump_call_number( int callNo ) { - if ( ( callNo >= 0 ) && ( callNo < max_calls ) ) - { - get_iaxc_lock(); - iaxc_dump_one_call(callNo); - put_iaxc_lock(); - } + get_iaxc_lock(); + iaxc_dump_one_call(callNo); + put_iaxc_lock(); } EXPORT void iaxc_dump_call(void) @@ -1543,13 +1543,14 @@ EXPORT void iaxc_reject_call_number( int callNo ) { - if ( ( callNo >= 0 ) && ( callNo < max_calls ) ) - { - get_iaxc_lock(); - iax_reject(calls[callNo].session, "Call rejected manually."); - iaxc_clear_call(callNo); - put_iaxc_lock(); - } + if ( ( callNo < 0 ) || ( callNo >= max_calls ) || + ( calls[callNo].state == IAXC_CALL_STATE_FREE ) ) + return; + + get_iaxc_lock(); + iax_reject(calls[callNo].session, "Call rejected manually."); + iaxc_clear_call(callNo); + put_iaxc_lock(); } EXPORT void iaxc_send_dtmf(char digit) @@ -1567,21 +1568,18 @@ { if ( selected_call >= 0 ) { - get_iaxc_lock(); - if ( calls[selected_call].state & IAXC_CALL_STATE_ACTIVE ) - iax_send_text(calls[selected_call].session, text); - put_iaxc_lock(); + iaxc_send_text_call(selected_call, text); } } EXPORT void iaxc_send_text_call(int callNo, const char * text) { - if ( callNo < 0 || !(calls[callNo].state & IAXC_CALL_STATE_ACTIVE) ) + if ( ( callNo < 0 ) || ( callNo >= max_calls ) || + ( !(calls[callNo].state & IAXC_CALL_STATE_ACTIVE) ) ) return; get_iaxc_lock(); - if ( calls[callNo].state & IAXC_CALL_STATE_ACTIVE ) - iax_send_text(calls[callNo].session, text); + iax_send_text(calls[callNo].session, text); put_iaxc_lock(); } @@ -1942,16 +1940,30 @@ EXPORT int iaxc_quelch(int callNo, int MOH) { - struct iax_session *session = calls[callNo].session; - if ( !session ) + int ret; + + if ( ( callNo < 0 ) || ( callNo >= max_calls ) || + !( calls[callNo].state & IAXC_CALL_STATE_ACTIVE ) ) return -1; - return iax_quelch_moh(session, MOH); + get_iaxc_lock(); + ret = iax_quelch_moh(calls[callNo].session, MOH); + put_iaxc_lock(); + return ret; } -EXPORT int iaxc_unquelch(int call) +EXPORT int iaxc_unquelch(int callNo) { - return iax_unquelch(calls[call].session); + int ret; + + if ( ( callNo < 0 ) || ( callNo >= max_calls ) || + !( calls[callNo].state & IAXC_CALL_STATE_ACTIVE ) ) + return -1; + + get_iaxc_lock(); + ret = iax_unquelch(calls[callNo].session); + put_iaxc_lock(); + return ret; } EXPORT int iaxc_mic_boost_get( void ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |