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);
}
Beispiel #2
0
/**
 * @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);
}
Beispiel #3
0
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));
}