示例#1
0
文件: tox.c 项目: askielboe/toxcore
/* Set handlers for custom lossy packets.
 * Set the function to be called when friend sends us a lossy packet starting with byte.
 * byte must be in the 200-254 range.
 *
 * NOTE: lossy packets behave like UDP packets meaning they might never reach the other side
 * or might arrive more than once (if someone is messing with the connection) or might arrive
 * in the wrong order.
 *
 * Unless latency is an issue, it is recommended that you use lossless packets instead.
 *
 * return -1 on failure.
 * return 0 on success.
 */
int tox_lossy_packet_registerhandler(Tox *tox, int32_t friendnumber, uint8_t byte,
                                     int (*packet_handler_callback)(void *object, const uint8_t *data, uint32_t len), void *object)
{
    Messenger *m = tox;

    if (byte < (PACKET_ID_LOSSY_RANGE_START + 8)) /* First 8 reserved for A/V*/
        return -1;

    return custom_lossy_packet_registerhandler(m, friendnumber, byte, packet_handler_callback, object);
}
示例#2
0
文件: rtp.c 项目: Aaron1011/toxcore
RTPSession *rtp_new ( int payload_type, Messenger *messenger, int friend_num )
{
    RTPSession *retu = calloc(1, sizeof(RTPSession));

    if ( !retu ) {
        LOGGER_WARNING("Alloc failed! Program might misbehave!");
        return NULL;
    }

    if ( -1 == custom_lossy_packet_registerhandler(messenger, friend_num, payload_type, rtp_handle_packet, retu)) {
        LOGGER_ERROR("Error setting custom register handler for rtp session");
        free(retu);
        return NULL;
    }

    LOGGER_DEBUG("Registered packet handler: pt: %d; fid: %d", payload_type, friend_num);

    retu->version   = RTP_VERSION;   /* It's always 2 */
    retu->padding   = 0;             /* If some additional data is needed about the packet */
    retu->extension = 0;           /* If extension to header is needed */
    retu->cc        = 1;           /* Amount of contributors */
    retu->csrc      = NULL;        /* Container */
    retu->ssrc      = random_int();
    retu->marker    = 0;
    retu->payload_type = payload_type % 128;

    retu->dest = friend_num;

    retu->rsequnum = retu->sequnum = 0;

    retu->ext_header = NULL; /* When needed allocate */


    if ( !(retu->csrc = calloc(1, sizeof (uint32_t))) ) {
        LOGGER_WARNING("Alloc failed! Program might misbehave!");
        free(retu);
        return NULL;
    }

    retu->csrc[0] = retu->ssrc; /* Set my ssrc to the list receive */

    /* Also set payload type as prefix */
    retu->prefix = payload_type;

    /*
     *
     */
    return retu;
}
示例#3
0
文件: rtp.c 项目: Aaron1011/toxcore
void rtp_kill ( RTPSession *session, Messenger *messenger )
{
    if ( !session ) return;

    custom_lossy_packet_registerhandler(messenger, session->dest, session->prefix, NULL, NULL);

    free ( session->ext_header );
    free ( session->csrc );

    LOGGER_DEBUG("Terminated RTP session: %p", session);

    /* And finally free session */
    free ( session );

}