Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Revision:
77:e8c0253b57bc
Parent:
76:9f5f99dd895a
Child:
78:1353744f01e1
--- a/main.cpp	Tue Nov 25 17:37:56 2014 +0000
+++ b/main.cpp	Tue Nov 25 18:43:01 2014 +0000
@@ -218,6 +218,34 @@
             }
             pshowcb = 0;
         }
+        /*
+        if( cb_status ){
+            cb_status = false;
+            send_msg("Registred %d CBx", v_cb->size() );
+            char str[ 1024 ];
+            
+            if( v_cb->size() == 0 ){
+                send_msg("{-/-}");
+            }else if( v_cb->size() == 1 ){
+                Call_Box * cb = ( Call_Box * )v_cb->get_element( 0 );
+                send_msg(" %i ", cb->get_ext() );    
+            }else{
+                register uint8_t i;
+                char aux[ 16 ];
+                Call_Box * cb = NULL;
+                for( i = 0; i < v_cb->size() - 1; i++ ){
+                    cb = ( Call_Box * )v_cb->get_element( i );
+                    sprintf( aux, "%i, ", cb->get_ext() );
+                    strcat( str, aux );
+                    if( ( i != 0 ) && !( ( i + 1 ) % 8 ) ) strcat( str, "\n\r " );
+                }
+                cb = ( Call_Box * )v_cb->get_element( i );
+                sprintf( aux, "%i ", cb->get_ext() );
+                strcat( str, aux );
+                send_msg( "%s", str );
+            }
+        }
+        */
         
         if( pflood == 1 ) flood();               
         
@@ -369,7 +397,7 @@
             
             case __INVITE__ : {
                 invite_counter++;
-                if( debug_invite ) debug_msg("Request Invite received from Cbx %i", ext);
+                if( debug_main ) debug_msg("Request Invite received from Cbx %i", ext);
                 /*procura pelo cbx usando como chave o ramal( ext ) - caso nao encontre, cria o objeto e coloca na logica*/
                 Call_Box * cb = __find_CB__( v_cb, ext );
                 if( cb == NULL ){
@@ -380,8 +408,96 @@
                     cb->registry();
                 }
                 cb->reset_elapsed_time();
-                      
-                invite_handler( v_call, v_cb, ts, cb );
+                /* restricao de que so podemos fazer 1 call por vez */
+                /*
+                if( v_call->size() != 0 ){
+                    data[ 0 ] |= BIT7;
+                    cb->set_msg_id( data[ 0 ] );
+                    set_status(cb->status,cb_idle);
+                    cb->set_timeslice( 0x00 );
+                    data[ __TIMESLICE_PLACE__ ] = 0x00;
+                    send2callboxes( __build_cb_package__( ext, port, __INVITE__, 
+                        ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
+                    if( debug_main ) debug_msg( "denying call - another call box on call" );    
+                    break;
+                }
+                */
+                set_status( cb->status, cb_trying );
+                if( debug_main ) debug_msg("Request invite cbx status :: %d", cb->status );
+                //FIXMEj essa logica deve estar la embaixo, fora do switch maior, a ideia eh
+                // quando receber um pedido de invite, apenas manda o invite pro server
+                // dai rodar, ver se alguem mandou alguma coisa e voltar a tratar com o 
+                // * ver se ja esta tudo ok, a ideia é fazer esse pedido de invite funcionar
+                // assincrono.
+                switch( cb->status ){
+                    case cb_on_call : {
+                        // a priori, nao fazer nada
+                        //data[ __TIMESLICE_PLACE__ ] = 0x00;
+                        //send2callboxes( __build_cb_package__( ext, port, __BYE__, 
+                        //    ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
+                    }break;
+                    
+                    case cb_ringing : {
+                        // tratar sip 2
+                    }break;
+                
+                    case cb_trying : {
+                        data[ 0 ] |= BIT7;
+                        cb->set_msg_id( data[ 0 ] );
+                        cb->set_timeslice( ts->get_timeslice() );
+                        if( cb->get_timeslice() == 0x00 ){
+                            //sem timeslice pra tratar com o *
+                            set_status(cb->status,cb_idle);
+                            data[ __TIMESLICE_PLACE__ ] = 0x00;
+                            send2callboxes( __build_cb_package__( ext, port, __INVITE__, 
+                                ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
+                            set_status( cb->sip->status, sip_idle );
+                            if( debug_main ) debug_msg( "-- Trying -- without TS -- %s ", write_buffer );
+                        }else{
+                            set_status(cb->status,cb_busy);
+                            data[ __TIMESLICE_PLACE__ ] = cb->get_timeslice();
+                            send2callboxes( __build_cb_package__( ext, port, __INVITE__, 
+                                ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
+                            
+                            if( debug_main ) debug_msg(" -- %d on %d -- ", cb->get_ext(), data[ __TIMESLICE_PLACE__ ] );
+                             
+                            cb->set_msg_id( ( ( cb->get_msg_id() ) + 1 ) & ( BIT7 ^ 0xff ) );
+                            
+                            VZ_call * call = cb->invite();
+                        
+                            if( call != NULL ){
+                                v_call->add( call );
+                                set_status(cb->status,cb_on_call);
+                                
+                                if( debug_main ) debug_msg(" -- %d on %d -- ", cb->get_ext(), data[ __TIMESLICE_PLACE__ ] );
+                                send2callboxes( __build_cb_package__( ext, port, __INVITE__, 
+                                    ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
+                                if( debug_main ) debug_msg( "-- Trying -- accepting call request --" );
+                            }else{
+                                set_status( cb->status,cb_idle);
+                                ts->return_timeslice( cb->get_timeslice() );
+                                cb->set_timeslice( 0x00 );
+                                data[ __TIMESLICE_PLACE__ ] = 0x00;
+                                if( debug_main ) debug_msg(" -- %d on %d -- ", cb->get_ext(), data[ __TIMESLICE_PLACE__ ] );
+                                send2callboxes( __build_cb_package__( ext, port, __CB_BYE__, 
+                                    ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
+                                if( debug_main ) debug_msg( "-- Trying -- denying call request --" );
+                                set_status( cb->sip->status, sip_idle);
+                            }
+                        }
+                    }break;                    
+                    case cb_busy : {
+                        set_status( cb->status,cb_idle);
+                        ts->return_timeslice( cb->get_timeslice() );
+                        cb->set_timeslice( 0x00 );
+                        data[ __TIMESLICE_PLACE__ ] = 0x00;
+                        if( debug_main ) debug_msg(" -- %d on %d -- ", cb->get_ext(), data[ __TIMESLICE_PLACE__ ] );
+                        send2callboxes( __build_cb_package__( ext, port, __CB_BYE__, 
+                            ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
+                        if( debug_main ) debug_msg( "-- Trying -- denying call request << Busy Here >> --" );
+                        set_status( cb->sip->status, sip_idle );
+                    }break;
+                }                            
             }break;
             case __REGISTRY__ : {
                 registry_counter++;
@@ -507,8 +623,6 @@
         
         call_manager( v_call, v_cb, buffer, write_buffer, ts );
         
-        invite_handler( v_call, v_cb, ts, NULL );        
-        
         /*
         static uint8_t flag = 0;
         if( v_call->size() == 0 ){