Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

call.cpp

Committer:
klauss
Date:
2015-03-10
Revision:
105:a930035b6556
Parent:
104:62646ef786a3
Child:
108:18a3702650f3

File content as of revision 105:a930035b6556:

#include "call.h"

VZ_call::VZ_call( int cb_ext, int cb_port, int rtp_server_ext, int rtp_server_port ){
    this->cb_ext = cb_ext;
    this->cb_port = cb_port;
    
    this->rtp_server_ext = rtp_server_ext;
    this->rtp_server_port = rtp_server_port;
    this->rtp_server.set_address( __RTP_SEVER_IP__, rtp_server_port );
    this->rtp_sock.set_blocking( false, 0 );
    this->rtp_sock.bind( cb_port ); // rtp port
    //this->rtp_sock.init();
    this->rtp = new RTP( this->cb_ext );
    
    if( rtp == NULL )
    { 
        memory_is_over = true;
        if( debug_memory ) debug_msg("Call_Box cb allocation fail");
    }
    
    t.start();
    finish.start();
    rtpbuf_clear( &( this->rtpbuf ) );
    call_new_counter++;
}

VZ_call::~VZ_call(){
    rtp_sock.close();
    delete( this->rtp );
    call_delete_counter++;
}

char * VZ_call::get_eth_message( int * length ){
    uint8_t * pkg;
    Endpoint rtp_from;
    
    *length = rtp_sock.receiveFrom( rtp_from, server2cb, sizeof( server2cb ) );
    t.reset();
    
    rtpbuf_next( &rtpbuf );
    
    if( *length > 0 ){
        rtpbuf_put( &rtpbuf, *length - ( __RTP_HEADER_SIZE__ + ( server2cb[ 0 ] & 0xf ) ), 
            ( uint8_t * )server2cb + ( __RTP_HEADER_OFFSET__ + ( server2cb[ 0 ] & 0xf ) ) );
    }
    
    pkg = rtpbuf_get( &rtpbuf );
    
    if (pkg != NULL) {
        *length = 240;
        return (char *) pkg;
    }
    *length = 0;
    return NULL;
}

int VZ_call::send_message( char * buffer  ){
    t.reset();
    int send = this->rtp_sock.sendTo( this->rtp_server, buffer, __CB_AUDIO_DATA_SIZE__ + this->rtp->header_size() );
    if( send != __CB_AUDIO_DATA_SIZE__ + this->rtp->header_size() )
    {
        if( debug_reconnect )
        {
            send_msg("Reconnect RTP");
            miss_ftp_udp_send_pkg++;
        }
        reconnect();
    }
    return( send );
}

//uint8_t * VZ_call::build_cb_package( void ){
    // return build_cb_package( cb_ext, cb_port, __AUDIO__, server2cb, buffer );
    // colocar esta funcao novamente pra envio de msg, assim como encapsular melhor a funcao
    // de criacao dos pacotes pro cb em algumas funcoes.
//    return 0x00;
//}

char * VZ_call::build_eth_package( uint8_t * buffer ){
    return this->rtp->build_eth_package( ( char * )buffer );    
}

int VZ_call::get_cb_ext(){ return this->cb_ext; }
int VZ_call::get_cb_port(){ return this->cb_port; }

int VZ_call::get_rtp_server_ext(){ return rtp_server_ext; }
int VZ_call::get_rtp_server_port(){ return rtp_server_port; }
uint8_t * VZ_call::get_cb2server_buffer(){ return cb2server; }
char * VZ_call::get_server2cb_buffer(){ return server2cb; }
inline uint8_t * VZ_call::get_buffer(){ return buffer; }

bool VZ_call::is_timeout( void ){
    return ( t.read() > __CALL_MAX_IDLE_TIME__ ) ? true : false;
}

bool VZ_call::is_timetofinish( void ){
    return ( finish.read() > __MAX_CALL_TIME__ ) ? true : false;
}

int VZ_call::get_elapsed_time( void ){
    return ( finish.read_ms() );
}

void VZ_call::cbx_pkg_idle_timer_reset( void ){
    cbx_pkg_idle_timer.reset();
}

bool VZ_call::cbx_pkg_is_idle( void ){
    return ( cbx_pkg_idle_timer.read() > CBX_PKG_IDLE_MAX_TIME ) ? true : false;
}

void VZ_call::init_cbx_pkg_idle_timer(){
    cbx_pkg_idle_timer.start();
}

void VZ_call::reconnect( void )
{
    this->rtp_sock.close();
    this->rtp_sock.set_blocking( false, 0 );
    this->rtp_sock.bind( cb_port );
}