Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Tue Dec 16 12:13:01 2014 +0000
Revision:
78:1353744f01e1
Parent:
77:e8c0253b57bc
Child:
81:3656f00ab3db
before meeting

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 0:4d17cd9c8f9d 1 #include "call_box.h"
klauss 0:4d17cd9c8f9d 2
klauss 0:4d17cd9c8f9d 3 Call_Box::Call_Box( int ext, int port ){
klauss 0:4d17cd9c8f9d 4 this->ext = ext;
klauss 0:4d17cd9c8f9d 5 this->port = port;
klauss 0:4d17cd9c8f9d 6 t.start();
klauss 0:4d17cd9c8f9d 7 remaining_attempts = __MAX_ATTEMPTS__;
klauss 0:4d17cd9c8f9d 8 timeout = __TIMEOUT__;
klauss 4:de46f0d9b14d 9 msg_id = 0x10;
klauss 0:4d17cd9c8f9d 10 timeslice = 0x00;
klauss 0:4d17cd9c8f9d 11 status = cb_idle;
klauss 12:07fd716e0f35 12 sip = new Sip( ext, port );
klauss 78:1353744f01e1 13
klauss 78:1353744f01e1 14 next_aging_type = __CYCLES__;
klauss 78:1353744f01e1 15 seconds.start();
klauss 78:1353744f01e1 16 }
klauss 78:1353744f01e1 17
klauss 78:1353744f01e1 18 int Call_Box::get_status( void ){ return this->status; }
klauss 78:1353744f01e1 19
klauss 78:1353744f01e1 20 void Call_Box::cb_set_status( uint8_t status ){ this->status = status; }
klauss 78:1353744f01e1 21
klauss 78:1353744f01e1 22 int Call_Box::get_sip_status( void ){
klauss 78:1353744f01e1 23 if( sip == NULL ) return -1;
klauss 78:1353744f01e1 24
klauss 78:1353744f01e1 25 else return this->sip->get_status();
klauss 78:1353744f01e1 26 }
klauss 78:1353744f01e1 27
klauss 78:1353744f01e1 28 int Call_Box::set_sip_status( uint8_t status ){
klauss 78:1353744f01e1 29 if( sip == NULL ) return( -1 );
klauss 78:1353744f01e1 30
klauss 78:1353744f01e1 31 sip->sip_set_status( status );
klauss 78:1353744f01e1 32
klauss 78:1353744f01e1 33 return( 0 );
klauss 0:4d17cd9c8f9d 34 }
klauss 0:4d17cd9c8f9d 35
klauss 0:4d17cd9c8f9d 36 Call_Box::~Call_Box( void ){
klauss 0:4d17cd9c8f9d 37 if( sip != NULL ) delete( sip );
klauss 0:4d17cd9c8f9d 38 }
klauss 0:4d17cd9c8f9d 39
klauss 0:4d17cd9c8f9d 40 int Call_Box::get_port( void ){ return( this->port ); }
klauss 0:4d17cd9c8f9d 41 int Call_Box::get_ext( void ){ return( this->ext ); }
klauss 0:4d17cd9c8f9d 42
klauss 0:4d17cd9c8f9d 43 float Call_Box::get_elapsed_time( void ){ return( this->t.read_ms() ); }
klauss 0:4d17cd9c8f9d 44
klauss 0:4d17cd9c8f9d 45 void Call_Box::reset_elapsed_time( void ){
klauss 0:4d17cd9c8f9d 46 this->t.reset();
klauss 78:1353744f01e1 47 timeout = __TIMEOUT__;
klauss 78:1353744f01e1 48 next_aging_type = __CYCLES__;
klauss 0:4d17cd9c8f9d 49 }
klauss 0:4d17cd9c8f9d 50
klauss 0:4d17cd9c8f9d 51 bool Call_Box::is_timeout( void ){
klauss 78:1353744f01e1 52 if( seconds.read() > __RESQUEST_TIME__ ){
klauss 78:1353744f01e1 53 seconds.reset();
klauss 78:1353744f01e1 54 return( t.read() > __TIME_TO_REGISTER__ ) ? true : false;
klauss 78:1353744f01e1 55 }else return false;
klauss 0:4d17cd9c8f9d 56 }
klauss 0:4d17cd9c8f9d 57
klauss 78:1353744f01e1 58 bool Call_Box::has_next_try( void ){
klauss 78:1353744f01e1 59 return( ( t.read() < __TIMEOUT__ ) ? true : false );
klauss 0:4d17cd9c8f9d 60 }
klauss 0:4d17cd9c8f9d 61
klauss 0:4d17cd9c8f9d 62 void Call_Box::registry( void ){
klauss 0:4d17cd9c8f9d 63 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 64 this->sip = new Sip( ext, port );
klauss 0:4d17cd9c8f9d 65
klauss 78:1353744f01e1 66 if( sip->registry() > 0x00 ) reset_elapsed_time();
klauss 78:1353744f01e1 67 if( debug_aging ) debug_msg( "%d Registered", ext );
klauss 78:1353744f01e1 68
klauss 0:4d17cd9c8f9d 69 delete( sip );
klauss 0:4d17cd9c8f9d 70 this->sip = NULL;
klauss 0:4d17cd9c8f9d 71 }else{
klauss 78:1353744f01e1 72 if( sip->registry() > 0x00 ) reset_elapsed_time();
klauss 78:1353744f01e1 73 if( debug_aging ) debug_msg( "%d Registered", ext );
klauss 0:4d17cd9c8f9d 74 }
klauss 0:4d17cd9c8f9d 75 }
klauss 0:4d17cd9c8f9d 76
klauss 0:4d17cd9c8f9d 77 void Call_Box::unregistry( void ){
klauss 0:4d17cd9c8f9d 78 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 79 this->sip = new Sip( ext, port );
klauss 0:4d17cd9c8f9d 80
klauss 0:4d17cd9c8f9d 81 sip->send_unregistry_pkg();
klauss 0:4d17cd9c8f9d 82
klauss 0:4d17cd9c8f9d 83 delete( sip );
klauss 0:4d17cd9c8f9d 84 this->sip = NULL;
klauss 0:4d17cd9c8f9d 85 }else{
klauss 0:4d17cd9c8f9d 86 sip->send_unregistry_pkg();
klauss 0:4d17cd9c8f9d 87 }
klauss 0:4d17cd9c8f9d 88 }
klauss 0:4d17cd9c8f9d 89
klauss 0:4d17cd9c8f9d 90 VZ_call * Call_Box::invite( void ){
klauss 29:7246460b73f8 91 t.stop();
klauss 29:7246460b73f8 92 VZ_call * call = NULL;
klauss 29:7246460b73f8 93
klauss 0:4d17cd9c8f9d 94 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 95 this->sip = new Sip( ext, port );
klauss 0:4d17cd9c8f9d 96
klauss 29:7246460b73f8 97 call = sip->invite();
klauss 0:4d17cd9c8f9d 98
klauss 13:ae278302dffe 99 delete( sip );
klauss 13:ae278302dffe 100 this->sip = NULL;
klauss 29:7246460b73f8 101 }else{
klauss 29:7246460b73f8 102 call = sip->invite();
klauss 0:4d17cd9c8f9d 103 }
klauss 29:7246460b73f8 104
klauss 29:7246460b73f8 105 if( debug_cb ) debug_msg("Call returned value :: %p ", (void * )call );
klauss 29:7246460b73f8 106 if( call == NULL ) t.start();
klauss 29:7246460b73f8 107 return( call );
klauss 0:4d17cd9c8f9d 108 }
klauss 0:4d17cd9c8f9d 109
klauss 0:4d17cd9c8f9d 110 /* Retorna
klauss 0:4d17cd9c8f9d 111 = 0 :: ok
klauss 0:4d17cd9c8f9d 112 < 0 :: tive problemas
klauss 0:4d17cd9c8f9d 113 > 0 :: devo remover essa call do vetor de calls
klauss 0:4d17cd9c8f9d 114 */
klauss 0:4d17cd9c8f9d 115 int Call_Box::listen_SIP_server( void ){
klauss 0:4d17cd9c8f9d 116 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 117 if( status == cb_on_call || status == cb_idle ){
klauss 0:4d17cd9c8f9d 118 this->sip = new Sip( ext, port );
klauss 0:4d17cd9c8f9d 119 int out_read = sip->listen_SIP_server();
klauss 0:4d17cd9c8f9d 120 delete( sip );
klauss 0:4d17cd9c8f9d 121 this->sip = NULL;
klauss 0:4d17cd9c8f9d 122 return( out_read );
klauss 0:4d17cd9c8f9d 123 }else return( 0 );
klauss 0:4d17cd9c8f9d 124 }else{
klauss 0:4d17cd9c8f9d 125 if( status == cb_on_call || status == cb_idle ){
klauss 13:ae278302dffe 126 return ( sip->listen_SIP_server() );
klauss 13:ae278302dffe 127 } else return( 0 );
klauss 0:4d17cd9c8f9d 128 }
klauss 0:4d17cd9c8f9d 129 }
klauss 0:4d17cd9c8f9d 130
klauss 0:4d17cd9c8f9d 131 void Call_Box::set_msg_id( uint8_t msg_id ){
klauss 78:1353744f01e1 132 this->msg_id = ( msg_id > 0x10 ) ? msg_id : 0x11;
klauss 0:4d17cd9c8f9d 133 }
klauss 0:4d17cd9c8f9d 134 uint8_t Call_Box::get_msg_id( void ){ return( this->msg_id ); }
klauss 0:4d17cd9c8f9d 135
klauss 0:4d17cd9c8f9d 136 void Call_Box::set_timeslice( uint8_t timeslice ){
klauss 0:4d17cd9c8f9d 137 this->timeslice = timeslice;
klauss 0:4d17cd9c8f9d 138 }
klauss 0:4d17cd9c8f9d 139 uint8_t Call_Box::get_timeslice( void ){ return( this->timeslice ); }
klauss 0:4d17cd9c8f9d 140
klauss 0:4d17cd9c8f9d 141 //void Call_Box::set_sip( Sip * sip ){
klauss 0:4d17cd9c8f9d 142 // this->sip = sip;
klauss 0:4d17cd9c8f9d 143 //}
klauss 0:4d17cd9c8f9d 144
klauss 0:4d17cd9c8f9d 145 void Call_Box::send_bye( void ){
klauss 0:4d17cd9c8f9d 146 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 147 this->sip = new Sip( ext, port );
klauss 0:4d17cd9c8f9d 148
klauss 0:4d17cd9c8f9d 149 sip->send_bye();
klauss 13:ae278302dffe 150
klauss 13:ae278302dffe 151 delete( sip );
klauss 0:4d17cd9c8f9d 152 sip = NULL;
klauss 0:4d17cd9c8f9d 153 }else{
klauss 0:4d17cd9c8f9d 154 sip->send_bye();
klauss 0:4d17cd9c8f9d 155 }
klauss 1:a1758104fa1d 156 }
klauss 1:a1758104fa1d 157
klauss 1:a1758104fa1d 158 void Call_Box::reset_sip( void ){
klauss 1:a1758104fa1d 159 if( this->sip != NULL ) delete( this->sip );
klauss 1:a1758104fa1d 160
klauss 1:a1758104fa1d 161 this->sip = new Sip( ext, port );
klauss 14:22a35f575502 162 }
klauss 14:22a35f575502 163
klauss 14:22a35f575502 164 void Call_Box::set_sip_status( int status ){
klauss 14:22a35f575502 165 if( this->sip != NULL ){
klauss 14:22a35f575502 166 this->sip->status = status;
klauss 14:22a35f575502 167 }else{
klauss 78:1353744f01e1 168 if( debug_cb) debug_msg("Sip equals NULL o.O");
klauss 14:22a35f575502 169 }
klauss 29:7246460b73f8 170 }
klauss 29:7246460b73f8 171
klauss 29:7246460b73f8 172 void Call_Box::re_start_timer( void ){
klauss 29:7246460b73f8 173 t.start();
klauss 78:1353744f01e1 174 }
klauss 78:1353744f01e1 175
klauss 78:1353744f01e1 176 int8_t Call_Box::get_next_aging_type( void ){
klauss 78:1353744f01e1 177 next_aging_type--;
klauss 78:1353744f01e1 178
klauss 78:1353744f01e1 179 if( ( next_aging_type % 2 ) == 0 || ( next_aging_type > __CYCLES__ - 15 ) ) return( REQUEST_REGISTRY );
klauss 78:1353744f01e1 180
klauss 78:1353744f01e1 181 else if( ( next_aging_type % 7 ) == 0 ) return( REQUEST_PEND );
klauss 78:1353744f01e1 182
klauss 78:1353744f01e1 183 else return( REQUEST_PING );
klauss 0:4d17cd9c8f9d 184 }