Modularizando o src
Dependencies: EALib EthernetInterface_vz mbed-rtos mbed
Fork of header_main_colinas_V0-20-09-14 by
Diff: sip.cpp
- Revision:
- 89:0fe315117b00
- Parent:
- 87:679ee0d594a9
- Child:
- 91:c2a86b1f8aaa
diff -r 093bd22d1db3 -r 0fe315117b00 sip.cpp --- a/sip.cpp Tue Jan 06 16:39:09 2015 +0000 +++ b/sip.cpp Wed Jan 07 21:48:53 2015 +0000 @@ -2,7 +2,8 @@ void Sip::__init_sock__( void ){ sip_server.set_address( this->server_ip , this->server_port ); - sock.set_blocking( false, 5 ); // verificar isso com mais cuidado depois + //sock.set_blocking( false, 5 ); // verificar isso com mais cuidado depois + sock.set_blocking( false, 0 ); sock.bind( this->my_port ); //sock.init(); } @@ -148,32 +149,37 @@ } int Sip::registry(){ - char out[ 1000 ]; + //char out[ 1000 ]; if( debug_sip ) debug_msg("Registry %d", this->my_ext ); build_registry_package( buffer ); int sent = 0; - do{ + //do{ //sent = sock.sendTo( sip_server, buffer, 512 ); // > 400 sent = sock.sendTo( sip_server, buffer, strlen( buffer ) ); // > 400 - }while( sent == 0 ); + if( debug_sip ) send_msg("sizeof( registry pkg ) :: %d", strlen( buffer ) ); + //}while( sent == 0 ); - int rcv = 0; + // int rcv = 0; - rcv = sock.receiveFrom( sip_server, buffer, sizeof( buffer ) ); + //rcv = sock.receiveFrom( sip_server, buffer, sizeof( buffer ) ); - if( rcv > 0 ) eth_pkg_received++; + //if( rcv > 0 ) eth_pkg_received++; +/* if( sent == -1 || rcv == -1 ){ - if( debug_sip ) debug_msg("sent -- %d, rcv -- %d", sent, rcv ); + //if( debug_sip ) debug_msg("sent -- %d, rcv -- %d", sent, rcv ); + if( debug_sip ) debug_msg("sent -- %d", sent ); muted = true; __reconnect__(); }else{ muted = false; } + */ + if( debug_sip ) debug_msg("Sent %i bytes to ext %d", sent, my_ext ); - if( debug_sip ) debug_msg("Sent %i bytes to ext %d", sent, my_ext ); + /* if( decode_gettag( (unsigned char *)buffer, "cseq: ", out ) ){ if(strlen( out ) > 7){ if(strcasecmp("options",out+strlen(out)-7) == 0){ @@ -182,10 +188,14 @@ // mais o envio desse pacote char ans[ 2000 ]; build_reply_package( ans, (unsigned char*)buffer ); - sock.sendTo( sip_server, ans, sizeof( 512 ) ); + //sock.sendTo( sip_server, ans, sizeof( 512 ) ); + sock.sendTo( sip_server, ans, strlen( ans ) ); + if( debug_sip ) send_msg( "sizeof( Registry reply pkg ) :: %d", strlen( ans ) ); } } } + */ + return( sent ); } @@ -204,17 +214,20 @@ build_invite_package( buffer, callbox_string, &cseq ); invite_pkg_sent = 0; - do{ - invite_pkg_sent = sock.sendTo( sip_server, buffer, sizeof( buffer ) ); - }while( invite_pkg_sent == 0 ); + //do{ + //invite_pkg_sent = sock.sendTo( sip_server, buffer, sizeof( buffer ) ); + invite_pkg_sent = sock.sendTo( sip_server, buffer, strlen( buffer ) ); + if( debug_invite ) send_msg("sizeof( invite_pkg ) :: %d", strlen( buffer ) ); + //}while( invite_pkg_sent == 0 ); - if( debug_sip ) debug_msg("Return value for invite pkg %d", invite_pkg_sent ); + if( debug_invite ) debug_msg("Return value for invite pkg %d", invite_pkg_sent ); - if( debug_sip ) debug_msg( "Inviting\r\nSip::status::%d", status ); + if( debug_invite ) debug_msg( "Inviting\r\nSip::status::%d", status ); invite_timer.start(); - sock.set_blocking( false, 3 ); + //sock.set_blocking( false, 3 ); + sock.set_blocking( false, 0 ); set_status( status, sip_waiting_trying ); } @@ -272,16 +285,20 @@ if( call == NULL ){ debug_msg(""); call = new VZ_call( this->my_ext, this->my_rtp_port, this->peer_ext, atoi( ref ) ); - if( call == NULL ) memory_is_over = true; + if( call == NULL ){ + memory_is_over = true; + if( debug_memory ) debug_msg("Ok Call allocation fail"); + } } char ans[ 1024 ]; build_ack_package( ans, ( unsigned char *)buffer ); - do{ - ok_sent = sock.sendTo( sip_server, ans, sizeof( ans ) ); - }while( ok_sent == 0 ); + //do{ + ok_sent = sock.sendTo( sip_server, ans, strlen( ans ) ); + if( debug_invite ) send_msg("sizeog( ack_pkg ) :: %d", strlen( ans ) ); + //}while( ok_sent == 0 ); - if( debug_sip ) debug_msg("Call alocada -- Sip::status::%d -- loop_times :: %d :: received_loop_times :: %d", status, loop_times, received_loop_times ); + if( debug_invite ) debug_msg("Call alocada -- Sip::status::%d -- loop_times :: %d :: received_loop_times :: %d", status, loop_times, received_loop_times ); set_status( status, sip_on_call ); return( call ); } @@ -289,7 +306,7 @@ } if( ( status == sip_trying ) || ( status == sip_ringing ) ){ if( !( strncasecmp( buffer + 12, "Busy Here", strlen("Busy Here") ) ) ){ - if( debug_sip ) debug_msg("Busy Here"); + if( debug_invite ) debug_msg("Busy Here"); send_bye(); if( call != NULL ) delete( call ); set_status( status, sip_busy ); @@ -302,7 +319,10 @@ if( call == NULL ){ debug_msg(""); call = new VZ_call( this->my_ext, this->my_rtp_port, this->peer_ext, atoi( ref ) ); - if( call == NULL ) memory_is_over = true; + if( call == NULL ){ + memory_is_over = true; + if( debug_memory ) debug_msg("Session progress allocation fail"); + } } waiting = true; } @@ -310,14 +330,14 @@ } if( status == sip_trying ){ if( !( strncasecmp( buffer + 12, "ringing", strlen("ringing") ) ) ){ - if( debug_sip ) debug_msg("ringing"); + if( debug_invite ) debug_msg("ringing"); invite_timer.reset(); set_status( status, sip_ringing ); } } if( status == sip_waiting_trying ){ if( !( strncasecmp( buffer + 12, "trying", strlen("trying") ) ) ){ - if( debug_sip ) debug_msg("trying") + if( debug_invite ) debug_msg("trying") invite_timer.reset(); set_status( status, sip_trying ); } @@ -405,7 +425,7 @@ strcat( buffer, "\r\nContent-Length: 0\r\n" ); strcat( buffer, SIP_ALLOW ); strcat( buffer, "\r\n\r\n" ); - buffer[ SIP_MAXMSGSIZE - 1 ] = 0; + //buffer[ SIP_MAXMSGSIZE - 1 ] = 0; return buffer; } @@ -590,7 +610,7 @@ strcat( pkg, itoa_buffer ); strcat( pkg, "\r\n\r\n" ); strcat( pkg, body ); - pkg[ SIP_MAXMSGSIZE - 1 ] = 0; + //pkg[ SIP_MAXMSGSIZE - 1 ] = 0; return pkg; } @@ -734,7 +754,7 @@ strcat( buffer, SVNREV ); strcat( buffer, "\r\n" ); strcat( buffer, "Content-Length: 0\r\n\r\n" ); - buffer[SIP_MAXMSGSIZE-1] = 0; + //buffer[SIP_MAXMSGSIZE-1] = 0; return( buffer ); } @@ -808,7 +828,7 @@ strcat( buffer, SVNREV ); strcat( buffer, "\r\n" ); strcat( buffer, "Content-Length: 0\r\n\r\n" ); - buffer[ SIP_MAXMSGSIZE - 1 ] = 0; + //buffer[ SIP_MAXMSGSIZE - 1 ] = 0; return( buffer ); } char * Sip::build_trying_package( char * buffer, unsigned char * orig ){ @@ -888,7 +908,7 @@ strcat( buffer, SIP_ALLOW ); strcat( buffer, "\r\n\r\n" ); - buffer[ SIP_MAXMSGSIZE - 1 ] = 0; + //buffer[ SIP_MAXMSGSIZE - 1 ] = 0; return( buffer ); } char * Sip::fill_random16h(char * buffer ){ @@ -1014,7 +1034,8 @@ > 0 :: devo remover essa call do vetor de calls */ int Sip::listen_SIP_server( void ){ - sock.set_blocking( false, 3 ); + //sock.set_blocking( false, 3 ); + sock.set_blocking( false, 0 ); int bye_sent = 0; int options_sent = 0; @@ -1028,9 +1049,11 @@ char ans[ 2000 ]; build_reply_package( ans, (unsigned char*)buffer ); - do{ - bye_sent = sock.sendTo( sip_server, ans, 768 ); - }while( bye_sent == 0 ); + //do{ + //bye_sent = sock.sendTo( sip_server, ans, 768 ); + bye_sent = sock.sendTo( sip_server, ans, strlen( ans ) ); + if( debug_invite ) send_msg("sizeof( bye reply pkg ) :: %d", strlen( ans ) ); + //}while( bye_sent == 0 ); if( debug_sip ) debug_msg("Server request BYE to %d ext", my_ext ); @@ -1042,9 +1065,11 @@ if( debug_sip ) debug_msg("Options received "); build_reply_package( ans, (unsigned char*)buffer ); - do{ - options_sent = sock.sendTo( sip_server, ans, 512 ); - }while( options_sent == 0 ); + //do{ + //options_sent = sock.sendTo( sip_server, ans, 512 ); + options_sent = sock.sendTo( sip_server, ans, strlen( ans ) ); + if( debug_sip ) send_msg( "sizeof( options reply package ) :: %d", strlen( ans ) ); + //}while( options_sent == 0 ); } } @@ -1066,11 +1091,14 @@ } void Sip::send_bye( void ){ - build_bye_package( this->buffer ); + //build_bye_package( this->buffer ); int ret = 0; - do{ - ret = sock.sendTo( sip_server, build_bye_package( this->buffer ), sizeof( this->buffer ) ); - }while( ret == 0 ); + //do{ + //ret = sock.sendTo( sip_server, build_bye_package( this->buffer ), sizeof( this->buffer ) ); + ret = sock.sendTo( sip_server, build_bye_package( this->buffer ), strlen( this->buffer ) ); + if( debug_sip ) send_msg( "sizeof( bye pkg ) :: %d", strlen( buffer ) ); + + //}while( ret == 0 ); if( ret == -1 ){ muted = true; @@ -1083,9 +1111,11 @@ build_unregistry_package( this->buffer ); //for( register int i = 0; i < 7; i++ ) int ret = 0; - do{ - ret = sock.sendTo( sip_server, build_bye_package( this->buffer ), sizeof( this->buffer ) ); - }while( ret == 0 ); + //do{ + //ret = sock.sendTo( sip_server, build_bye_package( this->buffer ), sizeof( this->buffer ) ); + ret = sock.sendTo( sip_server, build_bye_package( this->buffer ), strlen( this->buffer ) ); + if( debug_sip ) send_msg("sizeof( unregistry_pkg ) :: %d", strlen( buffer ) ); + //}while( ret == 0 ); if( ret == -1 ){ muted = true; @@ -1164,7 +1194,7 @@ strcat( buffer, "\r\nContent-Length: 0\r\n" ); strcat( buffer, SIP_ALLOW ); strcat( buffer, "\r\n\r\n" ); - buffer[ SIP_MAXMSGSIZE - 1 ] = 0; + //buffer[ SIP_MAXMSGSIZE - 1 ] = 0; return buffer; } @@ -1179,4 +1209,12 @@ void Sip::sip_check_muted( void ){ if( muted == true ) __reconnect__(); if( debug_muted ) send_msg("For some reason sip muted, reconnected"); +} + +int Sip::get_socket_fd( void ){ + return sock.get_fd(); +} + +int Sip::udp_drop_once( void ){ + return sock.receiveFrom( sip_server, buffer, sizeof( buffer ) ); } \ No newline at end of file