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 Jan 06 16:37:03 2015 +0000
Revision:
87:679ee0d594a9
Parent:
85:b6f2dc1d0f4f
Child:
89:0fe315117b00
rx buffer resized

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 87:679ee0d594a9 14 if( sip == NULL ) memory_is_over = true;
klauss 87:679ee0d594a9 15
klauss 78:1353744f01e1 16 next_aging_type = __CYCLES__;
klauss 78:1353744f01e1 17 seconds.start();
klauss 81:3656f00ab3db 18 invite_response = true;
klauss 81:3656f00ab3db 19 bye_response = true;
klauss 85:b6f2dc1d0f4f 20 cb_new_counter++;
klauss 78:1353744f01e1 21 }
klauss 78:1353744f01e1 22
klauss 78:1353744f01e1 23 int Call_Box::get_status( void ){ return this->status; }
klauss 78:1353744f01e1 24
klauss 78:1353744f01e1 25 void Call_Box::cb_set_status( uint8_t status ){ this->status = status; }
klauss 78:1353744f01e1 26
klauss 78:1353744f01e1 27 int Call_Box::get_sip_status( void ){
klauss 78:1353744f01e1 28 if( sip == NULL ) return -1;
klauss 78:1353744f01e1 29
klauss 78:1353744f01e1 30 else return this->sip->get_status();
klauss 78:1353744f01e1 31 }
klauss 78:1353744f01e1 32
klauss 78:1353744f01e1 33 int Call_Box::set_sip_status( uint8_t status ){
klauss 78:1353744f01e1 34 if( sip == NULL ) return( -1 );
klauss 78:1353744f01e1 35
klauss 78:1353744f01e1 36 sip->sip_set_status( status );
klauss 78:1353744f01e1 37
klauss 78:1353744f01e1 38 return( 0 );
klauss 0:4d17cd9c8f9d 39 }
klauss 0:4d17cd9c8f9d 40
klauss 0:4d17cd9c8f9d 41 Call_Box::~Call_Box( void ){
klauss 85:b6f2dc1d0f4f 42 if( sip != NULL ) delete( sip );
klauss 85:b6f2dc1d0f4f 43 cb_delete_counter++;
klauss 0:4d17cd9c8f9d 44 }
klauss 0:4d17cd9c8f9d 45
klauss 0:4d17cd9c8f9d 46 int Call_Box::get_port( void ){ return( this->port ); }
klauss 0:4d17cd9c8f9d 47 int Call_Box::get_ext( void ){ return( this->ext ); }
klauss 0:4d17cd9c8f9d 48
klauss 0:4d17cd9c8f9d 49 float Call_Box::get_elapsed_time( void ){ return( this->t.read_ms() ); }
klauss 0:4d17cd9c8f9d 50
klauss 0:4d17cd9c8f9d 51 void Call_Box::reset_elapsed_time( void ){
klauss 0:4d17cd9c8f9d 52 this->t.reset();
klauss 78:1353744f01e1 53 timeout = __TIMEOUT__;
klauss 78:1353744f01e1 54 next_aging_type = __CYCLES__;
klauss 0:4d17cd9c8f9d 55 }
klauss 0:4d17cd9c8f9d 56
klauss 0:4d17cd9c8f9d 57 bool Call_Box::is_timeout( void ){
klauss 78:1353744f01e1 58 if( seconds.read() > __RESQUEST_TIME__ ){
klauss 78:1353744f01e1 59 seconds.reset();
klauss 78:1353744f01e1 60 return( t.read() > __TIME_TO_REGISTER__ ) ? true : false;
klauss 78:1353744f01e1 61 }else return false;
klauss 0:4d17cd9c8f9d 62 }
klauss 0:4d17cd9c8f9d 63
klauss 78:1353744f01e1 64 bool Call_Box::has_next_try( void ){
klauss 78:1353744f01e1 65 return( ( t.read() < __TIMEOUT__ ) ? true : false );
klauss 0:4d17cd9c8f9d 66 }
klauss 0:4d17cd9c8f9d 67
klauss 0:4d17cd9c8f9d 68 void Call_Box::registry( void ){
klauss 0:4d17cd9c8f9d 69 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 70 this->sip = new Sip( ext, port );
klauss 87:679ee0d594a9 71 if( sip == NULL ){
klauss 87:679ee0d594a9 72 memory_is_over = true;
klauss 87:679ee0d594a9 73 return;
klauss 87:679ee0d594a9 74 }
klauss 0:4d17cd9c8f9d 75
klauss 78:1353744f01e1 76 if( sip->registry() > 0x00 ) reset_elapsed_time();
klauss 81:3656f00ab3db 77 if( debug_aging ) debug_msg( "%d Registered - ( %f )", ext, __TIMEOUT__ - t.read() );
klauss 78:1353744f01e1 78
klauss 0:4d17cd9c8f9d 79 delete( sip );
klauss 0:4d17cd9c8f9d 80 this->sip = NULL;
klauss 0:4d17cd9c8f9d 81 }else{
klauss 78:1353744f01e1 82 if( sip->registry() > 0x00 ) reset_elapsed_time();
klauss 81:3656f00ab3db 83 if( debug_aging ) debug_msg( "%d Registered - ( %f )", ext, __TIMEOUT__ - t.read() );
klauss 0:4d17cd9c8f9d 84 }
klauss 0:4d17cd9c8f9d 85 }
klauss 0:4d17cd9c8f9d 86
klauss 0:4d17cd9c8f9d 87 void Call_Box::unregistry( void ){
klauss 0:4d17cd9c8f9d 88 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 89 this->sip = new Sip( ext, port );
klauss 87:679ee0d594a9 90 if( sip == NULL ){
klauss 87:679ee0d594a9 91 memory_is_over = true;
klauss 87:679ee0d594a9 92 return;
klauss 87:679ee0d594a9 93 }
klauss 0:4d17cd9c8f9d 94 sip->send_unregistry_pkg();
klauss 0:4d17cd9c8f9d 95
klauss 0:4d17cd9c8f9d 96 delete( sip );
klauss 0:4d17cd9c8f9d 97 this->sip = NULL;
klauss 0:4d17cd9c8f9d 98 }else{
klauss 0:4d17cd9c8f9d 99 sip->send_unregistry_pkg();
klauss 0:4d17cd9c8f9d 100 }
klauss 0:4d17cd9c8f9d 101 }
klauss 0:4d17cd9c8f9d 102
klauss 0:4d17cd9c8f9d 103 VZ_call * Call_Box::invite( void ){
klauss 29:7246460b73f8 104 t.stop();
klauss 29:7246460b73f8 105 VZ_call * call = NULL;
klauss 29:7246460b73f8 106
klauss 0:4d17cd9c8f9d 107 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 108 this->sip = new Sip( ext, port );
klauss 0:4d17cd9c8f9d 109
klauss 87:679ee0d594a9 110 if( sip != NULL ){
klauss 87:679ee0d594a9 111 memory_is_over = true;
klauss 87:679ee0d594a9 112 return( NULL );
klauss 87:679ee0d594a9 113 }else{
klauss 87:679ee0d594a9 114 call = sip->invite();
klauss 87:679ee0d594a9 115
klauss 87:679ee0d594a9 116 delete( sip );
klauss 87:679ee0d594a9 117 this->sip = NULL;
klauss 87:679ee0d594a9 118 }
klauss 29:7246460b73f8 119 }else{
klauss 29:7246460b73f8 120 call = sip->invite();
klauss 0:4d17cd9c8f9d 121 }
klauss 29:7246460b73f8 122
klauss 29:7246460b73f8 123 if( debug_cb ) debug_msg("Call returned value :: %p ", (void * )call );
klauss 29:7246460b73f8 124 if( call == NULL ) t.start();
klauss 29:7246460b73f8 125 return( call );
klauss 0:4d17cd9c8f9d 126 }
klauss 0:4d17cd9c8f9d 127
klauss 0:4d17cd9c8f9d 128 /* Retorna
klauss 0:4d17cd9c8f9d 129 = 0 :: ok
klauss 0:4d17cd9c8f9d 130 < 0 :: tive problemas
klauss 0:4d17cd9c8f9d 131 > 0 :: devo remover essa call do vetor de calls
klauss 0:4d17cd9c8f9d 132 */
klauss 0:4d17cd9c8f9d 133 int Call_Box::listen_SIP_server( void ){
klauss 0:4d17cd9c8f9d 134 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 135 if( status == cb_on_call || status == cb_idle ){
klauss 0:4d17cd9c8f9d 136 this->sip = new Sip( ext, port );
klauss 87:679ee0d594a9 137
klauss 87:679ee0d594a9 138 if( sip == NULL ){
klauss 87:679ee0d594a9 139 memory_is_over = true;
klauss 87:679ee0d594a9 140 return( -1 );
klauss 87:679ee0d594a9 141 }else{
klauss 87:679ee0d594a9 142 int out_read = sip->listen_SIP_server();
klauss 87:679ee0d594a9 143
klauss 87:679ee0d594a9 144 delete( sip );
klauss 87:679ee0d594a9 145 this->sip = NULL;
klauss 87:679ee0d594a9 146 return( out_read );
klauss 87:679ee0d594a9 147 }
klauss 0:4d17cd9c8f9d 148 }else return( 0 );
klauss 0:4d17cd9c8f9d 149 }else{
klauss 0:4d17cd9c8f9d 150 if( status == cb_on_call || status == cb_idle ){
klauss 13:ae278302dffe 151 return ( sip->listen_SIP_server() );
klauss 13:ae278302dffe 152 } else return( 0 );
klauss 0:4d17cd9c8f9d 153 }
klauss 0:4d17cd9c8f9d 154 }
klauss 0:4d17cd9c8f9d 155
klauss 0:4d17cd9c8f9d 156 void Call_Box::set_msg_id( uint8_t msg_id ){
klauss 78:1353744f01e1 157 this->msg_id = ( msg_id > 0x10 ) ? msg_id : 0x11;
klauss 0:4d17cd9c8f9d 158 }
klauss 0:4d17cd9c8f9d 159 uint8_t Call_Box::get_msg_id( void ){ return( this->msg_id ); }
klauss 0:4d17cd9c8f9d 160
klauss 0:4d17cd9c8f9d 161 void Call_Box::set_timeslice( uint8_t timeslice ){
klauss 0:4d17cd9c8f9d 162 this->timeslice = timeslice;
klauss 0:4d17cd9c8f9d 163 }
klauss 0:4d17cd9c8f9d 164 uint8_t Call_Box::get_timeslice( void ){ return( this->timeslice ); }
klauss 0:4d17cd9c8f9d 165
klauss 0:4d17cd9c8f9d 166 //void Call_Box::set_sip( Sip * sip ){
klauss 0:4d17cd9c8f9d 167 // this->sip = sip;
klauss 0:4d17cd9c8f9d 168 //}
klauss 0:4d17cd9c8f9d 169
klauss 0:4d17cd9c8f9d 170 void Call_Box::send_bye( void ){
klauss 0:4d17cd9c8f9d 171 if( this->sip == NULL ){
klauss 0:4d17cd9c8f9d 172 this->sip = new Sip( ext, port );
klauss 0:4d17cd9c8f9d 173
klauss 87:679ee0d594a9 174 if( sip == NULL ){
klauss 87:679ee0d594a9 175 memory_is_over = true;
klauss 87:679ee0d594a9 176 return;
klauss 87:679ee0d594a9 177 }else{
klauss 13:ae278302dffe 178
klauss 87:679ee0d594a9 179 sip->send_bye();
klauss 87:679ee0d594a9 180
klauss 87:679ee0d594a9 181 delete( sip );
klauss 87:679ee0d594a9 182 sip = NULL;
klauss 87:679ee0d594a9 183 }
klauss 0:4d17cd9c8f9d 184 }else{
klauss 0:4d17cd9c8f9d 185 sip->send_bye();
klauss 0:4d17cd9c8f9d 186 }
klauss 1:a1758104fa1d 187 }
klauss 1:a1758104fa1d 188
klauss 1:a1758104fa1d 189 void Call_Box::reset_sip( void ){
klauss 1:a1758104fa1d 190 if( this->sip != NULL ) delete( this->sip );
klauss 1:a1758104fa1d 191
klauss 1:a1758104fa1d 192 this->sip = new Sip( ext, port );
klauss 87:679ee0d594a9 193
klauss 87:679ee0d594a9 194 if( sip == NULL ) memory_is_over = true;
klauss 14:22a35f575502 195 }
klauss 14:22a35f575502 196
klauss 14:22a35f575502 197 void Call_Box::set_sip_status( int status ){
klauss 14:22a35f575502 198 if( this->sip != NULL ){
klauss 14:22a35f575502 199 this->sip->status = status;
klauss 14:22a35f575502 200 }else{
klauss 78:1353744f01e1 201 if( debug_cb) debug_msg("Sip equals NULL o.O");
klauss 14:22a35f575502 202 }
klauss 29:7246460b73f8 203 }
klauss 29:7246460b73f8 204
klauss 29:7246460b73f8 205 void Call_Box::re_start_timer( void ){
klauss 29:7246460b73f8 206 t.start();
klauss 78:1353744f01e1 207 }
klauss 78:1353744f01e1 208
klauss 78:1353744f01e1 209 int8_t Call_Box::get_next_aging_type( void ){
klauss 78:1353744f01e1 210 next_aging_type--;
klauss 78:1353744f01e1 211
klauss 78:1353744f01e1 212 if( ( next_aging_type % 2 ) == 0 || ( next_aging_type > __CYCLES__ - 15 ) ) return( REQUEST_REGISTRY );
klauss 78:1353744f01e1 213
klauss 78:1353744f01e1 214 else if( ( next_aging_type % 7 ) == 0 ) return( REQUEST_PEND );
klauss 78:1353744f01e1 215
klauss 78:1353744f01e1 216 else return( REQUEST_PING );
klauss 81:3656f00ab3db 217 }
klauss 81:3656f00ab3db 218
klauss 81:3656f00ab3db 219 void Call_Box::set_invite_response_ok( void ){ this->invite_response = true; }
klauss 81:3656f00ab3db 220 void Call_Box::set_invite_response_pending( void ){ this->invite_response = false; }
klauss 81:3656f00ab3db 221 bool Call_Box::get_invite_response( void ){ return( this->invite_response ); }
klauss 81:3656f00ab3db 222
klauss 81:3656f00ab3db 223 void Call_Box::set_bye_response_ok( void ){ this->bye_response = true; }
klauss 81:3656f00ab3db 224 void Call_Box::set_bye_response_pending( void ){ this->bye_response = false; }
klauss 81:3656f00ab3db 225 bool Call_Box::get_bye_response( void ){ return( this->bye_response ); }