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