예제 #1
0
파일: rtmp.c 프로젝트: banketree/faplayer
/*****************************************************************************
 * Write: standard write on a file descriptor.
 *****************************************************************************/
static ssize_t Write( sout_access_out_t *p_access, block_t *p_buffer )
{
    rtmp_packet_t *rtmp_packet;
    uint8_t *tmp_buffer;
    ssize_t i_ret;
    ssize_t i_write = 0;

    if( p_access->p_sys->p_thread->first_media_packet )
    {
        /* 13 == FLV_HEADER_SIZE + PreviousTagSize*/
        memmove( p_buffer->p_buffer, p_buffer->p_buffer + 13, p_buffer->i_buffer - 13 );
        p_buffer = block_Realloc( p_buffer, 0, p_buffer->i_buffer - 13 );

        p_access->p_sys->p_thread->first_media_packet = 0;
    }

    while( p_buffer )
    {
        block_t *p_next = p_buffer->p_next;
//////////////////////////////
/*msg_Warn(p_access, "XXXXXXXXXXXXXXXXX");
int i;
for(i = 0; i < p_buffer->i_buffer; i += 16)
{
    msg_Warn(p_access,"%.2x%.2x %.2x%.2x %.2x%.2x %.2x%.2x %.2x%.2x %.2x%.2x %.2x%.2x %.2x%.2x",
p_buffer->p_buffer[i], p_buffer->p_buffer[i+1], p_buffer->p_buffer[i+2], p_buffer->p_buffer[i+3], p_buffer->p_buffer[i+4], p_buffer->p_buffer[i+5], p_buffer->p_buffer[i+6], p_buffer->p_buffer[i+7],
p_buffer->p_buffer[i+8], p_buffer->p_buffer[i+9], p_buffer->p_buffer[i+10], p_buffer->p_buffer[i+11], p_buffer->p_buffer[i+12], p_buffer->p_buffer[i+13], p_buffer->p_buffer[i+14], p_buffer->p_buffer[i+15]);
}*/
////////////////////////
        msg_Warn(p_access, "rtmp.c:360 i_dts %"PRIu64" i_pts %"PRIu64,
                 p_buffer->i_dts, p_buffer->i_pts);
        rtmp_packet = rtmp_build_flv_over_rtmp( p_access->p_sys->p_thread, p_buffer );

        if( rtmp_packet )
        {
            tmp_buffer = rtmp_encode_packet( p_access->p_sys->p_thread, rtmp_packet );

            i_ret = net_Write( p_access->p_sys->p_thread, p_access->p_sys->p_thread->fd, NULL, tmp_buffer, rtmp_packet->length_encoded );
            if( i_ret != rtmp_packet->length_encoded )
            {
                free( rtmp_packet->body->body );
                free( rtmp_packet->body );
                free( rtmp_packet );
                free( tmp_buffer );
                msg_Err( p_access->p_sys->p_thread, "failed send flv packet" );
                return -1;
            }
            free( rtmp_packet->body->body );
            free( rtmp_packet->body );
            free( rtmp_packet );
            free( tmp_buffer );
        }

        i_write += p_buffer->i_buffer;

        p_buffer = p_next;
    }

    return i_write;
}
예제 #2
0
파일: ftp.c 프로젝트: Kubink/vlc
static int ftp_SendCommand( vlc_object_t *obj, access_sys_t *sys,
                            const char *fmt, ... )
{
    size_t fmtlen = strlen( fmt );
    char fmtbuf[fmtlen + 3];

    memcpy( fmtbuf, fmt, fmtlen );
    memcpy( fmtbuf + fmtlen, "\r\n", 3 );

    va_list args;
    char *cmd;
    int val;

    va_start( args, fmt );
    val = vasprintf( &cmd, fmtbuf, args );
    va_end( args );
    if( unlikely(val == -1) )
        return -1;

    msg_Dbg( obj, "sending request: \"%.*s\" (%d bytes)", val - 2, cmd, val );
    if( net_Write( obj, sys->cmd.fd, sys->cmd.p_vs, cmd, val ) != val )
    {
        msg_Err( obj, "request failure" );
        val = -1;
    }
    else
        val = 0;
    free( cmd );
    return val;
}
예제 #3
0
bool TransmitMessageEx(vlc_object_t *obj, sys_common_t *sys, HtsMessage m)
{
    if(sys->netfd < 0)
    {
        msg_Dbg(obj, "Invalid netfd in TransmitMessage");
        return false;
    }

    void *buf;
    uint32_t len;

    if(!m.Serialize(&len, &buf))
    {
        msg_Dbg(obj, "Serialising message failed");
        return false;
    }

    if(net_Write(obj, sys->netfd, buf, len) != (ssize_t)len)
    {
        msg_Dbg(obj, "net_Write failed");
        return false;
    }

    free(buf);

    return true;
}
예제 #4
0
static bool write_exact( filter_t *p_filter,
                         int i_socket,
                         char* p_writebuf,
                         int i_bytes )
{
    return i_bytes == net_Write( p_filter, i_socket, NULL,
                                  (unsigned char*)p_writebuf, i_bytes );
}
예제 #5
0
파일: sap.c 프로젝트: forthyen/SDesk
static int announce_SendSAPAnnounce( sap_handler_t *p_sap,
                                     sap_session_t *p_session )
{
    int i_ret;

    /* This announce has never been sent yet */
    if( p_session->i_last == 0 )
    {
        p_session->i_next = mdate()+ p_session->p_address->i_interval*1000000;
        p_session->i_last = 1;
        return VLC_SUCCESS;
    }

    if( p_session->i_next < mdate() )
    {
#ifdef EXTRA_DEBUG
        msg_Dbg( p_sap, "Sending announce");
#endif
        i_ret = net_Write( p_sap, p_session->p_address->i_wfd,
                           p_session->psz_data,
                           p_session->i_length );
        if( i_ret  != p_session->i_length )
        {
            msg_Warn( p_sap, "SAP send failed on address %s (%i %i)",
                   p_session->p_address->psz_address,
                   i_ret, p_session->i_length );
        }
        p_session->i_last = p_session->i_next;
        p_session->i_next = p_session->i_last
                            + p_session->p_address->i_interval*1000000;
    }
    else
    {
        return VLC_SUCCESS;
    }
    return VLC_SUCCESS;
}
예제 #6
0
static bool write_exact( filter_t *obj, int fd, const void *buf, size_t len )
{
    return (ssize_t)len == net_Write( obj, fd, buf, len );
}