Пример #1
0
ssize_t us_rawnet_send( us_rawnet_context_t *self, const uint8_t dest_mac[6], const void *payload, ssize_t payload_len )
{
    bool r = false;
    pcap_t *m_pcap = (pcap_t *)self->m_pcap;

    if ( m_pcap )
    {
        uint8_t buffer[2048];
        uint8_t *data = buffer + 14;
        if ( dest_mac )
        {
            memcpy( (void *)buffer, (void *)dest_mac, 6 );
        }
        else
        {
            memcpy( (void *)buffer, (void *)self->m_default_dest_mac, 6 );
        }
        memcpy( (void *)( buffer + 6 ), (void *)self->m_my_mac, 6 );
        buffer[12] = US_GET_BYTE_1( self->m_ethertype );
        buffer[13] = US_GET_BYTE_0( self->m_ethertype );
        memcpy( data, payload, payload_len );
        r = pcap_sendpacket( m_pcap, buffer, (int)payload_len + 14 ) == 0;
    }
    else
    {
        r = false;
    }
    return r ? payload_len : -1;
}
Пример #2
0
static bool us_tool_send_osc_tcp(
    struct addrinfo *dest_addr,
    us_buffer_t *buf
)
{
    bool r=false;
    int s = us_net_create_tcp_socket(dest_addr, false);
    if ( s>=0 )
    {
        if ( connect(s, dest_addr->ai_addr, dest_addr->ai_addrlen)>=0 )
        {
            uint8_t length[4];
            int len=us_buffer_readable_count( buf );
            r=true;
            length[0] = US_GET_BYTE_3( len );
            length[1] = US_GET_BYTE_2( len );
            length[2] = US_GET_BYTE_1( len );
            length[3] = US_GET_BYTE_0( len );
            r&=us_net_blocking_send(s, length, sizeof(length) );
            if ( r )
            {
                r&=us_net_blocking_send(s, buf->m_buffer, len );
            }
            if ( !r )
            {
                us_stderr->printf( us_stderr, "Error sending to TCP socket: %s\n", strerror(errno) );
            }
        }
        else
        {
            r=false;
            us_stderr->printf( us_stderr, "Error connecting: %s\n", strerror(errno) );
        }
        closesocket(s);
    }
    return r;
}