// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
// DO NOT EDIT

#![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
#![allow(
    clippy::approx_constant,
    clippy::type_complexity,
    clippy::unreadable_literal,
    clippy::upper_case_acronyms
)]
#![cfg_attr(docsrs, feature(doc_cfg))]

#[allow(unused_imports)]
use libc::{
    c_char, c_double, c_float, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort, c_void,
    intptr_t, size_t, ssize_t, uintptr_t, FILE,
};

#[allow(unused_imports)]
use glib::{gboolean, gconstpointer, gpointer, GType};

// Enums
pub type GstMIKEYCacheType = c_int;
pub const GST_MIKEY_CACHE_NONE: GstMIKEYCacheType = 0;
pub const GST_MIKEY_CACHE_ALWAYS: GstMIKEYCacheType = 1;
pub const GST_MIKEY_CACHE_FOR_CSB: GstMIKEYCacheType = 2;

pub type GstMIKEYEncAlg = c_int;
pub const GST_MIKEY_ENC_NULL: GstMIKEYEncAlg = 0;
pub const GST_MIKEY_ENC_AES_CM_128: GstMIKEYEncAlg = 1;
pub const GST_MIKEY_ENC_AES_KW_128: GstMIKEYEncAlg = 2;
pub const GST_MIKEY_ENC_AES_GCM_128: GstMIKEYEncAlg = 6;

pub type GstMIKEYKVType = c_int;
pub const GST_MIKEY_KV_NULL: GstMIKEYKVType = 0;
pub const GST_MIKEY_KV_SPI: GstMIKEYKVType = 1;
pub const GST_MIKEY_KV_INTERVAL: GstMIKEYKVType = 2;

pub type GstMIKEYKeyDataType = c_int;
pub const GST_MIKEY_KD_TGK: GstMIKEYKeyDataType = 0;
pub const GST_MIKEY_KD_TEK: GstMIKEYKeyDataType = 2;

pub type GstMIKEYMacAlg = c_int;
pub const GST_MIKEY_MAC_NULL: GstMIKEYMacAlg = 0;
pub const GST_MIKEY_MAC_HMAC_SHA_1_160: GstMIKEYMacAlg = 1;

pub type GstMIKEYMapType = c_int;
pub const GST_MIKEY_MAP_TYPE_SRTP: GstMIKEYMapType = 0;

pub type GstMIKEYPRFFunc = c_int;
pub const GST_MIKEY_PRF_MIKEY_1: GstMIKEYPRFFunc = 0;

pub type GstMIKEYPayloadType = c_int;
pub const GST_MIKEY_PT_LAST: GstMIKEYPayloadType = 0;
pub const GST_MIKEY_PT_KEMAC: GstMIKEYPayloadType = 1;
pub const GST_MIKEY_PT_PKE: GstMIKEYPayloadType = 2;
pub const GST_MIKEY_PT_DH: GstMIKEYPayloadType = 3;
pub const GST_MIKEY_PT_SIGN: GstMIKEYPayloadType = 4;
pub const GST_MIKEY_PT_T: GstMIKEYPayloadType = 5;
pub const GST_MIKEY_PT_ID: GstMIKEYPayloadType = 6;
pub const GST_MIKEY_PT_CERT: GstMIKEYPayloadType = 7;
pub const GST_MIKEY_PT_CHASH: GstMIKEYPayloadType = 8;
pub const GST_MIKEY_PT_V: GstMIKEYPayloadType = 9;
pub const GST_MIKEY_PT_SP: GstMIKEYPayloadType = 10;
pub const GST_MIKEY_PT_RAND: GstMIKEYPayloadType = 11;
pub const GST_MIKEY_PT_ERR: GstMIKEYPayloadType = 12;
pub const GST_MIKEY_PT_KEY_DATA: GstMIKEYPayloadType = 20;
pub const GST_MIKEY_PT_GEN_EXT: GstMIKEYPayloadType = 21;

pub type GstMIKEYSecProto = c_int;
pub const GST_MIKEY_SEC_PROTO_SRTP: GstMIKEYSecProto = 0;

pub type GstMIKEYSecSRTP = c_int;
pub const GST_MIKEY_SP_SRTP_ENC_ALG: GstMIKEYSecSRTP = 0;
pub const GST_MIKEY_SP_SRTP_ENC_KEY_LEN: GstMIKEYSecSRTP = 1;
pub const GST_MIKEY_SP_SRTP_AUTH_ALG: GstMIKEYSecSRTP = 2;
pub const GST_MIKEY_SP_SRTP_AUTH_KEY_LEN: GstMIKEYSecSRTP = 3;
pub const GST_MIKEY_SP_SRTP_SALT_KEY_LEN: GstMIKEYSecSRTP = 4;
pub const GST_MIKEY_SP_SRTP_PRF: GstMIKEYSecSRTP = 5;
pub const GST_MIKEY_SP_SRTP_KEY_DERIV_RATE: GstMIKEYSecSRTP = 6;
pub const GST_MIKEY_SP_SRTP_SRTP_ENC: GstMIKEYSecSRTP = 7;
pub const GST_MIKEY_SP_SRTP_SRTCP_ENC: GstMIKEYSecSRTP = 8;
pub const GST_MIKEY_SP_SRTP_FEC_ORDER: GstMIKEYSecSRTP = 9;
pub const GST_MIKEY_SP_SRTP_SRTP_AUTH: GstMIKEYSecSRTP = 10;
pub const GST_MIKEY_SP_SRTP_AUTH_TAG_LEN: GstMIKEYSecSRTP = 11;
pub const GST_MIKEY_SP_SRTP_SRTP_PREFIX_LEN: GstMIKEYSecSRTP = 12;
pub const GST_MIKEY_SP_SRTP_AEAD_AUTH_TAG_LEN: GstMIKEYSecSRTP = 20;

pub type GstMIKEYTSType = c_int;
pub const GST_MIKEY_TS_TYPE_NTP_UTC: GstMIKEYTSType = 0;
pub const GST_MIKEY_TS_TYPE_NTP: GstMIKEYTSType = 1;
pub const GST_MIKEY_TS_TYPE_COUNTER: GstMIKEYTSType = 2;

pub type GstMIKEYType = c_int;
pub const GST_MIKEY_TYPE_INVALID: GstMIKEYType = -1;
pub const GST_MIKEY_TYPE_PSK_INIT: GstMIKEYType = 0;
pub const GST_MIKEY_TYPE_PSK_VERIFY: GstMIKEYType = 1;
pub const GST_MIKEY_TYPE_PK_INIT: GstMIKEYType = 2;
pub const GST_MIKEY_TYPE_PK_VERIFY: GstMIKEYType = 3;
pub const GST_MIKEY_TYPE_DH_INIT: GstMIKEYType = 4;
pub const GST_MIKEY_TYPE_DH_RESP: GstMIKEYType = 5;
pub const GST_MIKEY_TYPE_ERROR: GstMIKEYType = 6;

pub type GstSDPResult = c_int;
pub const GST_SDP_OK: GstSDPResult = 0;
pub const GST_SDP_EINVAL: GstSDPResult = -1;

// Constants
pub const GST_MIKEY_VERSION: c_int = 1;
pub const GST_SDP_BWTYPE_AS: &[u8] = b"AS\0";
pub const GST_SDP_BWTYPE_CT: &[u8] = b"CT\0";
pub const GST_SDP_BWTYPE_EXT_PREFIX: &[u8] = b"X-\0";
pub const GST_SDP_BWTYPE_RR: &[u8] = b"RR\0";
pub const GST_SDP_BWTYPE_RS: &[u8] = b"RS\0";
pub const GST_SDP_BWTYPE_TIAS: &[u8] = b"TIAS\0";

// Records
#[repr(C)]
pub struct _GstMIKEYDecryptInfo {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstMIKEYDecryptInfo = *mut _GstMIKEYDecryptInfo;

#[repr(C)]
pub struct _GstMIKEYEncryptInfo {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstMIKEYEncryptInfo = *mut _GstMIKEYEncryptInfo;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYMapSRTP {
    pub policy: u8,
    pub ssrc: u32,
    pub roc: u32,
}

impl ::std::fmt::Debug for GstMIKEYMapSRTP {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYMapSRTP @ {self:p}"))
            .field("policy", &self.policy)
            .field("ssrc", &self.ssrc)
            .field("roc", &self.roc)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYMessage {
    pub mini_object: gst::GstMiniObject,
    pub version: u8,
    pub type_: GstMIKEYType,
    pub V: gboolean,
    pub prf_func: GstMIKEYPRFFunc,
    pub CSB_id: u32,
    pub map_type: GstMIKEYMapType,
    pub map_info: *mut glib::GArray,
    pub payloads: *mut glib::GArray,
}

impl ::std::fmt::Debug for GstMIKEYMessage {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYMessage @ {self:p}"))
            .field("version", &self.version)
            .field("type_", &self.type_)
            .field("V", &self.V)
            .field("prf_func", &self.prf_func)
            .field("CSB_id", &self.CSB_id)
            .field("map_type", &self.map_type)
            .field("map_info", &self.map_info)
            .field("payloads", &self.payloads)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYPayload {
    pub mini_object: gst::GstMiniObject,
    pub type_: GstMIKEYPayloadType,
    pub len: c_uint,
}

impl ::std::fmt::Debug for GstMIKEYPayload {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYPayload @ {self:p}"))
            .field("type_", &self.type_)
            .field("len", &self.len)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYPayloadKEMAC {
    pub pt: GstMIKEYPayload,
    pub enc_alg: GstMIKEYEncAlg,
    pub mac_alg: GstMIKEYMacAlg,
    pub subpayloads: *mut glib::GArray,
}

impl ::std::fmt::Debug for GstMIKEYPayloadKEMAC {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYPayloadKEMAC @ {self:p}"))
            .field("pt", &self.pt)
            .field("enc_alg", &self.enc_alg)
            .field("mac_alg", &self.mac_alg)
            .field("subpayloads", &self.subpayloads)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYPayloadKeyData {
    pub pt: GstMIKEYPayload,
    pub key_type: GstMIKEYKeyDataType,
    pub key_len: u16,
    pub key_data: *mut u8,
    pub salt_len: u16,
    pub salt_data: *mut u8,
    pub kv_type: GstMIKEYKVType,
    pub kv_len: [u8; 2],
    pub kv_data: [*mut u8; 2],
}

impl ::std::fmt::Debug for GstMIKEYPayloadKeyData {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYPayloadKeyData @ {self:p}"))
            .field("pt", &self.pt)
            .field("key_type", &self.key_type)
            .field("key_len", &self.key_len)
            .field("key_data", &self.key_data)
            .field("salt_len", &self.salt_len)
            .field("salt_data", &self.salt_data)
            .field("kv_type", &self.kv_type)
            .field("kv_len", &self.kv_len)
            .field("kv_data", &self.kv_data)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYPayloadPKE {
    pub pt: GstMIKEYPayload,
    pub C: GstMIKEYCacheType,
    pub data_len: u16,
    pub data: *mut u8,
}

impl ::std::fmt::Debug for GstMIKEYPayloadPKE {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYPayloadPKE @ {self:p}"))
            .field("pt", &self.pt)
            .field("C", &self.C)
            .field("data_len", &self.data_len)
            .field("data", &self.data)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYPayloadRAND {
    pub pt: GstMIKEYPayload,
    pub len: u8,
    pub rand: *mut u8,
}

impl ::std::fmt::Debug for GstMIKEYPayloadRAND {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYPayloadRAND @ {self:p}"))
            .field("pt", &self.pt)
            .field("len", &self.len)
            .field("rand", &self.rand)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYPayloadSP {
    pub pt: GstMIKEYPayload,
    pub policy: c_uint,
    pub proto: GstMIKEYSecProto,
    pub params: *mut glib::GArray,
}

impl ::std::fmt::Debug for GstMIKEYPayloadSP {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYPayloadSP @ {self:p}"))
            .field("pt", &self.pt)
            .field("policy", &self.policy)
            .field("proto", &self.proto)
            .field("params", &self.params)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYPayloadSPParam {
    pub type_: u8,
    pub len: u8,
    pub val: *mut u8,
}

impl ::std::fmt::Debug for GstMIKEYPayloadSPParam {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYPayloadSPParam @ {self:p}"))
            .field("type_", &self.type_)
            .field("len", &self.len)
            .field("val", &self.val)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstMIKEYPayloadT {
    pub pt: GstMIKEYPayload,
    pub type_: GstMIKEYTSType,
    pub ts_value: *mut u8,
}

impl ::std::fmt::Debug for GstMIKEYPayloadT {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstMIKEYPayloadT @ {self:p}"))
            .field("pt", &self.pt)
            .field("type_", &self.type_)
            .field("ts_value", &self.ts_value)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstSDPAttribute {
    pub key: *mut c_char,
    pub value: *mut c_char,
}

impl ::std::fmt::Debug for GstSDPAttribute {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstSDPAttribute @ {self:p}"))
            .field("key", &self.key)
            .field("value", &self.value)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstSDPBandwidth {
    pub bwtype: *mut c_char,
    pub bandwidth: c_uint,
}

impl ::std::fmt::Debug for GstSDPBandwidth {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstSDPBandwidth @ {self:p}"))
            .field("bwtype", &self.bwtype)
            .field("bandwidth", &self.bandwidth)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstSDPConnection {
    pub nettype: *mut c_char,
    pub addrtype: *mut c_char,
    pub address: *mut c_char,
    pub ttl: c_uint,
    pub addr_number: c_uint,
}

impl ::std::fmt::Debug for GstSDPConnection {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstSDPConnection @ {self:p}"))
            .field("nettype", &self.nettype)
            .field("addrtype", &self.addrtype)
            .field("address", &self.address)
            .field("ttl", &self.ttl)
            .field("addr_number", &self.addr_number)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstSDPKey {
    pub type_: *mut c_char,
    pub data: *mut c_char,
}

impl ::std::fmt::Debug for GstSDPKey {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstSDPKey @ {self:p}"))
            .field("type_", &self.type_)
            .field("data", &self.data)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstSDPMedia {
    pub media: *mut c_char,
    pub port: c_uint,
    pub num_ports: c_uint,
    pub proto: *mut c_char,
    pub fmts: *mut glib::GArray,
    pub information: *mut c_char,
    pub connections: *mut glib::GArray,
    pub bandwidths: *mut glib::GArray,
    pub key: GstSDPKey,
    pub attributes: *mut glib::GArray,
}

impl ::std::fmt::Debug for GstSDPMedia {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstSDPMedia @ {self:p}"))
            .field("media", &self.media)
            .field("port", &self.port)
            .field("num_ports", &self.num_ports)
            .field("proto", &self.proto)
            .field("fmts", &self.fmts)
            .field("information", &self.information)
            .field("connections", &self.connections)
            .field("bandwidths", &self.bandwidths)
            .field("key", &self.key)
            .field("attributes", &self.attributes)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstSDPMessage {
    pub version: *mut c_char,
    pub origin: GstSDPOrigin,
    pub session_name: *mut c_char,
    pub information: *mut c_char,
    pub uri: *mut c_char,
    pub emails: *mut glib::GArray,
    pub phones: *mut glib::GArray,
    pub connection: GstSDPConnection,
    pub bandwidths: *mut glib::GArray,
    pub times: *mut glib::GArray,
    pub zones: *mut glib::GArray,
    pub key: GstSDPKey,
    pub attributes: *mut glib::GArray,
    pub medias: *mut glib::GArray,
}

impl ::std::fmt::Debug for GstSDPMessage {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstSDPMessage @ {self:p}"))
            .field("version", &self.version)
            .field("origin", &self.origin)
            .field("session_name", &self.session_name)
            .field("information", &self.information)
            .field("uri", &self.uri)
            .field("emails", &self.emails)
            .field("phones", &self.phones)
            .field("connection", &self.connection)
            .field("bandwidths", &self.bandwidths)
            .field("times", &self.times)
            .field("zones", &self.zones)
            .field("key", &self.key)
            .field("attributes", &self.attributes)
            .field("medias", &self.medias)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstSDPOrigin {
    pub username: *mut c_char,
    pub sess_id: *mut c_char,
    pub sess_version: *mut c_char,
    pub nettype: *mut c_char,
    pub addrtype: *mut c_char,
    pub addr: *mut c_char,
}

impl ::std::fmt::Debug for GstSDPOrigin {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstSDPOrigin @ {self:p}"))
            .field("username", &self.username)
            .field("sess_id", &self.sess_id)
            .field("sess_version", &self.sess_version)
            .field("nettype", &self.nettype)
            .field("addrtype", &self.addrtype)
            .field("addr", &self.addr)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstSDPTime {
    pub start: *mut c_char,
    pub stop: *mut c_char,
    pub repeat: *mut glib::GArray,
}

impl ::std::fmt::Debug for GstSDPTime {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstSDPTime @ {self:p}"))
            .field("start", &self.start)
            .field("stop", &self.stop)
            .field("repeat", &self.repeat)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstSDPZone {
    pub time: *mut c_char,
    pub typed_time: *mut c_char,
}

impl ::std::fmt::Debug for GstSDPZone {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstSDPZone @ {self:p}"))
            .field("time", &self.time)
            .field("typed_time", &self.typed_time)
            .finish()
    }
}

#[link(name = "gstsdp-1.0")]
extern "C" {

    //=========================================================================
    // GstMIKEYMessage
    //=========================================================================
    pub fn gst_mikey_message_get_type() -> GType;
    pub fn gst_mikey_message_new() -> *mut GstMIKEYMessage;
    pub fn gst_mikey_message_new_from_bytes(
        bytes: *mut glib::GBytes,
        info: *mut GstMIKEYDecryptInfo,
        error: *mut *mut glib::GError,
    ) -> *mut GstMIKEYMessage;
    pub fn gst_mikey_message_new_from_caps(caps: *mut gst::GstCaps) -> *mut GstMIKEYMessage;
    pub fn gst_mikey_message_new_from_data(
        data: gconstpointer,
        size: size_t,
        info: *mut GstMIKEYDecryptInfo,
        error: *mut *mut glib::GError,
    ) -> *mut GstMIKEYMessage;
    pub fn gst_mikey_message_add_cs_srtp(
        msg: *mut GstMIKEYMessage,
        policy: u8,
        ssrc: u32,
        roc: u32,
    ) -> gboolean;
    pub fn gst_mikey_message_add_payload(
        msg: *mut GstMIKEYMessage,
        payload: *mut GstMIKEYPayload,
    ) -> gboolean;
    pub fn gst_mikey_message_add_pke(
        msg: *mut GstMIKEYMessage,
        C: GstMIKEYCacheType,
        data_len: u16,
        data: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_message_add_rand(
        msg: *mut GstMIKEYMessage,
        len: u8,
        rand: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_message_add_rand_len(msg: *mut GstMIKEYMessage, len: u8) -> gboolean;
    pub fn gst_mikey_message_add_t(
        msg: *mut GstMIKEYMessage,
        type_: GstMIKEYTSType,
        ts_value: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_message_add_t_now_ntp_utc(msg: *mut GstMIKEYMessage) -> gboolean;
    pub fn gst_mikey_message_base64_encode(msg: *mut GstMIKEYMessage) -> *mut c_char;
    pub fn gst_mikey_message_find_payload(
        msg: *const GstMIKEYMessage,
        type_: GstMIKEYPayloadType,
        nth: c_uint,
    ) -> *const GstMIKEYPayload;
    pub fn gst_mikey_message_get_cs_srtp(
        msg: *const GstMIKEYMessage,
        idx: c_uint,
    ) -> *const GstMIKEYMapSRTP;
    pub fn gst_mikey_message_get_n_cs(msg: *const GstMIKEYMessage) -> c_uint;
    pub fn gst_mikey_message_get_n_payloads(msg: *const GstMIKEYMessage) -> c_uint;
    pub fn gst_mikey_message_get_payload(
        msg: *const GstMIKEYMessage,
        idx: c_uint,
    ) -> *const GstMIKEYPayload;
    pub fn gst_mikey_message_insert_cs_srtp(
        msg: *mut GstMIKEYMessage,
        idx: c_int,
        map: *const GstMIKEYMapSRTP,
    ) -> gboolean;
    pub fn gst_mikey_message_insert_payload(
        msg: *mut GstMIKEYMessage,
        idx: c_uint,
        payload: *mut GstMIKEYPayload,
    ) -> gboolean;
    pub fn gst_mikey_message_remove_cs_srtp(msg: *mut GstMIKEYMessage, idx: c_int) -> gboolean;
    pub fn gst_mikey_message_remove_payload(msg: *mut GstMIKEYMessage, idx: c_uint) -> gboolean;
    pub fn gst_mikey_message_replace_cs_srtp(
        msg: *mut GstMIKEYMessage,
        idx: c_int,
        map: *const GstMIKEYMapSRTP,
    ) -> gboolean;
    pub fn gst_mikey_message_replace_payload(
        msg: *mut GstMIKEYMessage,
        idx: c_uint,
        payload: *mut GstMIKEYPayload,
    ) -> gboolean;
    pub fn gst_mikey_message_set_info(
        msg: *mut GstMIKEYMessage,
        version: u8,
        type_: GstMIKEYType,
        V: gboolean,
        prf_func: GstMIKEYPRFFunc,
        CSB_id: u32,
        map_type: GstMIKEYMapType,
    ) -> gboolean;
    pub fn gst_mikey_message_to_bytes(
        msg: *mut GstMIKEYMessage,
        info: *mut GstMIKEYEncryptInfo,
        error: *mut *mut glib::GError,
    ) -> *mut glib::GBytes;
    pub fn gst_mikey_message_to_caps(
        msg: *const GstMIKEYMessage,
        caps: *mut gst::GstCaps,
    ) -> gboolean;

    //=========================================================================
    // GstMIKEYPayload
    //=========================================================================
    pub fn gst_mikey_payload_get_type() -> GType;
    pub fn gst_mikey_payload_new(type_: GstMIKEYPayloadType) -> *mut GstMIKEYPayload;
    pub fn gst_mikey_payload_kemac_add_sub(
        payload: *mut GstMIKEYPayload,
        newpay: *mut GstMIKEYPayload,
    ) -> gboolean;
    pub fn gst_mikey_payload_kemac_get_n_sub(payload: *const GstMIKEYPayload) -> c_uint;
    pub fn gst_mikey_payload_kemac_get_sub(
        payload: *const GstMIKEYPayload,
        idx: c_uint,
    ) -> *const GstMIKEYPayload;
    pub fn gst_mikey_payload_kemac_remove_sub(
        payload: *mut GstMIKEYPayload,
        idx: c_uint,
    ) -> gboolean;
    pub fn gst_mikey_payload_kemac_set(
        payload: *mut GstMIKEYPayload,
        enc_alg: GstMIKEYEncAlg,
        mac_alg: GstMIKEYMacAlg,
    ) -> gboolean;
    pub fn gst_mikey_payload_key_data_set_interval(
        payload: *mut GstMIKEYPayload,
        vf_len: u8,
        vf_data: *const u8,
        vt_len: u8,
        vt_data: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_payload_key_data_set_key(
        payload: *mut GstMIKEYPayload,
        key_type: GstMIKEYKeyDataType,
        key_len: u16,
        key_data: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_payload_key_data_set_salt(
        payload: *mut GstMIKEYPayload,
        salt_len: u16,
        salt_data: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_payload_key_data_set_spi(
        payload: *mut GstMIKEYPayload,
        spi_len: u8,
        spi_data: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_payload_pke_set(
        payload: *mut GstMIKEYPayload,
        C: GstMIKEYCacheType,
        data_len: u16,
        data: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_payload_rand_set(
        payload: *mut GstMIKEYPayload,
        len: u8,
        rand: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_payload_sp_add_param(
        payload: *mut GstMIKEYPayload,
        type_: u8,
        len: u8,
        val: *const u8,
    ) -> gboolean;
    pub fn gst_mikey_payload_sp_get_n_params(payload: *const GstMIKEYPayload) -> c_uint;
    pub fn gst_mikey_payload_sp_get_param(
        payload: *const GstMIKEYPayload,
        idx: c_uint,
    ) -> *const GstMIKEYPayloadSPParam;
    pub fn gst_mikey_payload_sp_remove_param(
        payload: *mut GstMIKEYPayload,
        idx: c_uint,
    ) -> gboolean;
    pub fn gst_mikey_payload_sp_set(
        payload: *mut GstMIKEYPayload,
        policy: c_uint,
        proto: GstMIKEYSecProto,
    ) -> gboolean;
    pub fn gst_mikey_payload_t_set(
        payload: *mut GstMIKEYPayload,
        type_: GstMIKEYTSType,
        ts_value: *const u8,
    ) -> gboolean;

    //=========================================================================
    // GstSDPAttribute
    //=========================================================================
    pub fn gst_sdp_attribute_clear(attr: *mut GstSDPAttribute) -> GstSDPResult;
    pub fn gst_sdp_attribute_set(
        attr: *mut GstSDPAttribute,
        key: *const c_char,
        value: *const c_char,
    ) -> GstSDPResult;

    //=========================================================================
    // GstSDPBandwidth
    //=========================================================================
    pub fn gst_sdp_bandwidth_clear(bw: *mut GstSDPBandwidth) -> GstSDPResult;
    pub fn gst_sdp_bandwidth_set(
        bw: *mut GstSDPBandwidth,
        bwtype: *const c_char,
        bandwidth: c_uint,
    ) -> GstSDPResult;

    //=========================================================================
    // GstSDPConnection
    //=========================================================================
    pub fn gst_sdp_connection_clear(conn: *mut GstSDPConnection) -> GstSDPResult;
    pub fn gst_sdp_connection_set(
        conn: *mut GstSDPConnection,
        nettype: *const c_char,
        addrtype: *const c_char,
        address: *const c_char,
        ttl: c_uint,
        addr_number: c_uint,
    ) -> GstSDPResult;

    //=========================================================================
    // GstSDPMedia
    //=========================================================================
    pub fn gst_sdp_media_add_attribute(
        media: *mut GstSDPMedia,
        key: *const c_char,
        value: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_add_bandwidth(
        media: *mut GstSDPMedia,
        bwtype: *const c_char,
        bandwidth: c_uint,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_add_connection(
        media: *mut GstSDPMedia,
        nettype: *const c_char,
        addrtype: *const c_char,
        address: *const c_char,
        ttl: c_uint,
        addr_number: c_uint,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_add_format(media: *mut GstSDPMedia, format: *const c_char)
        -> GstSDPResult;
    pub fn gst_sdp_media_as_text(media: *const GstSDPMedia) -> *mut c_char;
    pub fn gst_sdp_media_attributes_len(media: *const GstSDPMedia) -> c_uint;
    pub fn gst_sdp_media_attributes_to_caps(
        media: *const GstSDPMedia,
        caps: *mut gst::GstCaps,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_bandwidths_len(media: *const GstSDPMedia) -> c_uint;
    pub fn gst_sdp_media_connections_len(media: *const GstSDPMedia) -> c_uint;
    pub fn gst_sdp_media_copy(
        media: *const GstSDPMedia,
        copy: *mut *mut GstSDPMedia,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_formats_len(media: *const GstSDPMedia) -> c_uint;
    pub fn gst_sdp_media_free(media: *mut GstSDPMedia) -> GstSDPResult;
    pub fn gst_sdp_media_get_attribute(
        media: *const GstSDPMedia,
        idx: c_uint,
    ) -> *const GstSDPAttribute;
    pub fn gst_sdp_media_get_attribute_val(
        media: *const GstSDPMedia,
        key: *const c_char,
    ) -> *const c_char;
    pub fn gst_sdp_media_get_attribute_val_n(
        media: *const GstSDPMedia,
        key: *const c_char,
        nth: c_uint,
    ) -> *const c_char;
    pub fn gst_sdp_media_get_bandwidth(
        media: *const GstSDPMedia,
        idx: c_uint,
    ) -> *const GstSDPBandwidth;
    pub fn gst_sdp_media_get_caps_from_media(
        media: *const GstSDPMedia,
        pt: c_int,
    ) -> *mut gst::GstCaps;
    pub fn gst_sdp_media_get_connection(
        media: *const GstSDPMedia,
        idx: c_uint,
    ) -> *const GstSDPConnection;
    pub fn gst_sdp_media_get_format(media: *const GstSDPMedia, idx: c_uint) -> *const c_char;
    pub fn gst_sdp_media_get_information(media: *const GstSDPMedia) -> *const c_char;
    pub fn gst_sdp_media_get_key(media: *const GstSDPMedia) -> *const GstSDPKey;
    pub fn gst_sdp_media_get_media(media: *const GstSDPMedia) -> *const c_char;
    pub fn gst_sdp_media_get_num_ports(media: *const GstSDPMedia) -> c_uint;
    pub fn gst_sdp_media_get_port(media: *const GstSDPMedia) -> c_uint;
    pub fn gst_sdp_media_get_proto(media: *const GstSDPMedia) -> *const c_char;
    pub fn gst_sdp_media_insert_attribute(
        media: *mut GstSDPMedia,
        idx: c_int,
        attr: *mut GstSDPAttribute,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_insert_bandwidth(
        media: *mut GstSDPMedia,
        idx: c_int,
        bw: *mut GstSDPBandwidth,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_insert_connection(
        media: *mut GstSDPMedia,
        idx: c_int,
        conn: *mut GstSDPConnection,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_insert_format(
        media: *mut GstSDPMedia,
        idx: c_int,
        format: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_parse_keymgmt(
        media: *const GstSDPMedia,
        mikey: *mut *mut GstMIKEYMessage,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_remove_attribute(media: *mut GstSDPMedia, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_media_remove_bandwidth(media: *mut GstSDPMedia, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_media_remove_connection(media: *mut GstSDPMedia, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_media_remove_format(media: *mut GstSDPMedia, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_media_replace_attribute(
        media: *mut GstSDPMedia,
        idx: c_uint,
        attr: *mut GstSDPAttribute,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_replace_bandwidth(
        media: *mut GstSDPMedia,
        idx: c_uint,
        bw: *mut GstSDPBandwidth,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_replace_connection(
        media: *mut GstSDPMedia,
        idx: c_uint,
        conn: *mut GstSDPConnection,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_replace_format(
        media: *mut GstSDPMedia,
        idx: c_uint,
        format: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_set_information(
        media: *mut GstSDPMedia,
        information: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_set_key(
        media: *mut GstSDPMedia,
        type_: *const c_char,
        data: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_set_media(media: *mut GstSDPMedia, med: *const c_char) -> GstSDPResult;
    pub fn gst_sdp_media_set_port_info(
        media: *mut GstSDPMedia,
        port: c_uint,
        num_ports: c_uint,
    ) -> GstSDPResult;
    pub fn gst_sdp_media_set_proto(media: *mut GstSDPMedia, proto: *const c_char) -> GstSDPResult;
    pub fn gst_sdp_media_uninit(media: *mut GstSDPMedia) -> GstSDPResult;
    pub fn gst_sdp_media_init(media: *mut GstSDPMedia) -> GstSDPResult;
    pub fn gst_sdp_media_new(media: *mut *mut GstSDPMedia) -> GstSDPResult;
    pub fn gst_sdp_media_set_media_from_caps(
        caps: *const gst::GstCaps,
        media: *mut GstSDPMedia,
    ) -> GstSDPResult;

    //=========================================================================
    // GstSDPMessage
    //=========================================================================
    pub fn gst_sdp_message_get_type() -> GType;
    pub fn gst_sdp_message_add_attribute(
        msg: *mut GstSDPMessage,
        key: *const c_char,
        value: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_add_bandwidth(
        msg: *mut GstSDPMessage,
        bwtype: *const c_char,
        bandwidth: c_uint,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_add_email(msg: *mut GstSDPMessage, email: *const c_char)
        -> GstSDPResult;
    pub fn gst_sdp_message_add_media(
        msg: *mut GstSDPMessage,
        media: *mut GstSDPMedia,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_add_phone(msg: *mut GstSDPMessage, phone: *const c_char)
        -> GstSDPResult;
    pub fn gst_sdp_message_add_time(
        msg: *mut GstSDPMessage,
        start: *const c_char,
        stop: *const c_char,
        repeat: *mut *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_add_zone(
        msg: *mut GstSDPMessage,
        adj_time: *const c_char,
        typed_time: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_as_text(msg: *const GstSDPMessage) -> *mut c_char;
    pub fn gst_sdp_message_attributes_len(msg: *const GstSDPMessage) -> c_uint;
    pub fn gst_sdp_message_attributes_to_caps(
        msg: *const GstSDPMessage,
        caps: *mut gst::GstCaps,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_bandwidths_len(msg: *const GstSDPMessage) -> c_uint;
    pub fn gst_sdp_message_copy(
        msg: *const GstSDPMessage,
        copy: *mut *mut GstSDPMessage,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_dump(msg: *const GstSDPMessage) -> GstSDPResult;
    pub fn gst_sdp_message_emails_len(msg: *const GstSDPMessage) -> c_uint;
    pub fn gst_sdp_message_free(msg: *mut GstSDPMessage) -> GstSDPResult;
    pub fn gst_sdp_message_get_attribute(
        msg: *const GstSDPMessage,
        idx: c_uint,
    ) -> *const GstSDPAttribute;
    pub fn gst_sdp_message_get_attribute_val(
        msg: *const GstSDPMessage,
        key: *const c_char,
    ) -> *const c_char;
    pub fn gst_sdp_message_get_attribute_val_n(
        msg: *const GstSDPMessage,
        key: *const c_char,
        nth: c_uint,
    ) -> *const c_char;
    pub fn gst_sdp_message_get_bandwidth(
        msg: *const GstSDPMessage,
        idx: c_uint,
    ) -> *const GstSDPBandwidth;
    pub fn gst_sdp_message_get_connection(msg: *const GstSDPMessage) -> *const GstSDPConnection;
    pub fn gst_sdp_message_get_email(msg: *const GstSDPMessage, idx: c_uint) -> *const c_char;
    pub fn gst_sdp_message_get_information(msg: *const GstSDPMessage) -> *const c_char;
    pub fn gst_sdp_message_get_key(msg: *const GstSDPMessage) -> *const GstSDPKey;
    pub fn gst_sdp_message_get_media(msg: *const GstSDPMessage, idx: c_uint) -> *const GstSDPMedia;
    pub fn gst_sdp_message_get_origin(msg: *const GstSDPMessage) -> *const GstSDPOrigin;
    pub fn gst_sdp_message_get_phone(msg: *const GstSDPMessage, idx: c_uint) -> *const c_char;
    pub fn gst_sdp_message_get_session_name(msg: *const GstSDPMessage) -> *const c_char;
    pub fn gst_sdp_message_get_time(msg: *const GstSDPMessage, idx: c_uint) -> *const GstSDPTime;
    pub fn gst_sdp_message_get_uri(msg: *const GstSDPMessage) -> *const c_char;
    pub fn gst_sdp_message_get_version(msg: *const GstSDPMessage) -> *const c_char;
    pub fn gst_sdp_message_get_zone(msg: *const GstSDPMessage, idx: c_uint) -> *const GstSDPZone;
    pub fn gst_sdp_message_insert_attribute(
        msg: *mut GstSDPMessage,
        idx: c_int,
        attr: *mut GstSDPAttribute,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_insert_bandwidth(
        msg: *mut GstSDPMessage,
        idx: c_int,
        bw: *mut GstSDPBandwidth,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_insert_email(
        msg: *mut GstSDPMessage,
        idx: c_int,
        email: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_insert_phone(
        msg: *mut GstSDPMessage,
        idx: c_int,
        phone: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_insert_time(
        msg: *mut GstSDPMessage,
        idx: c_int,
        t: *mut GstSDPTime,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_insert_zone(
        msg: *mut GstSDPMessage,
        idx: c_int,
        zone: *mut GstSDPZone,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_medias_len(msg: *const GstSDPMessage) -> c_uint;
    pub fn gst_sdp_message_parse_keymgmt(
        msg: *const GstSDPMessage,
        mikey: *mut *mut GstMIKEYMessage,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_phones_len(msg: *const GstSDPMessage) -> c_uint;
    pub fn gst_sdp_message_remove_attribute(msg: *mut GstSDPMessage, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_message_remove_bandwidth(msg: *mut GstSDPMessage, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_message_remove_email(msg: *mut GstSDPMessage, idx: c_uint) -> GstSDPResult;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_sdp_message_remove_media(msg: *mut GstSDPMessage, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_message_remove_phone(msg: *mut GstSDPMessage, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_message_remove_time(msg: *mut GstSDPMessage, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_message_remove_zone(msg: *mut GstSDPMessage, idx: c_uint) -> GstSDPResult;
    pub fn gst_sdp_message_replace_attribute(
        msg: *mut GstSDPMessage,
        idx: c_uint,
        attr: *mut GstSDPAttribute,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_replace_bandwidth(
        msg: *mut GstSDPMessage,
        idx: c_uint,
        bw: *mut GstSDPBandwidth,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_replace_email(
        msg: *mut GstSDPMessage,
        idx: c_uint,
        email: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_replace_phone(
        msg: *mut GstSDPMessage,
        idx: c_uint,
        phone: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_replace_time(
        msg: *mut GstSDPMessage,
        idx: c_uint,
        t: *mut GstSDPTime,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_replace_zone(
        msg: *mut GstSDPMessage,
        idx: c_uint,
        zone: *mut GstSDPZone,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_set_connection(
        msg: *mut GstSDPMessage,
        nettype: *const c_char,
        addrtype: *const c_char,
        address: *const c_char,
        ttl: c_uint,
        addr_number: c_uint,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_set_information(
        msg: *mut GstSDPMessage,
        information: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_set_key(
        msg: *mut GstSDPMessage,
        type_: *const c_char,
        data: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_set_origin(
        msg: *mut GstSDPMessage,
        username: *const c_char,
        sess_id: *const c_char,
        sess_version: *const c_char,
        nettype: *const c_char,
        addrtype: *const c_char,
        addr: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_set_session_name(
        msg: *mut GstSDPMessage,
        session_name: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_set_uri(msg: *mut GstSDPMessage, uri: *const c_char) -> GstSDPResult;
    pub fn gst_sdp_message_set_version(
        msg: *mut GstSDPMessage,
        version: *const c_char,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_times_len(msg: *const GstSDPMessage) -> c_uint;
    pub fn gst_sdp_message_uninit(msg: *mut GstSDPMessage) -> GstSDPResult;
    pub fn gst_sdp_message_zones_len(msg: *const GstSDPMessage) -> c_uint;
    pub fn gst_sdp_message_as_uri(scheme: *const c_char, msg: *const GstSDPMessage) -> *mut c_char;
    pub fn gst_sdp_message_init(msg: *mut GstSDPMessage) -> GstSDPResult;
    pub fn gst_sdp_message_new(msg: *mut *mut GstSDPMessage) -> GstSDPResult;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_sdp_message_new_from_text(
        text: *const c_char,
        msg: *mut *mut GstSDPMessage,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_parse_buffer(
        data: *const u8,
        size: c_uint,
        msg: *mut GstSDPMessage,
    ) -> GstSDPResult;
    pub fn gst_sdp_message_parse_uri(uri: *const c_char, msg: *mut GstSDPMessage) -> GstSDPResult;

    //=========================================================================
    // GstSDPTime
    //=========================================================================
    pub fn gst_sdp_time_clear(t: *mut GstSDPTime) -> GstSDPResult;
    pub fn gst_sdp_time_set(
        t: *mut GstSDPTime,
        start: *const c_char,
        stop: *const c_char,
        repeat: *mut *const c_char,
    ) -> GstSDPResult;

    //=========================================================================
    // GstSDPZone
    //=========================================================================
    pub fn gst_sdp_zone_clear(zone: *mut GstSDPZone) -> GstSDPResult;
    pub fn gst_sdp_zone_set(
        zone: *mut GstSDPZone,
        adj_time: *const c_char,
        typed_time: *const c_char,
    ) -> GstSDPResult;

    //=========================================================================
    // Other functions
    //=========================================================================
    pub fn gst_sdp_address_is_multicast(
        nettype: *const c_char,
        addrtype: *const c_char,
        addr: *const c_char,
    ) -> gboolean;
    pub fn gst_sdp_make_keymgmt(uri: *const c_char, base64: *const c_char) -> *mut c_char;

}
