static void interleaved_read_tcp_cb( struct ev_loop *loop, ev_io *w, int revents) { GByteArray *pkt; uint16_t ne_n; char buffer[RTSP_BUFFERSIZE + 1]; RTSP_interleaved_channel *intlvd = w->data; RTSP_Client *rtsp = intlvd->local->data; int n; if ((n = Sock_read(intlvd->local, buffer, RTSP_BUFFERSIZE, NULL, MSG_DONTWAIT)) < 0) { fnc_log(FNC_LOG_WARN, "Error reading from local socket\n"); return; } ne_n = htons((uint16_t)n); pkt = g_byte_array_sized_new(n+4); g_byte_array_set_size(pkt, n+4); pkt->data[0] = '$'; pkt->data[1] = (uint8_t)intlvd->channel; memcpy(&pkt->data[2], &ne_n, sizeof(ne_n)); memcpy(&pkt->data[4], buffer, n); g_queue_push_head(rtsp->out_queue, pkt); ev_io_start(rtsp->srv->loop, &rtsp->ev_io_write); }
/** * @brief parse incoming RTCP packets */ static void rtcp_read_cb(ATTR_UNUSED struct ev_loop *loop, ev_io *w, ATTR_UNUSED int revents) { char buffer[RTP_DEFAULT_MTU*2] = { 0, }; //FIXME just a quick hack... RTP_session *session = w->data; int n = Sock_read(session->transport.rtcp_sock, buffer, RTP_DEFAULT_MTU*2, NULL, 0); fnc_log(FNC_LOG_INFO, "[RTCP] Read %d byte", n); }
void in_Rsockread(int *sockp, char **buf, int *maxlen) { check_init(); #ifdef DEBUG printf("Reading from %d\n",*sockp); #endif perr.error = 0; *maxlen = (int) Sock_read(*sockp, *buf, *maxlen, &perr); if(perr.error) REprintf("socket error: %s\n", strerror(perr.error)); }