xref: /aosp_15_r20/external/libsrtp2/test/rtp_decoder.h (revision 90e502c7aef8d77d0622bb67d75435c6190cfc1a)
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