Modularizando o src
Dependencies: EALib EthernetInterface_vz mbed-rtos mbed
Fork of header_main_colinas_V0-20-09-14 by
Diff: sip.cpp
- Revision:
- 132:05cd37f7e007
- Parent:
- 125:8ff4dc96ad58
- Child:
- 135:2f4290590e51
diff -r 938ab88facae -r 05cd37f7e007 sip.cpp --- a/sip.cpp Tue Jul 21 20:03:35 2015 +0000 +++ b/sip.cpp Tue Sep 01 17:21:11 2015 +0000 @@ -3,9 +3,9 @@ //*[ begin ] ------------------------------------ Funcoes de uso interno ---------------------------------------------- *// void Sip::__init_sock__ ( void ) { - sip_server.set_address ( this->server_ip , this->server_port ); + sip_server.set_address ( this->server_ip , this -> server_port ); + sock.bind ( this -> my_port ); sock.set_blocking ( false, 0 ); - sock.bind ( this->my_port ); } void Sip::__end_sock__ ( void ) @@ -15,110 +15,32 @@ void Sip::__reconnect__ ( void ) { - __end_sock__(); - sock.init(); - sock.bind( this->my_port ); + __end_sock__ (); + __init_sock__ (); } //*[ end ] -------------------------------------- Funcoes de uso interno ---------------------------------------------- *// Sip::Sip ( const int new_ext, const uint16_t my_port ) { - char inner_tmp [ 20 ]; - - if ( debug_sip ) debug_msg ("[%d, %d] Building SIP", new_ext, my_port ); + if ( debug_sip ) vz_debug ("[%d, %d] Building SIP", new_ext, my_port ); this->my_ext = new_ext; this->my_port = my_port; - - FILE * fip = fopen ( "/qspi/serverip.txt", "r"); - if ( fip == NULL) - { - if ( debug_sip ) debug_msg("[%d] Failed to open /qspi/serverip.txt", this->my_ext ); - strncpy ( this->server_ip, SERVER_IP, 20 ); - } else { - char tmp [ 16 ] = "\0"; - int read = fread ( tmp, 1, 15, fip ); - if ( read > 0 ){ - for ( int i = 0; i < read; i++ ) - if ( tmp [ i ] == '\n' || tmp[ i ] == '\r' ){ - tmp [ i ] = '\0'; - break; - } - strcpy ( this->server_ip, tmp ); - if ( debug_sip ) debug_msg ("[%d] ip server%s( read %d chars ), valid %d", this->my_ext, this->server_ip, read, strlen( this->server_ip ) ); - }else{ - if ( debug_sip ) debug_msg ("[%d] Failed to read /qspi/serverip.txt", this->my_ext ); - strncpy ( this->server_ip, SERVER_IP, 20 ); - } - } - if ( fip ) fclose ( fip ); - this->server_ip [ 15 ] = '\0'; + + cm -> get_server_ip ( this->server_ip ); + this->server_port = cm -> get_server_port (); + cm -> get_header_ip ( this->my_ip ); - FILE * sp = fopen ( "/qspi/serverport.txt", "r"); - if ( sp == NULL ) - { - if ( debug_sip ) debug_msg ("[%d] Failed to open /qspi/serverport.txt", this->my_ext ); - this->server_port = SERVER_PORT; - } else { - if ( fread ( (void *)inner_tmp, 1, 20, sp ) > 0 ) - { - server_port = atoi ( inner_tmp ); - if ( debug_sip ) debug_msg ("[%d] server port %d", this->my_ext, this->server_port ); - } else { - if ( debug_sip ) debug_msg ("F[%d] failed to read /qspi/serverport.txt", this->my_ext ); - this->server_port = SERVER_PORT; - } - } - if ( sp ) fclose ( sp ); + if ( debug_sip ) vz_debug ("[%d] port %d", this->my_ext, this->my_port ); - FILE * fhip = fopen ( "/qspi/myip.txt", "r"); - if ( fhip == NULL ) - { - if ( debug_sip ) debug_msg ("[%d] Failed to open /qspi/myip.txt", this->my_ext ); - strncpy ( this->my_ip, MY_IP, 20 ); - } else { - char tmp[ 16 ] = "\0"; - int read = fread( tmp, 1, 15, fhip ); - if( read > 0 ){ - for( int i = 0; i < read; i++ ) - if( tmp[ i ] == '\n' || tmp[ i ] == '\r' ){ - tmp[ i ] = '\0'; - break; - } - strcpy ( this->my_ip, tmp ); - if ( debug_sip ) debug_msg ("[%d] ip %s( lidos %d chars ), valid %d", this->my_ext, this->my_ip, read, strlen( this->my_ip ) ); - }else{ - if ( debug_sip ) debug_msg ("[%d] Failed to read /qspi/myip.txt", this->my_ext ); - strncpy ( this->my_ip, MY_IP, 20 ); - } - } - if ( fhip ) fclose ( fhip ); - - this->my_ip[ 15 ] = '\0'; - - if ( debug_sip ) debug_msg ("[%d] port %d", this->my_ext, this->my_port ); - - snprintf ( this->my_display, sizeof ( this->my_display ), "%i", this->my_ext ); + snprintf ( this -> my_display, sizeof ( this -> my_display ), "%i", this -> my_ext ); this->my_rtp_port = 0; - if ( debug_rtp ) debug_msg ("[%d] rtp port %d ", this->my_ext, this->my_rtp_port ); + if ( debug_rtp ) vz_debug ("[%d] rtp port %d ", this->my_ext, this->my_rtp_port ); - FILE * serext = fopen ( "/qspi/peerext.txt", "r"); - if ( serext == NULL ) - { - if( debug_sip ) debug_msg ("[%d] Failed to open /qspi/peerext.txt", this->my_ext ); - this->peer_ext = PEER_EXT; - } else { - if( fread ( (void *)inner_tmp, 1, 32, serext ) > 0 ) { - this->peer_ext = atoi ( inner_tmp ); - if ( debug_sip ) debug_msg("[%d] server ext %d", this->my_ext, this->peer_ext ); - } else { - if ( debug_sip ) debug_msg ("Failed to read /qspi/peerext.txt" ); - this->peer_ext = PEER_EXT; - } - } - if ( serext ) fclose ( serext ); + + this->peer_ext = cm -> get_server_ext (); strcpy( this->last_invite_tag, "" ); strcpy( this->last_invite_callid, ""); @@ -151,14 +73,15 @@ build_registry_package (); int send = sock.sendTo ( sip_server, buffer, strlen ( buffer ) ); // > 400 - if ( send != strlen ( buffer ) ) + if ( send not_eq strlen ( buffer ) ) { - if ( debug_reconnect ) debug_msg ("[%d] Reconnect SIP -- Registry -- Sent %i of %i bytes", this->my_ext, send, strlen ( buffer ) ); + if ( debug_reconnect ) vz_debug ("[%d] Reconnect SIP -- Registry -- Sent %i of %i bytes", this->my_ext, send, strlen ( buffer ) ); __reconnect__ (); - miss_sip_registry_send_pkg++; + miss_sip_registry_send_pkg ++; } - if ( debug_sip ) debug_msg ("[%d %d] Registry -- Sent %i of %i bytes", this->my_ext, this->my_port, send, strlen ( buffer ) ); + if ( debug_sip ) vz_debug ("[%d %d] Registry -- Sent %i of %i bytes", + this -> my_ext, this -> my_port, send, strlen ( buffer ) ); return ( send ); } @@ -175,24 +98,24 @@ build_invite_package( &cseq ); - if ( debug_invite ) debug_msg ("cseq::%d", cseq ); + if ( debug_invite ) vz_debug ("cseq::%d", cseq ); if ( drop_invite_to_ast_pkg ) { - debug_msg("[%d] Droped invite pkg to ast", this->my_ext ); + vz_debug ("[%d] Droped invite pkg to ast", this->my_ext ); } else { int send = sock.sendTo ( sip_server, buffer, strlen ( buffer ) ); - if ( send != strlen ( buffer ) ) + if ( send not_eq strlen ( buffer ) ) { - if ( debug_reconnect ) debug_msg ("[%d] Reconnect SIP -- Invite", this->my_ext ); + if ( debug_reconnect ) vz_debug ("[%d] Reconnect SIP -- Invite", this->my_ext ); __reconnect__ (); miss_sip_invite_send_pkg++; } - if ( debug_invite || debug_reconnect ) debug_msg ("[%d] Return value for invite pkg %d", this->my_ext, send ); + if ( debug_invite || debug_reconnect ) vz_debug ("[%d] Return value for invite pkg %d", this->my_ext, send ); } invite_timer.stop (); @@ -204,9 +127,9 @@ waiting = false; } - if ( invite_timer.read() > INVITE_MAX_WAITING_TIME ) + if ( invite_timer.read () > INVITE_MAX_WAITING_TIME ) { - if ( debug_invite ) debug_msg ("[%d] Invite call timeout :(", this->my_ext ); + if ( debug_invite ) vz_debug ("[%d] Invite call timeout :(", this -> my_ext ); invite_timer.stop (); invite_timer.reset (); sip_set_status ( sip_denied ); @@ -223,12 +146,12 @@ char * Sip::build_registry_package ( void ) { - char branch[ SIP_MAXFIELDSIZE ]; - char tag[ SIP_MAXFIELDSIZE ]; - char callid[ SIP_MAXFIELDSIZE ]; - fill_random16h( branch ); - fill_random( tag, 18 ); - fill_random16h( callid ); + char branch [ SIP_MAXMSGSIZE ]; + char tag [ SIP_MAXMSGSIZE ]; + char callid [ SIP_MAXMSGSIZE ]; + fill_random16h ( branch ); + fill_random ( tag, 18 ); + fill_random16h ( callid ); snprintf( buffer, sizeof( buffer ) - 1, "REGISTER sip:%s:%d SIP/2.0\r\nVia: SIP/2.0/UDP %s:%d;branch=%s\r\n" @@ -240,13 +163,13 @@ "Contact: %d <sip:%d@%s:%d>;expires=270\r\n" "User-Agent: VZtech/pabxdriver-%s\r\n" "Content-Length: 0\r\n" - "%s\r\n\r\n", + "%s\r\n\r\n", server_ip, server_port, my_ip, my_port, branch, my_ext, my_ext, server_ip, server_port, tag, my_ext, my_ext, server_ip, server_port, callid, get_cseq(), - my_ext, my_ext, my_ip, server_port, + my_ext, my_ext, my_ip, my_port, SVNREV, SIP_ALLOW ); @@ -257,9 +180,9 @@ { char header [ SIP_MAXMSGSIZE ]; char body [ SIP_MAXMSGSIZE ]; - char branch [ SIP_MAXFIELDSIZE ]; - char tag [ SIP_MAXFIELDSIZE ]; - char callid [ SIP_MAXFIELDSIZE ]; + char branch [ SIP_MAXMSGSIZE ]; + char tag [ SIP_MAXMSGSIZE ]; + char callid [ SIP_MAXMSGSIZE ]; char callbox_string[ CALLBOX_STRING_SIZE ]; int snprintf_ret = snprintf ( callbox_string, CALLBOX_STRING_SIZE - 1, "%i", this->my_ext ); @@ -268,7 +191,7 @@ if ( !retry ) { - *cseq = get_cseq(); + *cseq = get_cseq (); last_cseq = *cseq; fill_random16h ( branch ); @@ -293,11 +216,11 @@ strcpy ( callid, last_invite_callid ); } - if ( debug_invite ) debug_msg ("[%d] \r\nbranch :: %s\r\ntag :: %s\r\ncallid :: %s", this->my_ext, branch, tag, callid ); + if ( debug_invite ) vz_debug ("[%d] \r\nbranch :: %s\r\ntag :: %s\r\ncallid :: %s", this->my_ext, branch, tag, callid ); - if ( debug_rtp || debug_invite ) debug_msg ("[%d] Invite PKG rtp port ( %d )", this->my_ext, this->my_rtp_port ); + if ( debug_rtp || debug_invite ) vz_debug ("[%d] Invite PKG rtp port ( %d )", this->my_ext, this->my_rtp_port ); - snprintf( header, SIP_MAXMSGSIZE, + snprintf( header, sizeof ( header ) -1, "INVITE sip:%i@%s:%i SIP/2.0\r\n" "Via: SIP/2.0/UDP %s:%i;branch=%s\r\n" "From: %s <sip:%i@%s:%i>;tag=%s\r\n" @@ -321,7 +244,7 @@ SIP_ALLOW ); - snprintf( body, SIP_MAXMSGSIZE, + snprintf( body, sizeof ( body ) - 1, "v=0\r\no=- 7377 18176 IN IP4 %s\r\n" "s=-\r\n" "c=IN IP4 %s\r\n" @@ -347,20 +270,20 @@ strcat( this->buffer, body ); - if ( debug_invite ) debug_msg ("[%d] strlen( header [%d] ) | strlen( body [%d] ) | ( h + b [%d])", this->my_ext, strlen( header ),strlen( body ), strlen( header ) + strlen( body ) ); + if ( debug_invite ) vz_debug ("[%d] strlen( header [%d] ) | strlen( body [%d] ) | ( h + b [%d])", this->my_ext, strlen( header ),strlen( body ), strlen( header ) + strlen( body ) ); return( this->buffer ); } char * Sip::build_bye_package ( void ) { - char branch[SIP_MAXFIELDSIZE]; - char tag[SIP_MAXFIELDSIZE]; - fill_random16h(branch); - fill_random(tag,18); + char branch [ SIP_MAXMSGSIZE ]; + char tag [ SIP_MAXMSGSIZE ]; + fill_random16h ( branch ); + fill_random (tag,18 ); snprintf( - this->buffer, sizeof ( this->buffer ) - 1, + this -> buffer, sizeof ( this -> buffer ) - 1, "BYE sip:%i@%s:%i SIP/2.0\r\n" "Via: SIP/2.0/UDP %s:%i;branch=%s\r\n" "From: %i <sip:%i@%s:%i>;tag=%s\r\n" @@ -381,87 +304,95 @@ return( buffer ); } -char * Sip::build_ack_package ( char * buffer, const unsigned char * orig ) +char * Sip::build_ack_package ( void ) { - char to[ SIP_MAXFIELDSIZE ]; - char from[ SIP_MAXFIELDSIZE ]; - char callid[ SIP_MAXFIELDSIZE ]; - char via[ SIP_MAXFIELDSIZE ]; - char branch[ SIP_MAXFIELDSIZE ]; - char cseq[ SIP_MAXFIELDSIZE ]; - - if( decode_gettag( orig, "to: ", to ) == 0) { - buffer[ 0 ] = 0; - return NULL; + if ( this -> buffer not_eq NULL ) + { + char to [ SIP_MAXMSGSIZE ]; + char from [ SIP_MAXMSGSIZE ]; + char callid [ SIP_MAXMSGSIZE ]; + char via [ SIP_MAXMSGSIZE ]; + char branch [ SIP_MAXMSGSIZE ]; + char cseq [ SIP_MAXMSGSIZE ]; + + if( decode_gettag( ( const unsigned char * ) this -> buffer, "to: ", to ) == 0) { + buffer[ 0 ] = 0; + return NULL; + } + if( decode_gettag( ( const unsigned char * ) this -> buffer, "from: ", from ) == 0) { + buffer[ 0 ] = 0; + return NULL; + } + if( decode_gettag( ( const unsigned char * ) this -> buffer, "call-id: ", callid ) == 0) { + buffer[ 0 ] = 0; + return NULL; + } + + decode_branch ( ( const unsigned char * ) this -> buffer, branch ); + decode_cseq ( ( const unsigned char * ) this -> buffer, cseq ); + + if ( strlen( via ) > 6 ) + { + if ( strcasecmp ( ";rport", via + strlen ( via ) -6 ) == 0 ) { + via [ strlen ( via ) -6 ] = 0; + } + } + + snprintf ( buffer, sizeof ( buffer ) - 1, + "ACK sip:%i@%s:%i SIP/2.0\r\n" + "Via: SIP/2.0/UDP %s:%i;branch=%s\r\n" + "From: %s\r\n" + "To: %s\r\n" + "Call-ID: %s\r\n" + "CSeq: %s ACK\r\n" + "Max-Forwards: 70\r\n" + "Contact: %i <sip:%i@%s:%i>\r\n" + "User-Agent: VZtech/pabxdriver-%s\r\n" + "Content-Length: 0\r\n\r\n", + this -> peer_ext, this -> server_ip, this -> server_port, + this -> my_ip, this -> my_port, branch, + from, + to, + callid, + cseq, + this -> my_ext, this -> my_ext, this -> my_ip, this -> my_port, + SVNREV + ); + + return( buffer ); } - if( decode_gettag( orig, "from: ", from ) == 0) { - buffer[ 0 ] = 0; - return NULL; + else + { + return ( NULL ); } - if( decode_gettag( orig, "call-id: ", callid ) == 0) { +} + +char * Sip::build_reply_package ( void ) +{ + char to [ SIP_MAXMSGSIZE ]; + char from [ SIP_MAXMSGSIZE ]; + char callid [ SIP_MAXMSGSIZE ]; + char cseq [ SIP_MAXMSGSIZE ]; + char via [ SIP_MAXMSGSIZE ]; + char tag [ SIP_MAXMSGSIZE ]; + + if( decode_gettag( ( const unsigned char * ) buffer, "to: ", to ) == 0) { buffer[ 0 ] = 0; return NULL; } - decode_branch( orig, branch ); - decode_cseq( orig, cseq ); - - if( strlen( via ) > 6 ) { - if( strcasecmp( ";rport", via+strlen( via )-6) == 0) { - via[strlen(via)-6] = 0; - } - } - - - snprintf ( buffer, SIP_MAXMSGSIZE -1, - "ACK sip:%i@%s:%i SIP/2.0\r\n" - "Via: SIP/2.0/UDP %s:%i;branch=%s\r\n" - "From: %s\r\n" - "To: %s\r\n" - "Call-ID: %s\r\n" - "CSeq: %s ACK\r\n" - "Max-Forwards: 70\r\n" - "Contact: %i <sip:%i@%s:%i>\r\n" - "User-Agent: VZtech/pabxdriver-%s\r\n" - "Content-Length: 0\r\n\r\n", - this->peer_ext, this->server_ip, this->server_port, - this->my_ip, this->my_port, branch, - from, - to, - callid, - cseq, - this->my_ext, this->my_ext, this->my_ip, this->my_port, - SVNREV - ); - - return( buffer ); -} - -char * Sip::build_reply_package ( char * buffer, const unsigned char * orig ) -{ - char to[ SIP_MAXFIELDSIZE ]; - char from[ SIP_MAXFIELDSIZE ]; - char callid[ SIP_MAXFIELDSIZE ]; - char cseq[ SIP_MAXFIELDSIZE ]; - char via[ SIP_MAXFIELDSIZE ]; - char tag[ SIP_MAXFIELDSIZE ]; - - if( decode_gettag( orig, "to: ", to ) == 0) { + if( decode_gettag( ( const unsigned char * ) buffer, "from: ", from ) == 0) { buffer[ 0 ] = 0; return NULL; } - if( decode_gettag( orig, "from: ", from ) == 0) { + if( decode_gettag( ( const unsigned char * ) buffer, "call-id: ", callid ) == 0 ) { buffer[ 0 ] = 0; return NULL; } - if( decode_gettag( orig, "call-id: ", callid ) == 0 ) { + if( decode_gettag( ( const unsigned char * ) buffer, "cseq: ", cseq) == 0 ) { buffer[ 0 ] = 0; return NULL; } - if( decode_gettag( orig, "cseq: ", cseq) == 0 ) { - buffer[ 0 ] = 0; - return NULL; - } - if( decode_gettag( orig, "via: ", via) == 0 ) { + if( decode_gettag( ( const unsigned char * ) buffer, "via: ", via) == 0 ) { buffer[ 0 ] = 0; return NULL; } @@ -475,7 +406,7 @@ fill_random ( tag, 18 ); snprintf( - buffer, SIP_MAXMSGSIZE -1, + buffer, sizeof ( buffer ) - 1, "SIP/2.0 200 OK\r\n" "To: %s;tag=%s\r\n" "From: %s\r\n" @@ -536,7 +467,7 @@ char * Sip::decode_cseq ( const unsigned char * package, char * cseq ) { - char pkg[ SIP_MAXMSGSIZE ], cs[ SIP_MAXMSGSIZE ]; + char pkg [ SIP_MAXMSGSIZE ], cs [ SIP_MAXMSGSIZE ]; if( decode_gettag ( package, "cseq: ", pkg ) != 0) { @@ -553,7 +484,7 @@ char * Sip::decode_branch ( const unsigned char * package, char * branch ) { - char pkg[ SIP_MAXMSGSIZE ]; + char pkg [ SIP_MAXMSGSIZE ]; if ( decode_gettag ( package, "branch=", pkg ) != 0 ) { @@ -628,15 +559,18 @@ void Sip::send_bye ( void ) { - int send = sock.sendTo( sip_server, build_bye_package (), strlen( this->buffer ) ); + build_bye_package (); - if( debug_sip ) debug_msg( "[%d] sizeof( bye pkg ) :: %d", this->my_ext, strlen( this->buffer ) ); + int send = sock.sendTo ( sip_server, this -> buffer, strlen( this -> buffer ) ); - if( send != strlen( this->buffer ) ) + // antigo if ( debug_sip ) vz_debug ( "[%d] sizeof( bye pkg ) :: %d", this -> my_ext, strlen ( this -> buffer ) ); + if ( debug_invite ) vz_debug ( "[%d] sizeof( bye pkg ) :: %d", this -> my_ext, strlen ( this -> buffer ) ); + + if ( send not_eq strlen ( this->buffer ) ) { - if( debug_reconnect ) debug_msg("[%d] Reconnect SIP -- BYE, %d, %d", this->my_ext, send, strlen( this->buffer ) ); - __reconnect__(); - miss_sip_bye_send_pkg++; + if ( debug_reconnect ) vz_debug ("[%d] Reconnect SIP -- BYE, %d, %d", this -> my_ext, send, strlen ( this -> buffer ) ); + __reconnect__ (); + miss_sip_bye_send_pkg ++; } } @@ -656,9 +590,9 @@ if ( length == -1 ) { - if ( debug_reconnect ) debug_msg ("[%d] Reconnect SIP -- UDP Incomming", get_ext () ); - __reconnect__(); - miss_sip_inc_pkg++; + if ( debug_reconnect ) vz_debug ("[%d] Reconnect SIP -- UDP Incomming", get_ext () ); + __reconnect__ (); + miss_sip_inc_pkg ++; } if ( length > 0 ) @@ -676,13 +610,16 @@ { if ( sip_response == 200 ){ // Ok char *ref = strstr( buffer, "audio" ); - if ( debug_invite ) debug_msg("[%d] udp_incomming_pkg -- ok", this->my_ext ); - if ( ref != NULL ){ + + if ( debug_invite ) vz_debug ("[%d] udp_incomming_pkg -- ok", this->my_ext ); + + if ( ref != NULL ) + { if ( drop_this_amount_of_ack_to_ast ) drop_this_amount_of_ack_to_ast--; if ( drop_this_amount_of_ack_to_ast ) { - debug_msg ("[%d] Droped ok pkg received from ast (%d)", this->my_ext, drop_this_amount_of_ack_to_ast ); + vz_debug ("[%d] Droped ok pkg received from ast (%d)", this->my_ext, drop_this_amount_of_ack_to_ast ); return -71; } @@ -690,31 +627,31 @@ ref = strtok( ref, " "); if ( call == NULL ){ call = new VZ_call ( this->my_ext, this->my_rtp_port, this->peer_ext, atoi( ref ) ); - if ( debug_rtp ) debug_msg ("[%d] Ok new call ( %d, %d, %d, %d ( %s ) ) ", this->my_ext, this->my_ext, this->my_rtp_port, this->peer_ext, atoi( ref ), ref ); + if ( debug_rtp ) vz_debug ("[%d] Ok new call ( %d, %d, %d, %d ( %s ) ) ", this->my_ext, this->my_ext, this->my_rtp_port, this->peer_ext, atoi( ref ), ref ); if ( call == NULL ) memory_is_over = true; } - char ans[ SIP_MAXMSGSIZE ]; - build_ack_package( ans, ( unsigned char *)buffer ); + + build_ack_package (); int send = 0; if ( drop_ack_pkg ) { - debug_msg("[%d] Droped ack pkt to ast", this->my_ext ); + vz_debug ("[%d] Droped ack pkt to ast", this->my_ext ); } else { - send = sock.sendTo( sip_server, ans, strlen( ans ) ); + send = sock.sendTo ( sip_server, this -> buffer, strlen ( this -> buffer ) ); - if ( send != strlen( ans ) ) + if ( send not_eq strlen( this -> buffer ) ) { - if ( debug_reconnect ) debug_msg ("[%d] Reconnect SIP -- Ok -- Call mode on", this->my_ext ); - __reconnect__(); - miss_sip_ok_send_pkg++; + if ( debug_reconnect ) vz_debug ("[%d] Reconnect SIP -- Ok -- Call mode on", this->my_ext ); + __reconnect__ (); + miss_sip_ok_send_pkg ++; } } - if ( debug_invite ) debug_msg ("[%d] Call alocada -- sizeof( ack ) :: %d - strlen( ans ):: %d", this->my_ext, send, strlen( ans ) ); + if ( debug_invite ) vz_debug ("[%d] Call alocada -- sizeof( ack ) :: %d - strlen( this -> buffer ):: %d", this->my_ext, send, strlen( this -> buffer ) ); sip_set_status ( sip_on_call ); } } @@ -724,10 +661,10 @@ if ( sip_response >= 400 && sip_response < 700 ) { if ( debug_invite ) { - buffer[ 11 ] = 0; - if ( debug_invite ) debug_msg ("[%d] Busy Here :: %s", this->my_ext, buffer + 8 ); + buffer [ 11 ] = 0; + if ( debug_invite ) vz_debug ("[%d] Busy Here :: %s", this -> my_ext, buffer + 8 ); } - send_bye(); + send_bye (); sip_set_status ( sip_busy ); return ( NULL ); } @@ -741,7 +678,7 @@ if ( call == NULL ) { this->call = new VZ_call ( this->my_ext, this->my_rtp_port, this->peer_ext, atoi( ref ) ); - if ( debug_rtp ) debug_msg ("[%d] Session in Progress ( %d, %d, %d, %d ( %s ) ) ",this->my_ext, this->my_ext, this->my_rtp_port, this->peer_ext, atoi( ref ), ref ); + if ( debug_rtp ) vz_debug ("[%d] Session in Progress ( %d, %d, %d, %d ( %s ) ) ",this->my_ext, this->my_ext, this->my_rtp_port, this->peer_ext, atoi( ref ), ref ); if ( call == NULL ) memory_is_over = true; } waiting = true; @@ -751,14 +688,14 @@ if ( status == sip_trying ){ if ( sip_response == 180 ){ - if ( debug_invite ) debug_msg ("[%d] ringing", this->my_ext ); + if ( debug_invite ) vz_debug ("[%d] ringing", this->my_ext ); sip_set_status ( sip_ringing ); } } if ( status == sip_waiting_trying ){ if ( sip_response == 100 ){ - if ( debug_invite ) debug_msg ("[%d] trying", this->my_ext ) + if ( debug_invite ) vz_debug ("[%d] trying", this->my_ext ) sip_set_status ( sip_trying ); } } @@ -766,20 +703,25 @@ if ( status == sip_on_call ) { if ( !( strncasecmp( buffer, "bye ", 4 ) ) ) - { - char ans[ 2000 ]; - build_reply_package ( ans, ( unsigned char * ) buffer ); + { + build_reply_package (); - int send = sock.sendTo ( sip_server, ans, strlen ( ans ) ); - if ( send != strlen( ans ) ) + int send = sock.sendTo ( sip_server, this -> buffer, strlen ( this -> buffer ) ); + if ( send not_eq strlen ( this -> buffer ) ) { - if ( debug_reconnect ) debug_msg ("[%d] Reconnect SIP -- RCV BYE from * -- ( expected, realized ) ( %d, %d )", this->my_ext, strlen ( ans ), send ); + if ( debug_reconnect ) vz_debug ("" + "[%d] Reconnect SIP -- RCV BYE from * -- ( expected, realized ) ( %d, %d )", + this->my_ext, strlen ( this -> buffer ), send + ); + __reconnect__ (); - miss_sip_rcv_bye_send_pkg++; + miss_sip_rcv_bye_send_pkg ++; } - if ( debug_invite ) debug_msg ("[%d] Bye request received from * - sizeof( bye reply pkg ) :: %d", this->my_ext, strlen ( ans ) ); - + if ( debug_invite ) vz_debug ("" + "[%d] Bye request received from * - sizeof ( bye reply pkg ) :: %d", + this -> my_ext, strlen ( this -> buffer ) + ); set_sip_rtp_port ( 0 ); @@ -802,37 +744,37 @@ void Sip::set_sip_rtp_port ( const int new_my_rtp_port ) { this->my_rtp_port = new_my_rtp_port; - if ( debug_rtp ) debug_msg ( "[%d] this->my_rtp_port ( %d ) = new_my_rtp_port( %d )", this->my_ext, this->my_rtp_port, new_my_rtp_port ); + if ( debug_rtp ) vz_debug ( "[%d] this->my_rtp_port ( %d ) = new_my_rtp_port( %d )", this->my_ext, this->my_rtp_port, new_my_rtp_port ); } int Sip::print_yourself ( void ) { - send_msg (""); - send_msg ("Values ::\r\n"); - send_msg ("server_ip :: %s", server_ip ); - send_msg ("server_port :: %d", server_port ); - send_msg ("my_ip :: %s", my_ip ); - send_msg ("my_port :: %d", my_port ); - send_msg ("my_ext :: %d", my_ext ); - send_msg ("my_rtp_port :: %d", my_rtp_port ); - send_msg ("my_display :: %s", my_display ); - send_msg ("peer_ext :: %d", peer_ext ); - send_msg ("fill_random_aux :: %s", fill_random_aux ); - send_msg ("last_invite_tag :: %s", last_invite_tag ); - send_msg ("last_invite_callid :: %s", last_invite_callid ); - send_msg ("SVNREV :: %s", SVNREV ); - send_msg ("char buffer[ 1024 ] :: %p", ( void * ) buffer ); + vz_printf ("\r\n"); + vz_printf ("Values ::\r\n"); + vz_printf ("server_ip :: %s", server_ip ); + vz_printf ("server_port :: %d", server_port ); + vz_printf ("my_ip :: %s", my_ip ); + vz_printf ("my_port :: %d", my_port ); + vz_printf ("my_ext :: %d", my_ext ); + vz_printf ("my_rtp_port :: %d", my_rtp_port ); + vz_printf ("my_display :: %s", my_display ); + vz_printf ("peer_ext :: %d", peer_ext ); + vz_printf ("fill_random_aux :: %s", fill_random_aux ); + vz_printf ("last_invite_tag :: %s", last_invite_tag ); + vz_printf ("last_invite_callid :: %s", last_invite_callid ); + vz_printf ("SVNREV :: %s", SVNREV ); + vz_printf ("char buffer[ 1024 ] :: %p", ( void * ) buffer ); //FIXME esse tipo de tag existe como metalinguagem ??? //TOTHINK o que fazer pra entender melhor o estado dos sockets - send_msg ("UDPSocket sock :: %p", ( void * ) &sock ); - send_msg ("Endpoint sip_server :: %p", ( void * ) &sip_server ); + vz_printf ("UDPSocket sock :: %p", ( void * ) &sock ); + vz_printf ("Endpoint sip_server :: %p", ( void * ) &sip_server ); - send_msg ("call :: %p", ( void * ) call ); - send_msg ("invite_timer :: %d", ( int ) invite_timer.read () ); - send_msg ("waiting :: %s", ( waiting ) ? "true" : "false" ); - send_msg ("listen_SIP_server_return :: %d", listen_SIP_server_return ); - send_msg (""); + vz_printf ("call :: %p", ( void * ) call ); + vz_printf ("invite_timer :: %d", ( int ) invite_timer.read () ); + vz_printf ("waiting :: %s", ( waiting ) ? "true" : "false" ); + vz_printf ("listen_SIP_server_return :: %d", listen_SIP_server_return ); + vz_printf ("\r\n"); return ( sizeof( Sip ) ); } @@ -848,28 +790,43 @@ build_invite_package ( &cseq, true ); - if ( debug_invite ) debug_msg ("cseq::%d", cseq ); + if ( debug_invite ) vz_debug ("cseq::%d", cseq ); int send = 0; if ( drop_invite_to_ast_pkg ) { - debug_msg ("[%d] Droped invite pkg to ast", this->my_ext ); + vz_debug ("[%d] Droped invite pkg to ast", this->my_ext ); } else { send = sock.sendTo ( sip_server, buffer, strlen ( buffer ) ); - if ( send != strlen( buffer ) ) + if ( send not_eq strlen ( buffer ) ) { - if ( debug_reconnect ) debug_msg ("[%d] Reconnect SIP -- Invite", this->my_ext ); + if ( debug_reconnect ) vz_debug ("[%d] Reconnect SIP -- Invite", this->my_ext ); __reconnect__ (); - miss_sip_invite_send_pkg++; + miss_sip_invite_send_pkg ++; } - if ( debug_invite || debug_reconnect ) debug_msg ("[%d] Return value for invite pkg %d", this->my_ext, send ); + if ( debug_invite || debug_reconnect ) vz_debug ("[%d] Return value for invite pkg %d", this->my_ext, send ); } return ( send ); +} + +void Sip::update ( void ) +{ + cm -> get_server_ip ( this -> server_ip ); + + this -> server_port = cm -> get_server_port (); + + cm -> get_header_ip ( this -> my_ip ); + + this -> peer_ext = cm -> get_server_ext (); + + sip_server.set_address ( this -> server_ip , this -> server_port ); + + __reconnect__ (); } \ No newline at end of file