Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/dom/media/webrtc/sdp/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 14 kB image not shown  

Quelle  RsdparsaSdpInc.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef _RUSTSDPINC_H_
#define _RUSTSDPINC_H_

#include "nsError.h"
#include "mozilla/Maybe.h"

#include <stdint.h>
#include <stdbool.h>

struct BandwidthVec;
struct RustSdpSession;
struct RustSdpError;
struct RustMediaSection;
struct RustAttributeList;
struct StringVec;
struct U8Vec;
struct U32Vec;
struct U16Vec;
struct F32Vec;
struct SsrcVec;
struct RustHeapString;

enum class RustSdpAddressType { kRustAddrIp4, kRustAddrIp6 };

struct StringView {
  const char* buf;
  size_t len;
};

struct RustAddress {
  char ipAddress[50];
  StringView fqdn;
  bool isFqdn;
};

struct RustExplicitlyTypedAddress {
  RustSdpAddressType addressType;
  RustAddress address;
};

struct RustSdpConnection {
  RustExplicitlyTypedAddress addr;
  uint8_t ttl;
  uint64_t amount;
};

struct RustSdpOrigin {
  StringView username;
  uint64_t sessionId;
  uint64_t sessionVersion;
  RustExplicitlyTypedAddress addr;  // TODO address
};

enum class RustSdpMediaValue { kRustAudio, kRustVideo, kRustApplication };

enum class RustSdpProtocolValue {
  kRustRtpSavpf,
  kRustUdpTlsRtpSavp,
  kRustTcpDtlsRtpSavp,
  kRustUdpTlsRtpSavpf,
  kRustTcpDtlsRtpSavpf,
  kRustDtlsSctp,
  kRustUdpDtlsSctp,
  kRustTcpDtlsSctp,
  kRustRtpAvp,
  kRustRtpAvpf,
  kRustRtpSavp,
};

enum class RustSdpFormatType { kRustIntegers, kRustStrings };

enum class RustSdpAttributeFingerprintHashAlgorithm : uint16_t {
  kSha1,
  kSha224,
  kSha256,
  kSha384,
  kSha512,
};

struct RustSdpAttributeFingerprint {
  RustSdpAttributeFingerprintHashAlgorithm hashAlgorithm;
  U8Vec* fingerprint;
};

enum class RustSdpSetup {
  kRustActive,
  kRustActpass,
  kRustHoldconn,
  kRustPassive
};

enum class RustSdpAttributeDtlsMessageType : uint8_t {
  kClient,
  kServer,
};

struct RustSdpAttributeDtlsMessage {
  RustSdpAttributeDtlsMessageType role;
  StringView value;
};

struct RustSdpAttributeSsrc {
  uint32_t id;
  StringView attribute;
  StringView value;
};

enum class RustSdpAttributeSsrcGroupSemantic {
  kRustDup,
  kRustFid,
  kRustFec,
  kRustFecFr,
  kRustSim,
};

struct RustSdpAttributeSsrcGroup {
  RustSdpAttributeSsrcGroupSemantic semantic;
  SsrcVec* ssrcs;
};

struct RustSdpAttributeRtpmap {
  uint8_t payloadType;
  StringView codecName;
  uint32_t frequency;
  uint32_t channels;
};

struct RustSdpAttributeRtcpFb {
  uint32_t payloadType;
  uint32_t feedbackType;
  StringView parameter;
  StringView extra;
};

struct RustSdpAttributeRidParameters {
  uint32_t max_width;
  uint32_t max_height;
  uint32_t max_fps;
  uint32_t max_fs;
  uint32_t max_br;
  uint32_t max_pps;
  StringVec* unknown;
};

struct RustSdpAttributeRid {
  StringView id;
  uint32_t direction;
  U16Vec* formats;
  RustSdpAttributeRidParameters params;
  StringVec* depends;
};

struct RustSdpAttributeImageAttrXYRange {
  uint32_t min;
  uint32_t max;
  uint32_t step;
  U32Vec* discrete_values;
};

struct RustSdpAttributeImageAttrSRange {
  float min;
  float max;
  F32Vec* discrete_values;
};

struct RustSdpAttributeImageAttrPRange {
  float min;
  float max;
};

struct RustSdpAttributeImageAttrSet {
  RustSdpAttributeImageAttrXYRange x;
  RustSdpAttributeImageAttrXYRange y;
  bool has_sar;
  RustSdpAttributeImageAttrSRange sar;
  bool has_par;
  RustSdpAttributeImageAttrPRange par;
  float q;
};

struct RustSdpAttributeImageAttrSetVec;
struct RustSdpAttributeImageAttrSetList {
  RustSdpAttributeImageAttrSetVec* sets;
};

struct RustSdpAttributeImageAttr {
  uint32_t payloadType;
  RustSdpAttributeImageAttrSetList send;
  RustSdpAttributeImageAttrSetList recv;
};

struct RustAv1FmtpParameters {
  uint8_t profile;
  bool has_profile;
  uint8_t level_idx;
  bool has_level_idx;
  uint8_t tier;
  bool has_tier;
};

struct RustRtxFmtpParameters {
  uint8_t apt;
  bool has_rtx_time;
  uint32_t rtx_time;
};

struct RustSdpAttributeFmtpParameters {
  // H264
  uint32_t packetization_mode;
  bool level_asymmetry_allowed;
  uint32_t profile_level_id;
  uint32_t max_fs;
  uint32_t max_cpb;
  uint32_t max_dpb;
  uint32_t max_br;
  uint32_t max_mbps;

  // VP8 and VP9
  // max_fs, already defined in H264
  uint32_t max_fr;

  // Opus
  uint32_t maxplaybackrate;
  uint32_t maxaveragebitrate;
  bool usedtx;
  bool stereo;
  bool useinbandfec;
  bool cbr;
  uint32_t ptime;
  uint32_t minptime;
  uint32_t maxptime;

  // telephone-event
  StringView dtmf_tones;

  // AV1
  RustAv1FmtpParameters av1;

  // RTX
  RustRtxFmtpParameters rtx;

  // Red codecs
  U8Vec* encodings;

  // Unknown
  StringVec* unknown_tokens;
};

struct RustSdpAttributeFmtp {
  uint8_t payloadType;
  StringView codecName;
  RustSdpAttributeFmtpParameters parameters;
};

struct RustSdpAttributeFlags {
  bool iceLite;
  bool rtcpMux;
  bool rtcpRsize;
  bool bundleOnly;
  bool endOfCandidates;
};

struct RustSdpAttributeMsid {
  StringView id;
  StringView appdata;
};

struct RustSdpAttributeMsidSemantic {
  StringView semantic;
  StringVec* msids;
};

enum class RustSdpAttributeGroupSemantic {
  kRustLipSynchronization,
  kRustFlowIdentification,
  kRustSingleReservationFlow,
  kRustAlternateNetworkAddressType,
  kRustForwardErrorCorrection,
  kRustDecodingDependency,
  kRustBundle,
};

struct RustSdpAttributeGroup {
  RustSdpAttributeGroupSemantic semantic;
  StringVec* tags;
};

struct RustSdpAttributeRtcp {
  uint32_t port;
  RustExplicitlyTypedAddress unicastAddr;
  bool has_address;
};

struct RustSdpAttributeSctpmap {
  uint32_t port;
  uint32_t channels;
};

struct RustSdpAttributeSimulcastId {
  StringView id;
  bool paused;
};

struct RustSdpAttributeSimulcastIdVec;
struct RustSdpAttributeSimulcastVersion {
  RustSdpAttributeSimulcastIdVec* ids;
};

struct RustSdpAttributeSimulcastVersionVec;
struct RustSdpAttributeSimulcast {
  RustSdpAttributeSimulcastVersionVec* send;
  RustSdpAttributeSimulcastVersionVec* recv;
};

enum class RustDirection {
  kRustRecvonly,
  kRustSendonly,
  kRustSendrecv,
  kRustInactive
};

struct RustSdpAttributeRemoteCandidate {
  uint32_t component;
  RustAddress address;
  uint32_t port;
};

struct RustSdpAttributeExtmap {
  uint16_t id;
  bool direction_specified;
  RustDirection direction;
  StringView url;
  StringView extensionAttributes;
};

extern "C" {

size_t string_vec_len(const StringVec* vec);
nsresult string_vec_get_view(const StringVec* vec, size_t index,
                             StringView* str);
nsresult free_boxed_string_vec(StringVec* vec);

size_t f32_vec_len(const F32Vec* vec);
nsresult f32_vec_get(const F32Vec* vec, size_t index, float* ret);

size_t u32_vec_len(const U32Vec* vec);
nsresult u32_vec_get(const U32Vec* vec, size_t index, uint32_t* ret);

size_t u16_vec_len(const U16Vec* vec);
nsresult u16_vec_get(const U16Vec* vec, size_t index, uint16_t* ret);

size_t u8_vec_len(const U8Vec* vec);
nsresult u8_vec_get(const U8Vec* vec, size_t index, uint8_t* ret);

size_t ssrc_vec_len(const SsrcVec* vec);
nsresult ssrc_vec_get_id(const SsrcVec* vec, size_t index, uint32_t* ret);

void sdp_free_string(char* string);

nsresult parse_sdp(StringView sdp, bool fail_on_warning, RustSdpSession** ret,
                   RustSdpError** err);
RustSdpSession* sdp_new_reference(RustSdpSession* aSess);
RustSdpSession* create_sdp_clone(const RustSdpSession* aSess);
void sdp_free_session(RustSdpSession* ret);
size_t sdp_get_error_line_num(const RustSdpError* err);
char* sdp_get_error_message(const RustSdpError* err);
void sdp_free_error_message(char* message);
void sdp_free_error(RustSdpError* err);

RustSdpOrigin sdp_get_origin(const RustSdpSession* aSess);

uint32_t get_sdp_bandwidth(const RustSdpSession* aSess,
                           const char* aBandwidthType);
BandwidthVec* sdp_get_session_bandwidth_vec(const RustSdpSession* aSess);
BandwidthVec* sdp_get_media_bandwidth_vec(const RustMediaSection* aMediaSec);
char* sdp_serialize_bandwidth(const BandwidthVec* bandwidths);
bool sdp_session_has_connection(const RustSdpSession* aSess);
nsresult sdp_get_session_connection(const RustSdpSession* aSess,
                                    RustSdpConnection* ret);
RustAttributeList* get_sdp_session_attributes(const RustSdpSession* aSess);

size_t sdp_media_section_count(const RustSdpSession* aSess);
RustMediaSection* sdp_get_media_section(const RustSdpSession* aSess,
                                        size_t aLevel);
nsresult sdp_add_media_section(RustSdpSession* aSess, uint32_t aMediaType,
                               uint32_t aDirection, uint16_t aPort,
                               uint32_t aProtocol, uint32_t aAddrType,
                               StringView aAddr);
RustSdpMediaValue sdp_rust_get_media_type(const RustMediaSection* aMediaSec);
RustSdpProtocolValue sdp_get_media_protocol(const RustMediaSection* aMediaSec);
RustSdpFormatType sdp_get_format_type(const RustMediaSection* aMediaSec);
StringVec* sdp_get_format_string_vec(const RustMediaSection* aMediaSec);
U32Vec* sdp_get_format_u32_vec(const RustMediaSection* aMediaSec);
void sdp_set_media_port(const RustMediaSection* aMediaSec, uint32_t aPort);
uint32_t sdp_get_media_port(const RustMediaSection* aMediaSec);
uint32_t sdp_get_media_port_count(const RustMediaSection* aMediaSec);
uint32_t sdp_get_media_bandwidth(const RustMediaSection* aMediaSec,
                                 const char* aBandwidthType);
bool sdp_media_has_connection(const RustMediaSection* aMediaSec);
nsresult sdp_get_media_connection(const RustMediaSection* aMediaSec,
                                  RustSdpConnection* ret);

RustAttributeList* sdp_get_media_attribute_list(
    const RustMediaSection* aMediaSec);

nsresult sdp_media_add_codec(const RustMediaSection* aMediaSec, uint8_t aPT,
                             StringView aCodecName, uint32_t aClockrate,
                             uint16_t channels);
void sdp_media_clear_codecs(const RustMediaSection* aMediaSec);
nsresult sdp_media_add_datachannel(const RustMediaSection* aMediaSec,
                                   StringView aName, uint16_t aPort,
                                   uint16_t streams, uint32_t aMessageSize);

nsresult sdp_get_iceufrag(const RustAttributeList* aList, StringView* ret);
nsresult sdp_get_icepwd(const RustAttributeList* aList, StringView* ret);
nsresult sdp_get_identity(const RustAttributeList* aList, StringView* ret);
nsresult sdp_get_iceoptions(const RustAttributeList* aList, StringVec** ret);

nsresult sdp_get_dtls_message(const RustAttributeList* aList,
                              RustSdpAttributeDtlsMessage* ret);

size_t sdp_get_fingerprint_count(const RustAttributeList* aList);
void sdp_get_fingerprints(const RustAttributeList* aList, size_t listSize,
                          RustSdpAttributeFingerprint* ret);

nsresult sdp_get_setup(const RustAttributeList* aList, RustSdpSetup* ret);

size_t sdp_get_ssrc_count(const RustAttributeList* aList);
void sdp_get_ssrcs(const RustAttributeList* aList, size_t listSize,
                   RustSdpAttributeSsrc* ret);

size_t sdp_get_ssrc_group_count(const RustAttributeList* aList);
void sdp_get_ssrc_groups(const RustAttributeList* aList, size_t listSize,
                         RustSdpAttributeSsrcGroup* ret);

size_t sdp_get_rtpmap_count(const RustAttributeList* aList);
void sdp_get_rtpmaps(const RustAttributeList* aList, size_t listSize,
                     RustSdpAttributeRtpmap* ret);

size_t sdp_get_fmtp_count(const RustAttributeList* aList);
size_t sdp_get_fmtp(const RustAttributeList* aList, size_t listSize,
                    RustSdpAttributeFmtp* ret);

int64_t sdp_get_ptime(const RustAttributeList* aList);
int64_t sdp_get_max_msg_size(const RustAttributeList* aList);
int64_t sdp_get_sctp_port(const RustAttributeList* aList);
nsresult sdp_get_maxptime(const RustAttributeList* aList, uint64_t* aMaxPtime);

RustSdpAttributeFlags sdp_get_attribute_flags(const RustAttributeList* aList);

nsresult sdp_get_mid(const RustAttributeList* aList, StringView* ret);

size_t sdp_get_msid_count(const RustAttributeList* aList);
void sdp_get_msids(const RustAttributeList* aList, size_t listSize,
                   RustSdpAttributeMsid* ret);

size_t sdp_get_msid_semantic_count(RustAttributeList* aList);
void sdp_get_msid_semantics(const RustAttributeList* aList, size_t listSize,
                            RustSdpAttributeMsidSemantic* ret);

size_t sdp_get_group_count(const RustAttributeList* aList);
void sdp_get_groups(const RustAttributeList* aList, size_t listSize,
                    RustSdpAttributeGroup* ret);

nsresult sdp_get_rtcp(const RustAttributeList* aList,
                      RustSdpAttributeRtcp* ret);

size_t sdp_get_rtcpfb_count(const RustAttributeList* aList);
void sdp_get_rtcpfbs(const RustAttributeList* aList, size_t listSize,
                     RustSdpAttributeRtcpFb* ret);

size_t sdp_get_imageattr_count(const RustAttributeList* aList);
void sdp_get_imageattrs(const RustAttributeList* aList, size_t listSize,
                        RustSdpAttributeImageAttr* ret);

size_t sdp_imageattr_get_set_count(const RustSdpAttributeImageAttrSetVec* sets);
void sdp_imageattr_get_sets(const RustSdpAttributeImageAttrSetVec* sets,
                            size_t listSize, RustSdpAttributeImageAttrSet* ret);

size_t sdp_get_sctpmap_count(const RustAttributeList* aList);
void sdp_get_sctpmaps(const RustAttributeList* aList, size_t listSize,
                      RustSdpAttributeSctpmap* ret);

nsresult sdp_get_simulcast(const RustAttributeList* aList,
                           RustSdpAttributeSimulcast* ret);

size_t sdp_simulcast_get_version_count(
    const RustSdpAttributeSimulcastVersionVec* aVersionList);
void sdp_simulcast_get_versions(
    const RustSdpAttributeSimulcastVersionVec* aversionList, size_t listSize,
    RustSdpAttributeSimulcastVersion* ret);

size_t sdp_simulcast_get_ids_count(const RustSdpAttributeSimulcastIdVec* aAlts);
void sdp_simulcast_get_ids(const RustSdpAttributeSimulcastIdVec* aAlts,
                           size_t listSize, RustSdpAttributeSimulcastId* ret);

RustDirection sdp_get_direction(const RustAttributeList* aList);

size_t sdp_get_remote_candidate_count(const RustAttributeList* aList);
void sdp_get_remote_candidates(const RustAttributeList* aList, size_t listSize,
                               RustSdpAttributeRemoteCandidate* ret);

size_t sdp_get_candidate_count(const RustAttributeList* aList);
void sdp_get_candidates(const RustAttributeList* aLisst, size_t listSize,
                        StringVec** ret);

size_t sdp_get_rid_count(const RustAttributeList* aList);
void sdp_get_rids(const RustAttributeList* aList, size_t listSize,
                  RustSdpAttributeRid* ret);

size_t sdp_get_extmap_count(const RustAttributeList* aList);
void sdp_get_extmaps(const RustAttributeList* aList, size_t listSize,
                     RustSdpAttributeExtmap* ret);

}  // extern "C"

#endif

Messung V0.5
C=99 H=100 G=99

¤ Dauer der Verarbeitung: 0.2 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.