/***************************************************************************** * 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; }
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; }
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; }
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 ); }
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; }
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 ); }