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 74:81c47fff88a5 1 #include "call_manager.h"
klauss 74:81c47fff88a5 2
klauss 78:1353744f01e1 3 // manage ts
klauss 78:1353744f01e1 4
klauss 74:81c47fff88a5 5 VZ_call * __find_Call__( Vector * v_call, int ext ){
klauss 74:81c47fff88a5 6 VZ_call * call = NULL;
klauss 74:81c47fff88a5 7 for( register int i = 0; i < v_call->size(); i++ ){
klauss 74:81c47fff88a5 8 call = ( VZ_call * )v_call->get_element( i );
klauss 74:81c47fff88a5 9 if( call->get_cb_ext() == ext ) return( call );
klauss 74:81c47fff88a5 10 }
klauss 74:81c47fff88a5 11 return( NULL );
klauss 74:81c47fff88a5 12 }
klauss 74:81c47fff88a5 13
klauss 74:81c47fff88a5 14 /* remove calls por timeout */
klauss 74:81c47fff88a5 15 void call_manager( Vector * v_call, Vector * v_cb, uint8_t * data, uint8_t * write_buffer, Timeslice * ts ){
klauss 74:81c47fff88a5 16 for( register int i = 0; i < v_call->size(); i++ ){
klauss 74:81c47fff88a5 17 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 74:81c47fff88a5 18 if( call->is_timetofinish() ){
klauss 74:81c47fff88a5 19 v_call->remove_element( i );
klauss 74:81c47fff88a5 20 Call_Box * cb = __find_CB__( v_cb, call->get_cb_ext() );
klauss 74:81c47fff88a5 21 if( cb ){
klauss 74:81c47fff88a5 22 cb->status = cb_idle;
klauss 74:81c47fff88a5 23 ts->return_timeslice( cb->get_timeslice() );
klauss 74:81c47fff88a5 24 cb->set_timeslice( 0x00 );
klauss 74:81c47fff88a5 25 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 78:1353744f01e1 26 cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 74:81c47fff88a5 27 send2callboxes( __build_cb_package__( cb->get_ext(), cb->get_port(), __CB_BYE__,
klauss 74:81c47fff88a5 28 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 74:81c47fff88a5 29 cb->send_bye();
klauss 74:81c47fff88a5 30 set_status( cb->sip->status, sip_idle );
klauss 74:81c47fff88a5 31 cb->re_start_timer();
klauss 74:81c47fff88a5 32 }
klauss 74:81c47fff88a5 33 delete( call );
klauss 74:81c47fff88a5 34 }
klauss 74:81c47fff88a5 35 }
klauss 78:1353744f01e1 36 }
klauss 78:1353744f01e1 37
klauss 78:1353744f01e1 38 void invite_handler( Vector * v_call, Vector * v_cb, Timeslice * ts, Call_Box * inviting_cb ){
klauss 78:1353744f01e1 39 uint8_t data[ __CB_BUFFER_SIZE__ ];
klauss 78:1353744f01e1 40 uint8_t write_buffer[ __CB_BUFFER_SIZE__ ];
klauss 78:1353744f01e1 41
klauss 78:1353744f01e1 42 if( inviting_cb != NULL ){
klauss 78:1353744f01e1 43 if( inviting_cb->status != cb_on_call ){
klauss 78:1353744f01e1 44 inviting_cb->cb_set_status( cb_trying );
klauss 78:1353744f01e1 45 if( debug_invite ) debug_msg("Request invite cbx status :: cb_trying" );
klauss 78:1353744f01e1 46 }
klauss 78:1353744f01e1 47 }
klauss 78:1353744f01e1 48
klauss 78:1353744f01e1 49 for( register uint8_t i = 0; i < v_cb->size(); i++ ){
klauss 78:1353744f01e1 50 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 78:1353744f01e1 51 if( cb->get_status() == cb_idle || cb->get_status() == cb_on_call ) continue;
klauss 78:1353744f01e1 52
klauss 78:1353744f01e1 53 int ext = cb->get_ext();
klauss 78:1353744f01e1 54 int port = cb->get_port();
klauss 78:1353744f01e1 55
klauss 78:1353744f01e1 56 VZ_call * call = NULL;
klauss 78:1353744f01e1 57
klauss 78:1353744f01e1 58 switch( cb->status ){
klauss 78:1353744f01e1 59 case cb_trying : {
klauss 78:1353744f01e1 60 uint8_t temp = cb->get_msg_id();
klauss 78:1353744f01e1 61 cb->set_msg_id( temp |= BIT7 );
klauss 78:1353744f01e1 62 cb->set_timeslice( ts->get_timeslice() );
klauss 78:1353744f01e1 63 if( cb->get_timeslice() == 0x00 ){
klauss 78:1353744f01e1 64
klauss 78:1353744f01e1 65 cb->cb_set_status( cb_idle );
klauss 78:1353744f01e1 66
klauss 78:1353744f01e1 67 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 78:1353744f01e1 68
klauss 78:1353744f01e1 69 send2callboxes( __build_cb_package__( ext, port, __INVITE__,
klauss 78:1353744f01e1 70 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 78:1353744f01e1 71
klauss 78:1353744f01e1 72 set_status( cb->sip->status, sip_idle );
klauss 78:1353744f01e1 73
klauss 78:1353744f01e1 74 cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 78:1353744f01e1 75
klauss 78:1353744f01e1 76 if( debug_invite ) debug_msg( "-- Trying -- without TS --");
klauss 78:1353744f01e1 77
klauss 78:1353744f01e1 78 return;
klauss 78:1353744f01e1 79 }else{
klauss 78:1353744f01e1 80 data[ __TIMESLICE_PLACE__ ] = cb->get_timeslice();
klauss 78:1353744f01e1 81
klauss 78:1353744f01e1 82 cb->cb_set_status( cb_ringing );
klauss 78:1353744f01e1 83
klauss 78:1353744f01e1 84 send2callboxes( __build_cb_package__( ext, port, __INVITE__,
klauss 78:1353744f01e1 85 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 78:1353744f01e1 86
klauss 78:1353744f01e1 87 if( debug_invite ) debug_msg(" -- %d on TS::%d -- ", cb->get_ext(), data[ __TIMESLICE_PLACE__ ] );
klauss 78:1353744f01e1 88 }
klauss 78:1353744f01e1 89 }break;
klauss 78:1353744f01e1 90 case cb_ringing : {
klauss 78:1353744f01e1 91 call = cb->invite();
klauss 78:1353744f01e1 92
klauss 78:1353744f01e1 93 if( call != NULL ){
klauss 78:1353744f01e1 94 if( __find_Call__( v_call, call->get_cb_ext() ) == NULL ) v_call -> add( call );
klauss 78:1353744f01e1 95
klauss 78:1353744f01e1 96 if( cb->get_sip_status() == sip_on_call ){
klauss 78:1353744f01e1 97
klauss 78:1353744f01e1 98 set_status( cb->status, cb_on_call );
klauss 78:1353744f01e1 99
klauss 78:1353744f01e1 100 data[ __TIMESLICE_PLACE__ ] = cb->get_timeslice();
klauss 78:1353744f01e1 101
klauss 78:1353744f01e1 102 if( debug_invite ) debug_msg("ts::%d", cb->get_timeslice() );
klauss 78:1353744f01e1 103
klauss 78:1353744f01e1 104 cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 78:1353744f01e1 105
klauss 78:1353744f01e1 106 send2callboxes( __build_cb_package__( ext, port, __INVITE__, ( char * )data,
klauss 78:1353744f01e1 107 cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 78:1353744f01e1 108
klauss 78:1353744f01e1 109 if( debug_invite ) debug_msg( "-- ringing -- accepting call request --" );
klauss 78:1353744f01e1 110 }
klauss 78:1353744f01e1 111 }else{
klauss 78:1353744f01e1 112 if( cb->get_sip_status() == sip_denied ) cb->cb_set_status( cb_denied );
klauss 78:1353744f01e1 113 }
klauss 78:1353744f01e1 114 }break;
klauss 78:1353744f01e1 115 case cb_busy : {
klauss 78:1353744f01e1 116 set_status( cb->status, cb_idle );
klauss 78:1353744f01e1 117 ts->return_timeslice( cb->get_timeslice() );
klauss 78:1353744f01e1 118 cb->set_timeslice( 0x00 );
klauss 78:1353744f01e1 119 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 78:1353744f01e1 120 if( debug_invite ) debug_msg(" -- %d on %d -- ", cb->get_ext(), data[ __TIMESLICE_PLACE__ ] );
klauss 78:1353744f01e1 121
klauss 78:1353744f01e1 122 cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 78:1353744f01e1 123
klauss 78:1353744f01e1 124 send2callboxes( __build_cb_package__( ext, port, __CB_BYE__,
klauss 78:1353744f01e1 125 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 78:1353744f01e1 126
klauss 78:1353744f01e1 127 if( debug_invite ) debug_msg( "-- Trying -- denying call request << Busy Here >> --" );
klauss 78:1353744f01e1 128
klauss 78:1353744f01e1 129 for( register uint8_t i = 0; i < v_call->size(); i++ ){
klauss 78:1353744f01e1 130 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 78:1353744f01e1 131 if( call->get_cb_ext() == cb->get_ext() ){
klauss 78:1353744f01e1 132 v_call->remove_element( i );
klauss 78:1353744f01e1 133 delete( call );
klauss 78:1353744f01e1 134 break;
klauss 78:1353744f01e1 135 }
klauss 78:1353744f01e1 136 }
klauss 78:1353744f01e1 137
klauss 78:1353744f01e1 138 cb->send_bye();
klauss 78:1353744f01e1 139 set_status( cb->sip->status, sip_idle );
klauss 78:1353744f01e1 140 cb->re_start_timer();
klauss 78:1353744f01e1 141 }break;
klauss 78:1353744f01e1 142 case cb_denied : {
klauss 78:1353744f01e1 143 ts->return_timeslice( cb->get_timeslice() );
klauss 78:1353744f01e1 144 cb->set_timeslice( 0x00 );
klauss 78:1353744f01e1 145 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 78:1353744f01e1 146 if( debug_invite ) debug_msg(" -- %d on %d -- ", cb->get_ext(), data[ __TIMESLICE_PLACE__ ] );
klauss 78:1353744f01e1 147
klauss 78:1353744f01e1 148 cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 78:1353744f01e1 149
klauss 78:1353744f01e1 150 send2callboxes( __build_cb_package__( ext, port, __CB_BYE__,
klauss 78:1353744f01e1 151 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 78:1353744f01e1 152
klauss 78:1353744f01e1 153 for( register uint8_t i = 0; i < v_call->size(); i++ ){
klauss 78:1353744f01e1 154 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 78:1353744f01e1 155 if( call->get_cb_ext() == cb->get_ext() ){
klauss 78:1353744f01e1 156 v_call->remove_element( i );
klauss 78:1353744f01e1 157 delete( call );
klauss 78:1353744f01e1 158 break;
klauss 78:1353744f01e1 159 }
klauss 78:1353744f01e1 160 }
klauss 78:1353744f01e1 161
klauss 78:1353744f01e1 162 if( debug_invite ) debug_msg( "-- Trying -- denying call request --" );
klauss 78:1353744f01e1 163 set_status( cb->status, cb_idle );
klauss 78:1353744f01e1 164 set_status( cb->sip->status, sip_idle );
klauss 78:1353744f01e1 165 }break;
klauss 78:1353744f01e1 166 }
klauss 78:1353744f01e1 167 }
klauss 74:81c47fff88a5 168 }