![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Modularizando o src
Dependencies: EALib EthernetInterface_vz mbed-rtos mbed
Fork of header_main_colinas_V0-20-09-14 by
Diff: sip.h
- Revision:
- 119:ee6a53069455
- Parent:
- 114:472502b31a12
- Child:
- 121:ee02790d00b7
--- a/sip.h Fri Apr 24 13:54:24 2015 +0000 +++ b/sip.h Thu Apr 30 15:42:41 2015 +0000 @@ -14,66 +14,71 @@ #include <string.h> #include "mbed.h" #include "EthernetInterface.h" - #include "call.h" #include "vz_protocol.h" #include "parallelcpld.h" // need for send confort song to CBx #include "debug.h" #include "shared_variables.h" -#define __INVITE_MAX_WAITING_TIME__ 45//30 +const uint8_t INVITE_MAX_WAITING_TIME = 45; ///< Indica o timeout de espera de resposta de pedido de ligação para o servidor, após esse tempo responde ligação encerrado para o Call_box -#define SIP_MAXFIELDSIZE 256 +const uint16_t SIP_MAXFIELDSIZE = 256; ///< Define o tamanho máximo de algumas mensagens usadas na negociação Sip. - #define SIP_MAXMSGSIZE 2048 +const uint16_t SIP_MAXMSGSIZE = 2048; ///< Define o tamanho máximo das mensagens enviadas, porém, fora de uso atualmente. -#define SIP_REGISTER_EXPIRES 120 +const uint8_t SIP_REGISTER_EXPIRES = 120; ///< Define o timeout do registro no servidor asterisk ( * ), porém, hardcoded atualmente. -#define DRAMBASEADDR 0xa0000000 +const uint32_t DRAMBASEADDR = 0xa0000000; ///< Indica o inicio do bloco DRAM, porém, fora de uso atualmente. -#define SIP_ALLOW "Allow: ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, REFER" -/* #define SIP_ALLOW "Allow: ACK, BYE, CANCEL, INVITE, OPTIONS" */ +static const char SIP_ALLOW[] = "Allow: ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, REFER"; ///< String de composição de pacotes enviados pela Header para o * -#define sip_idle 0 -#define sip_waiting_trying 1 << 1 -#define sip_trying 1 << 2 -#define sip_ringing 1 << 3 -#define sip_busy 1 << 4 -#define sip_ok 1 << 5 // don't used -#define sip_on_call 1 << 6 -#define sip_denied 1 << 7 +static char fill_random_aux[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789pP"; + +const uint8_t sip_idle = 0; +const uint8_t sip_waiting_trying = 1 << 1; +const uint8_t sip_trying = 1 << 2; +const uint8_t sip_ringing = 1 << 3; +const uint8_t sip_busy = 1 << 4; +const uint8_t sip_ok = 1 << 5; // don't used +const uint8_t sip_on_call = 1 << 6; +const uint8_t sip_denied = 1 << 7; class Sip{ private : - int id; - char server_ip[20]; - int server_port; - char my_ip[20]; - int my_port; - int my_ext; - int my_rtp_port; - char my_display[20]; - int peer_ext; - char fill_random_aux[ 65 ]; + int my_ext; + int my_port; + int peer_ext; + int server_port; + int my_rtp_port; + + int listen_SIP_server_return; + int last_cseq; + + char server_ip[ 20 ]; + char my_ip[ 20 ]; + char my_display[ 20 ]; + char SVNREV[ 16 ]; + char buffer[ 1024 ]; char last_invite_tag[ SIP_MAXFIELDSIZE ]; char last_invite_callid[ SIP_MAXFIELDSIZE ]; - char SVNREV[ 16 ]; - char buffer[ 1024 ]; - UDPSocket sock; - Endpoint sip_server; + char last_branch[ SIP_MAXFIELDSIZE ]; + void __init_sock__( void ); void __end_sock__( void ); void __reconnect__( void ); - bool muted; - int invite_pkg_sent; + + bool waiting; + + UDPSocket sock; + + Endpoint sip_server; + VZ_call * call; + Timer invite_timer; - int ok_sent; - bool waiting; - uint16_t length_muted; - int listen_SIP_server_return; + public : uint8_t status; ///< Representa o status do objeto Sip em dado momento. @@ -91,26 +96,7 @@ * ... * @endcode */ - Sip( int id, uint16_t my_port ); - - /** - * @Synopsis Cria um objeto Sip setando todos os parametros passados. - * - * @param server_ip O endereço IP do servidor para o qual será encaminhado pedidos de ligação, registro, etc. - * @param server_port A porta deste servidor para o qual os pacotes eth serão encaminhados. - * @param my_ip O endereço IP do objeto Sip para tratativa com o server. - * @param my_port A porta do objeto Sip para recebimento de pacotes. - * @param my_ext O identificador do objeto ( por definição de projeto o ramal ( ext ) ). - * @param peer_ext O ramal do servidor, para onde os pedidos de chamada serão solicitados. - * @param id O identificador único do objeto Sip, que por convenção, deve ser o mesmo que o ramal. - * - * Exemplo: - * - * @code - * Sip * sip = new Sip( "192.168.120.200", 5075, "192.168.120.171", 812, 851, 913, 851 ); - * @endcode - */ - //Sip( char * server_ip, int server_port, char * my_ip, int my_port, int my_ext, int peer_ext, int id ); + Sip( int my_ext, uint16_t my_port ); /** * @Synopsis Destroi o objeto Sip @@ -237,7 +223,7 @@ * ... * @endcode */ - int get_my_rtp_port( void ); + int get_my_rtp_port( void ); /** * @Synopsis Efetivamente cria o pacote de registro. @@ -249,15 +235,6 @@ char * build_registry_package( char * buffer ); /** - * @Synopsis Efetivamente cria um pacote para desregistrar o objeto no server. - * - * @param buffer Recebe um ponteiro para uma região de memória onde irá escrever o pacote de desregistro. - * - * @return Um ponteiro para o inicio do pacote montado ( mesmo endereço passado como parâmetro ). - */ - char * build_unregistry_package( char * buffer ); - - /** * @Synopsis Efetivamente cria um pacote de invite ( pedido de chamada ) do Call_box para o server. * * @param s Um ponteiro para uma região de memória onde irá escrever o pacote de invite. @@ -266,7 +243,7 @@ * * @return */ - char * build_invite_package( char * s, char * callbox_string, int * cseq ); + char * build_invite_package( char * s, char * callbox_string, int * cseq, bool retry = false ); /** * @Synopsis Efetivamente cria um pacote de "despedida" para o servidor, usado para encerrar ligações. @@ -275,7 +252,7 @@ * * @return Um ponteiro para o inicio do pacote montado ( mesmo endereço passado como parâmetro ). */ - char * build_bye_package( char * buffer ); + char * build_bye_package( char * buffer ); /** * @Synopsis Efetivamente cria um pacote de ack de mensagem recebida. @@ -285,7 +262,7 @@ * * @return Um ponteiro para o inicio do pacote montado ( mesmo endereço passado como parâmetro ). */ - char * build_ack_package( char * buffer, unsigned char * orig ); + char * build_ack_package( char * buffer, unsigned char * orig ); /** * @Synopsis @@ -296,7 +273,7 @@ * * @return Um ponteiro para o inicio do pacote montado ( mesmo endereço passado como parâmetro ). */ - char * build_generic_reply_package( char * s, unsigned char * orig, char * tag ); + char * build_generic_reply_package( char * s, unsigned char * orig, char * tag ); /** * @Synopsis Cria um pacote genérico de resposta. @@ -306,7 +283,7 @@ * * @return Um ponteiro para o inicio do pacote montado ( mesmo endereço passado como parâmetro ). */ - char * build_trying_package( char * buffer, unsigned char * orig ); + char * build_trying_package( char * buffer, unsigned char * orig ); /** * @Synopsis @@ -316,7 +293,7 @@ * * @return Um ponteiro para o inicio do pacote montado ( mesmo endereço passado como parâmetro ). */ - char * build_busy_package( char * buffer, unsigned char * orig ); + char * build_busy_package( char * buffer, unsigned char * orig ); /** * @Synopsis @@ -326,7 +303,7 @@ * * @return Um ponteiro para o inicio do pacote montado ( mesmo endereço passado como parâmetro ). */ - char * build_reply_package( char * buffer, unsigned char * orig ); + char * build_reply_package( char * buffer, unsigned char * orig ); /** * @Synopsis Preenche de forma aleatótia 16 posições de memória. @@ -345,14 +322,14 @@ * * @return Um ponteiro para o inicio das posições preenchidas ( mesmo endereço do parâmetro passado ). */ - char * fill_random( char * buffer, int size ); + char * fill_random( char * buffer, int size ); /** * @Synopsis Gera aleatóriamente a porta RTP de onde os dados de audiao serão enviados da Header. * * @return O nro da porta que será usada na negociação Sip. */ - int fill_random_rtp_port( void ); + int fill_random_rtp_port( void ); /** * @Synopsis Dado um pacote recebido do server, decodifica o nro cseq. @@ -372,7 +349,7 @@ * * @return Um ponteiro para o inicio da posição de memória onde escrevemos o branch ( mesma passada como parâmentro ). */ - char * decode_branch( unsigned char * package, char * branch ); + char * decode_branch( unsigned char * package, char * branch ); /** * @Synopsis Busca por uma determinado substring em um pacote recebido do servidor. Copiando o restando desse pacote para @@ -386,61 +363,7 @@ * @return 1, caso tenha encontrado a string tag contida no package, copia o restando do conteudo de package para out e retorna 1, * retorna 0 caso a substring não seja encontrada. */ - int decode_gettag( unsigned char * package, char * tag, char * out ); - - /** - * @Synopsis Esta função deveria mudar a conexão com o servidor, caso o mesmo caia. Porém, não em uso. - */ - void change_sip_server(); - - /** - * @Synopsis Obtém o nro de IP do servidor que irá sediar os pedidos de ligações e demais tratamentos, em caso do primeiro - * server vir a cair, porém, função não em uso. - * - * @param server_ip Um ponteiro que aponta para a posição de memória onde será escrito o valor do IP do servidor. - * - * @return Um ponteiro para o inicio do endereço IP do server ( mesmo passado como parametro ) - * - * Exemplo: - * @code - * ... - * char new_ip[ 16 ]; - * strcpy( new_ip, sip->get_next_server_ip() ); - * ... - * @endcode - */ - char * get_next_server_ip( char *server_ip ); - - /** - * @Synopsis Obtém o nro de IP do servidor que irá sediar os pedidos de ligações e demais tratamentos, em caso do primeiro - * server vir a cair. Porém, função não em uso. - * - * @return O nro da porta de comunicação com o próximo server. - * - * Exemplo: - * @code - * ... - * int port = sip->get_next_server_port(); - * ... - * @endcode - */ - int get_next_server_port(); - - - /** - * @Synopsis Obtém o nro do ramal de comunicação com o proximo servidor Sip, nos casos em que o primeiro servidor passar por - * instabilidade, atualmente, não em uso. - * - * @return O valor do ramal de comunicação com o promixo servidor. - * - * Exemplo: - * @code - * ... - * int next_server_ext = sip->get_next_server_ext(); - * ... - * @endcode - */ - int get_next_server_ext(); + int decode_gettag( unsigned char * package, char * tag, char * out ); /** * @Synopsis Recebe um ramal de comunicação com o servidor, realizando solicitações futuras com esse ramal. @@ -454,7 +377,7 @@ * ... * @endcode */ - void set_server_ext( int new_server_ext ); + void set_server_ext( int new_server_ext ); /** * @Synopsis Recebe uma porta de comunicação com o servidor, setando e realizando comunicaões entre Header-Server atraves @@ -469,7 +392,7 @@ * ... * @endcode */ - void set_server_port( int new_server_port ); + void set_server_port( int new_server_port ); /** * @Synopsis Seta ramal de comunicação Sip da Header. @@ -484,7 +407,7 @@ * @endcode * */ - void set_ext( int ext ); + void set_ext( int ext ); /** * @Synopsis Seta a porta de comunicação Sip da Header. @@ -500,7 +423,7 @@ * * */ - void set_port( int port ); + void set_port( int port ); /** * @Synopsis Seta o valor passado como parâmetro como sendo o endeço IP de contato do servidor. @@ -514,7 +437,7 @@ * ... * @endcode */ - void set_server_ip( char * new_server_ip ); + void set_server_ip( char * new_server_ip ); /** * @Synopsis Responsavel por ouvir o servidor *, verificando se o mesmo esta mandando alguma mensagem, seja Sip ou qualquer outra @@ -523,7 +446,7 @@ * @return 0, sucesso na execução, sem pendencia, ou retorna um nro maior que zero, representando o nro do ramal cuja ligação deve * ser encerrada. */ - int listen_SIP_server( void ); + int listen_SIP_server( void ); /** * @Synopsis Envia efetivamente o pacote de despedita com Call_box pro servidor @@ -535,36 +458,26 @@ * ... * @endcode */ - void send_bye( void ); - - /** - * @Synopsis Esta função Envia efetivamente o pacote de "desregistro" para o servidor. - * - * Exemplo: - * @code - * ... - * sip->send_unregistry_pkg(); - * ... - * @endcode - * - */ - void send_unregistry_pkg( void ); + void send_bye( void ); /** * @Synopsis Retorna o status atual do objeto * * @return O valor correspondente ao status do objeto */ - int get_status( void ); - void sip_set_status( uint8_t status ); - void sip_check_muted( void ); - int get_socket_fd( void ); - int udp_incomming_pkg( void ); - void reset_call( void ); - int get_ext( void ); - int get_port( void ); - int get_sip_rtp_port ( void ); - int print_yourself ( void ); - void set_sip_rtp_port( int ); + int get_status( void ); + + /*------------------------------------------------------------------------------------------------*/ + int get_socket_fd( void ); + int udp_incomming_pkg( void ); + int get_ext( void ); + int get_port( void ); + int get_sip_rtp_port ( void ); + int print_yourself ( void ); + int retry_send_last_invite_pkg_to_ast ( void ); + + void set_sip_rtp_port ( int ); + void sip_set_status( uint8_t status ); + void reset_call( void ); }; #endif \ No newline at end of file