tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

rtp.h (4519B)


      1 /*
      2 * rtp.h
      3 *
      4 * rtp interface for srtp reference implementation
      5 *
      6 * David A. McGrew
      7 * Cisco Systems, Inc.
      8 *
      9 * data types:
     10 *
     11 * rtp_msg_t       an rtp message (the data that goes on the wire)
     12 * rtp_sender_t    sender side socket and rtp info
     13 * rtp_receiver_t  receiver side socket and rtp info
     14 *
     15 */
     16 
     17 /*
     18 *
     19 * Copyright (c) 2001-2017, Cisco Systems, Inc.
     20 * All rights reserved.
     21 *
     22 * Redistribution and use in source and binary forms, with or without
     23 * modification, are permitted provided that the following conditions
     24 * are met:
     25 *
     26 *   Redistributions of source code must retain the above copyright
     27 *   notice, this list of conditions and the following disclaimer.
     28 *
     29 *   Redistributions in binary form must reproduce the above
     30 *   copyright notice, this list of conditions and the following
     31 *   disclaimer in the documentation and/or other materials provided
     32 *   with the distribution.
     33 *
     34 *   Neither the name of the Cisco Systems, Inc. nor the names of its
     35 *   contributors may be used to endorse or promote products derived
     36 *   from this software without specific prior written permission.
     37 *
     38 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     39 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     40 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     41 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     42 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     43 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     44 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     45 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     46 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     47 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     48 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     49 * OF THE POSSIBILITY OF SUCH DAMAGE.
     50 *
     51 */
     52 
     53 #ifndef SRTP_RTP_H
     54 #define SRTP_RTP_H
     55 
     56 #ifdef HAVE_NETINET_IN_H
     57 #include <netinet/in.h>
     58 #elif defined HAVE_WINSOCK2_H
     59 #include <winsock2.h>
     60 #endif
     61 
     62 #include "srtp_priv.h"
     63 
     64 #ifdef __cplusplus
     65 extern "C" {
     66 #endif
     67 
     68 /*
     69 * RTP_HEADER_LEN indicates the size of an RTP header
     70 */
     71 #define RTP_HEADER_LEN 12
     72 
     73 /*
     74 * RTP_MAX_BUF_LEN defines the largest RTP packet in the rtp.c implementation
     75 */
     76 #define RTP_MAX_BUF_LEN 16384
     77 
     78 typedef srtp_hdr_t rtp_hdr_t;
     79 
     80 typedef struct {
     81    srtp_hdr_t header;
     82    char body[RTP_MAX_BUF_LEN];
     83 } rtp_msg_t;
     84 
     85 typedef struct rtp_sender_ctx_t {
     86    rtp_msg_t message;
     87    int socket;
     88    srtp_ctx_t *srtp_ctx;
     89    struct sockaddr_in addr; /* reciever's address */
     90 } rtp_sender_ctx_t;
     91 
     92 typedef struct rtp_receiver_ctx_t {
     93    rtp_msg_t message;
     94    int socket;
     95    srtp_ctx_t *srtp_ctx;
     96    struct sockaddr_in addr; /* receiver's address */
     97 } rtp_receiver_ctx_t;
     98 
     99 typedef struct rtp_sender_ctx_t *rtp_sender_t;
    100 
    101 typedef struct rtp_receiver_ctx_t *rtp_receiver_t;
    102 
    103 int rtp_sendto(rtp_sender_t sender, const void *msg, int len);
    104 
    105 int rtp_recvfrom(rtp_receiver_t receiver, void *msg, int *len);
    106 
    107 int rtp_receiver_init(rtp_receiver_t rcvr,
    108                      int sock,
    109                      struct sockaddr_in addr,
    110                      unsigned int ssrc);
    111 
    112 int rtp_sender_init(rtp_sender_t sender,
    113                    int sock,
    114                    struct sockaddr_in addr,
    115                    unsigned int ssrc);
    116 
    117 /*
    118 * srtp_sender_init(...) initializes an rtp_sender_t
    119 */
    120 
    121 int srtp_sender_init(
    122    rtp_sender_t rtp_ctx,              /* structure to be init'ed */
    123    struct sockaddr_in name,           /* socket name             */
    124    srtp_sec_serv_t security_services, /* sec. servs. to be used  */
    125    unsigned char *input_key           /* master key/salt in hex  */
    126 );
    127 
    128 int srtp_receiver_init(
    129    rtp_receiver_t rtp_ctx,            /* structure to be init'ed */
    130    struct sockaddr_in name,           /* socket name             */
    131    srtp_sec_serv_t security_services, /* sec. servs. to be used  */
    132    unsigned char *input_key           /* master key/salt in hex  */
    133 );
    134 
    135 int rtp_sender_init_srtp(rtp_sender_t sender, const srtp_policy_t *policy);
    136 
    137 int rtp_sender_deinit_srtp(rtp_sender_t sender);
    138 
    139 int rtp_receiver_init_srtp(rtp_receiver_t sender, const srtp_policy_t *policy);
    140 
    141 int rtp_receiver_deinit_srtp(rtp_receiver_t sender);
    142 
    143 rtp_sender_t rtp_sender_alloc(void);
    144 
    145 void rtp_sender_dealloc(rtp_sender_t rtp_ctx);
    146 
    147 rtp_receiver_t rtp_receiver_alloc(void);
    148 
    149 void rtp_receiver_dealloc(rtp_receiver_t rtp_ctx);
    150 
    151 #ifdef __cplusplus
    152 }
    153 #endif
    154 
    155 #endif /* SRTP_RTP_H */