Modularizando o src
Dependencies: EALib EthernetInterface_vz mbed-rtos mbed
Fork of header_main_colinas_V0-20-09-14 by
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
