Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Revision:
89:0fe315117b00
Parent:
87:679ee0d594a9
Child:
91:c2a86b1f8aaa
--- 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