Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

call_box.h

Committer:
klauss
Date:
2015-11-24
Revision:
137:32dd35a6dbc9
Parent:
135:2f4290590e51

File content as of revision 137:32dd35a6dbc9:

/**
 * @file call_box.h
 * @Synopsis Implementa as funções de gerenciamento do Call_Box 
 * @author Jhonatan Casale
 * @version 1
 * @date 2014-11-06
 * \class Call_Box
 */
#ifndef __CALL_BOX_H__
#define __CALL_BOX_H__

#include <stdint.h>
#include "object.h"
#include "sip.h"
%: include "config_manager.h"
%: include "shared_variables.h"

const int __RESQUEST_TIME__ = 3;

const uint16_t MAX_INVITE_RETRY = 512 * 2;

///< O tempo que a Header demora para "pingar" o Call_Box para saber se esta tudo bem.
const uint8_t __RANGE_TO_REGISTER__ = 150;
///< Doc. later

const uint8_t RTP_REQUEST_PORT_TIMEOUT = 45;

const short int REQUEST_REGISTRY = -1;
const short int REQUEST_PEND = -2;
const short int REQUEST_PING = -4;
///< Valor usado como referencia para registro do equipamento CBx.

const uint8_t __STEP__ = 30;
///< Usado para aumentar o intervalo entre cada ping, fora de uso atualmente.

const uint8_t cb_idle = 1;
///< Representa que o Call_Box esta disponivel

const uint8_t cb_ringing = 2;
///< Representa o Call_Box no status, discando.

const uint8_t cb_trying = 3;
///< Representa o Call_Box no status tentando concluir o pedido de ligação.

const uint8_t cb_on_call = 4;
///< Representa que o Call_Box já esta em uma ligação.

const uint8_t cb_busy = 5;
///< Representa que o Call_Box esta ocupado.

const uint8_t cb_denied = 6;
///< Representa que o pedido de invite do Call_Box foi negado.

const uint8_t cb_bootloader = 7;
///< Representa que o Call_Box esta em atualizacao de firmware  


class Call_Box : public Object {
    private :
        /**
          * @Synopsis Objeto Sip que será usado para tratativas com o servidor.
          *
          * \note Esse objeto é criado no construtor da classe Call_Box, com os mesmos parâmetros passados para o 
          * construtor da classe Call_Box.
          */
        Sip * sip;
    
        bool invite_response;
        bool bye_response;
        bool overflow;
        
        int ext;  // ramal
        int port; // porta
        int sip_socket_fd;
        int shift_port;
        
        /**
          * @Synopsis Representa o status do Call_Box.
          *
          * \note Este valor sempre é atualizado ( por convenção ) com o uso da macro set_status(a,b), definida em utils.h
          */
        uint8_t status;
        
        uint8_t overflow_times;
        uint8_t msg_id;
        uint8_t timeslice;
        uint8_t next_aging_type;
        uint8_t  invite_try_number;
        
        uint16_t invite_retry_count;
        uint16_t invite_counter;
        
        //FIXME remove timeout
        float timeout;
        
        Timer t;
        Timer rtp_timer; // usado pra controlar o timeout dos pedidos de porta rtp
        Timer invite_timer;
        
        Call_Box * pair;
    public :
                /**
                 * @Synopsis Cria um objeto Call_Box
                 *
                 * @param ext Vincula o objeto ao ramal informado
                 * @param port Vincula o objeto a porto informada.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  int ext = 5121;
                 *  int port = 5021;
                 *  Call_Box * cb = new Call_Box( ext, port );
                 * ...
                 * @endcode
                 */
        Call_Box ( const int ext, const int port );

                /**
                 * @Synopsis Destroi o objeto Call_Box
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  delete( cb );
                 * ...
                 * @endcode
                 * \note Deleta o objeto Sip nesse processo.
                 */
        ~Call_Box ( void );
        
                /**
                 * @Synopsis Informa o ramal vinculado ao objeto Call_Box.
                 *
                 * @return O numero do ramal contido atualmente no objeto Call_Box
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  int ext = cb->get_ext();
                 * ...
                 * @endcode
                 */
        int get_ext ( void );

                /**
                 * @Synopsis Informa o numero da porta vinculada ao objeto Call_Box.
                 *
                 * @return O numero da porta contido atualmente no objeto Call_Box
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  int port = cb->get_port();
                 * ...
                 * @endcode
                 */
        int get_port ( void );
       
                /**
                 * @Synopsis Informa o tempo decorrido.
                 * \note O timer de cada objeto é iniciado no momento da criação do objeto Call_Box.
                 *
                 * @return O tempo decorrido desde a ultima vez que o timer do objeto foi resetado.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  float elapsed_time = cb->get_elapsed_time();
                 * ...
                 * @endcode
                 */
        uint16_t get_elapsed_time ( void );

                /**
                 * @Synopsis Reseta o timer do objeto Call_Box.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  cb->reset_elapsed_time();
                 * ...
                 * @endcode
                 */
        void reset_elapsed_time ( void );

                /**
                 * @Synopsis Invoca o método de registro deste Call_Box ( via objeto Sip vinculado ).
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  cb->registry();
                 * ...
                 * @endcode
                 */
        int registry ( void );

                /**
                 * @Synopsis Invoca o método de pedido de ligação.
                 *
                 * @return Um ponteiro para um objeto VZ_call quando o pedido foi aceito pelo server, NULL caso em que o pedido de invite foi 
                 * negado pelo server ou aconteceu timeout do invite.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  VZ_call * call = cb->invite();
                 * ...
                 * @endcode
                 */
        VZ_call * invite ( void );

                /**
                 * @Synopsis Valor inicial para preenchimento deste campo nos pacotes trocados entre Header/Call_Box.
                 *
                 * @param msg_id Seta o valor recebido como parâmetro na variável do objeto.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  cb->set_msg_id( 0x12 );
                 * ...
                 * @endcode
                 */
        void set_msg_id ( const uint8_t msg_id );

                /**
                 * @Synopsis Informa o numero atual de msg_id que será enviado na próxima mensagem desse Call_Box
                 *
                 * @return O valor atual de msg_id.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  uint8_t msg_id = cb->get_msg_id();
                 * ...
                 * @endcode
                 */
        uint8_t get_msg_id ( void );

        
                /**
                 * @Synopsis Armazena o valor de Timeslice atualmente em uso pelo Call_Box.
                 *
                 * @param timeslice O valor que corresponde ao Timeslice disponivel para comunição do Call_Box
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  Timeslice * ts = new Timeslice();
                 *  cb->set_timeslice( ts->get_timeslice() );
                 * ...
                 * @endcode
                 */
        void set_timeslice ( const uint8_t timeslice );

                /**
                 * @Synopsis Informa o timeslice ocupado atualmente pelo Call_Box.
                 *
                 * @return O valor do timeslice em uso pelo Call_Box.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  uint8_t ts = cb->get_timeslice();
                 * ...
                 * @endcode
                 */
        uint8_t get_timeslice ( void );
                
                /**
                 * @Synopsis Faz chamada ( via objeto Sip vinculado ) a função que irá escutar a porta SIP associada neste Call_Box.
                 *
                 * @return Um valor menor que zero se a execução falhar, igual a zero se a execução for bem sucedida e nenhum dado foi
                 * recebido, ou quando a execução foi bem sucedida e nenhuma mensagem que demanda tramamento foi recebida;  um numero 
                 * maior do que zero, caso tenha recebido um pacote do tipo "bye" do servidor; este numero corresponde ao ramal do Call_Box.
                 * 
                 * Exemplo:
                 * @code
                 * ...
                 *  int returned_value = cb->listen_SIP_server();
                 * ...
                 * @endcode
                 */
        int listen_SIP_server ( void );

                /**
                 * @Synopsis Invoca ( via objeto Sip ) o método de envio do pacote de "bye" para o servidor.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  cb->send_bye();
                 * ...
                 * @endcode
                 */
        void send_bye ( void );

                /**
                 * @Synopsis Altera o valor do status do objeto Sip vinculado.
                 *
                 * @param status O novo valor de status que será associado ao objeto Sip vinculado ao Call_Box.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  cb->set_sip_status( 0 );
                 * ...
                 * @endcode
                 */
        void set_sip_status ( const int status );
        
        /*------------------------------------------------------------------------------------------------*/
        bool get_invite_response ( void );
        
        bool time_to_retry ( void );
        
        bool is_rtp_timer_timeout ( void );
        
        bool get_overflow_flag ( void );
        
        
        uint8_t get_invite_try_number ( void );
        
        uint8_t msg_id_update ( void );
        
        uint8_t get_overflow_times ( void );
        
        uint16_t get_invite_retry_count ( void );
        
        
        int get_sip_status ( void );
        
        void set_sip_status ( const uint8_t sip_status );
        
        int get_status ( void );
        
        int get_sip_ext ( void );
        
        int get_sip_port ( void );
        
        int get_timer ( void );
        
        int get_rtp_port ( void );
        
        int print_yourself ( void );
        
        int get_sip_socket_fd ( void );
        
        int sip_udp_incomming_pkg ( void );
        
        int call_init ( const int timeslice );
        
        int call_end ( const bool send_bye_to_ast = true  );
        
        int call_confirmed ( void );
        
        int retry_send_invite_pkg_to_ast ( void );
        
        int sip_print_yourself ( void );
        
        
        void cb_set_status ( const uint8_t status );
        
        void set_invite_response_ok ( void );
        
        void set_invite_response_pending ( void );
        
        void set_bye_response_ok ( void );
        
        void reset_cb_status ( void );
        
        void invite_retry_count_reset ( void );
              
        void set_rtp_port ( const int new_rtp_port );
        
        void init_rtp_timer ( void );
        
        void reset_rtp_timer ( void );
        
        void call_config ( void );
        
        void update_time ( void );
        
        Sip * get_sip ( void );
        
        uint16_t get_invite_counter ( void );
            
        uint16_t update_invite_counter ( void );
        
        int update ( void );
        
        Call_Box * get_pair_cbx ( void );
        
        int set_pair_cbx ( Call_Box * new_cbx );
};

#endif