1*90e502c7SAndroid Build Coastguard Worker /* 2*90e502c7SAndroid Build Coastguard Worker * rtp_decoder.h 3*90e502c7SAndroid Build Coastguard Worker * 4*90e502c7SAndroid Build Coastguard Worker * decoder structures and functions for SRTP pcap decoder 5*90e502c7SAndroid Build Coastguard Worker * 6*90e502c7SAndroid Build Coastguard Worker * Bernardo Torres <[email protected]> 7*90e502c7SAndroid Build Coastguard Worker * 8*90e502c7SAndroid Build Coastguard Worker * Some structure and code from https://github.com/gteissier/srtp-decrypt 9*90e502c7SAndroid Build Coastguard Worker * 10*90e502c7SAndroid Build Coastguard Worker */ 11*90e502c7SAndroid Build Coastguard Worker /* 12*90e502c7SAndroid Build Coastguard Worker * 13*90e502c7SAndroid Build Coastguard Worker * Copyright (c) 2001-2017 Cisco Systems, Inc. 14*90e502c7SAndroid Build Coastguard Worker * All rights reserved. 15*90e502c7SAndroid Build Coastguard Worker * 16*90e502c7SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 17*90e502c7SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 18*90e502c7SAndroid Build Coastguard Worker * are met: 19*90e502c7SAndroid Build Coastguard Worker * 20*90e502c7SAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright 21*90e502c7SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 22*90e502c7SAndroid Build Coastguard Worker * 23*90e502c7SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above 24*90e502c7SAndroid Build Coastguard Worker * copyright notice, this list of conditions and the following 25*90e502c7SAndroid Build Coastguard Worker * disclaimer in the documentation and/or other materials provided 26*90e502c7SAndroid Build Coastguard Worker * with the distribution. 27*90e502c7SAndroid Build Coastguard Worker * 28*90e502c7SAndroid Build Coastguard Worker * Neither the name of the Cisco Systems, Inc. nor the names of its 29*90e502c7SAndroid Build Coastguard Worker * contributors may be used to endorse or promote products derived 30*90e502c7SAndroid Build Coastguard Worker * from this software without specific prior written permission. 31*90e502c7SAndroid Build Coastguard Worker * 32*90e502c7SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33*90e502c7SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34*90e502c7SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 35*90e502c7SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 36*90e502c7SAndroid Build Coastguard Worker * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 37*90e502c7SAndroid Build Coastguard Worker * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 38*90e502c7SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 39*90e502c7SAndroid Build Coastguard Worker * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 40*90e502c7SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 41*90e502c7SAndroid Build Coastguard Worker * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 42*90e502c7SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 43*90e502c7SAndroid Build Coastguard Worker * OF THE POSSIBILITY OF SUCH DAMAGE. 44*90e502c7SAndroid Build Coastguard Worker * 45*90e502c7SAndroid Build Coastguard Worker */ 46*90e502c7SAndroid Build Coastguard Worker 47*90e502c7SAndroid Build Coastguard Worker #ifndef RTP_DECODER_H 48*90e502c7SAndroid Build Coastguard Worker #define RTP_DECODER_H 49*90e502c7SAndroid Build Coastguard Worker 50*90e502c7SAndroid Build Coastguard Worker #include "srtp_priv.h" 51*90e502c7SAndroid Build Coastguard Worker #include "rtp.h" 52*90e502c7SAndroid Build Coastguard Worker 53*90e502c7SAndroid Build Coastguard Worker #define DEFAULT_RTP_OFFSET 42 54*90e502c7SAndroid Build Coastguard Worker 55*90e502c7SAndroid Build Coastguard Worker typedef enum { 56*90e502c7SAndroid Build Coastguard Worker mode_rtp = 0, 57*90e502c7SAndroid Build Coastguard Worker mode_rtcp, 58*90e502c7SAndroid Build Coastguard Worker mode_rtcp_mux, 59*90e502c7SAndroid Build Coastguard Worker } rtp_decoder_mode_t; 60*90e502c7SAndroid Build Coastguard Worker 61*90e502c7SAndroid Build Coastguard Worker typedef struct rtp_decoder_ctx_t { 62*90e502c7SAndroid Build Coastguard Worker srtp_policy_t policy; 63*90e502c7SAndroid Build Coastguard Worker srtp_ctx_t *srtp_ctx; 64*90e502c7SAndroid Build Coastguard Worker rtp_decoder_mode_t mode; 65*90e502c7SAndroid Build Coastguard Worker int rtp_offset; 66*90e502c7SAndroid Build Coastguard Worker struct timeval start_tv; 67*90e502c7SAndroid Build Coastguard Worker int frame_nr; 68*90e502c7SAndroid Build Coastguard Worker int error_cnt; 69*90e502c7SAndroid Build Coastguard Worker int rtp_cnt; 70*90e502c7SAndroid Build Coastguard Worker int rtcp_cnt; 71*90e502c7SAndroid Build Coastguard Worker } rtp_decoder_ctx_t; 72*90e502c7SAndroid Build Coastguard Worker 73*90e502c7SAndroid Build Coastguard Worker typedef struct rtp_decoder_ctx_t *rtp_decoder_t; 74*90e502c7SAndroid Build Coastguard Worker 75*90e502c7SAndroid Build Coastguard Worker /* 76*90e502c7SAndroid Build Coastguard Worker * error to string 77*90e502c7SAndroid Build Coastguard Worker */ 78*90e502c7SAndroid Build Coastguard Worker void rtp_print_error(srtp_err_status_t status, char *message); 79*90e502c7SAndroid Build Coastguard Worker 80*90e502c7SAndroid Build Coastguard Worker /* 81*90e502c7SAndroid Build Coastguard Worker * prints the output of a random buffer in hexadecimal 82*90e502c7SAndroid Build Coastguard Worker */ 83*90e502c7SAndroid Build Coastguard Worker void hexdump(const void *ptr, size_t size); 84*90e502c7SAndroid Build Coastguard Worker 85*90e502c7SAndroid Build Coastguard Worker /* 86*90e502c7SAndroid Build Coastguard Worker * the function usage() prints an error message describing how this 87*90e502c7SAndroid Build Coastguard Worker * program should be called, then calls exit() 88*90e502c7SAndroid Build Coastguard Worker */ 89*90e502c7SAndroid Build Coastguard Worker void usage(char *prog_name); 90*90e502c7SAndroid Build Coastguard Worker 91*90e502c7SAndroid Build Coastguard Worker /* 92*90e502c7SAndroid Build Coastguard Worker * transforms base64 key into octet 93*90e502c7SAndroid Build Coastguard Worker */ 94*90e502c7SAndroid Build Coastguard Worker char *decode_sdes(char *in, char *out); 95*90e502c7SAndroid Build Coastguard Worker 96*90e502c7SAndroid Build Coastguard Worker /* 97*90e502c7SAndroid Build Coastguard Worker * pcap handling 98*90e502c7SAndroid Build Coastguard Worker */ 99*90e502c7SAndroid Build Coastguard Worker void rtp_decoder_handle_pkt(u_char *arg, 100*90e502c7SAndroid Build Coastguard Worker const struct pcap_pkthdr *hdr, 101*90e502c7SAndroid Build Coastguard Worker const u_char *bytes); 102*90e502c7SAndroid Build Coastguard Worker 103*90e502c7SAndroid Build Coastguard Worker rtp_decoder_t rtp_decoder_alloc(void); 104*90e502c7SAndroid Build Coastguard Worker 105*90e502c7SAndroid Build Coastguard Worker void rtp_decoder_dealloc(rtp_decoder_t rtp_ctx); 106*90e502c7SAndroid Build Coastguard Worker 107*90e502c7SAndroid Build Coastguard Worker int rtp_decoder_init(rtp_decoder_t dcdr, 108*90e502c7SAndroid Build Coastguard Worker srtp_policy_t policy, 109*90e502c7SAndroid Build Coastguard Worker rtp_decoder_mode_t mode); 110*90e502c7SAndroid Build Coastguard Worker 111*90e502c7SAndroid Build Coastguard Worker int rtp_decoder_deinit(rtp_decoder_t decoder); 112*90e502c7SAndroid Build Coastguard Worker 113*90e502c7SAndroid Build Coastguard Worker void rtp_decoder_srtp_log_handler(srtp_log_level_t level, 114*90e502c7SAndroid Build Coastguard Worker const char *msg, 115*90e502c7SAndroid Build Coastguard Worker void *data); 116*90e502c7SAndroid Build Coastguard Worker 117*90e502c7SAndroid Build Coastguard Worker void rtp_decoder_srtp_log_handler(srtp_log_level_t level, 118*90e502c7SAndroid Build Coastguard Worker const char *msg, 119*90e502c7SAndroid Build Coastguard Worker void *data); 120*90e502c7SAndroid Build Coastguard Worker 121*90e502c7SAndroid Build Coastguard Worker #endif /* RTP_DECODER_H */ 122