tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

RsdparsaSdpInc.h (15121B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 #ifndef _RUSTSDPINC_H_
      7 #define _RUSTSDPINC_H_
      8 
      9 #include <stdbool.h>
     10 #include <stdint.h>
     11 
     12 #include "nsError.h"
     13 
     14 struct BandwidthVec;
     15 struct RustSdpSession;
     16 struct RustSdpError;
     17 struct RustMediaSection;
     18 struct RustAttributeList;
     19 struct StringVec;
     20 struct U8Vec;
     21 struct U32Vec;
     22 struct U16Vec;
     23 struct F32Vec;
     24 struct SsrcVec;
     25 struct RustHeapString;
     26 
     27 enum class RustSdpAddressType { kRustAddrIp4, kRustAddrIp6 };
     28 
     29 struct StringView {
     30  const char* buf;
     31  size_t len;
     32 };
     33 
     34 struct RustAddress {
     35  char ipAddress[50];
     36  StringView fqdn;
     37  bool isFqdn;
     38 };
     39 
     40 struct RustExplicitlyTypedAddress {
     41  RustSdpAddressType addressType;
     42  RustAddress address;
     43 };
     44 
     45 struct RustSdpConnection {
     46  RustExplicitlyTypedAddress addr;
     47  uint8_t ttl;
     48  uint64_t amount;
     49 };
     50 
     51 struct RustSdpOrigin {
     52  StringView username;
     53  uint64_t sessionId;
     54  uint64_t sessionVersion;
     55  RustExplicitlyTypedAddress addr;  // TODO address
     56 };
     57 
     58 enum class RustSdpMediaValue { kRustAudio, kRustVideo, kRustApplication };
     59 
     60 enum class RustSdpProtocolValue {
     61  kRustRtpSavpf,
     62  kRustUdpTlsRtpSavp,
     63  kRustTcpDtlsRtpSavp,
     64  kRustUdpTlsRtpSavpf,
     65  kRustTcpDtlsRtpSavpf,
     66  kRustDtlsSctp,
     67  kRustUdpDtlsSctp,
     68  kRustTcpDtlsSctp,
     69  kRustRtpAvp,
     70  kRustRtpAvpf,
     71  kRustRtpSavp,
     72 };
     73 
     74 enum class RustSdpFormatType { kRustIntegers, kRustStrings };
     75 
     76 enum class RustSdpAttributeFingerprintHashAlgorithm : uint16_t {
     77  kSha1,
     78  kSha224,
     79  kSha256,
     80  kSha384,
     81  kSha512,
     82 };
     83 
     84 struct RustSdpAttributeFingerprint {
     85  RustSdpAttributeFingerprintHashAlgorithm hashAlgorithm;
     86  U8Vec* fingerprint;
     87 };
     88 
     89 enum class RustSdpSetup {
     90  kRustActive,
     91  kRustActpass,
     92  kRustHoldconn,
     93  kRustPassive
     94 };
     95 
     96 enum class RustSdpAttributeDtlsMessageType : uint8_t {
     97  kClient,
     98  kServer,
     99 };
    100 
    101 struct RustSdpAttributeDtlsMessage {
    102  RustSdpAttributeDtlsMessageType role;
    103  StringView value;
    104 };
    105 
    106 struct RustSdpAttributeSsrc {
    107  uint32_t id;
    108  StringView attribute;
    109  StringView value;
    110 };
    111 
    112 enum class RustSdpAttributeSsrcGroupSemantic {
    113  kRustDup,
    114  kRustFid,
    115  kRustFec,
    116  kRustFecFr,
    117  kRustSim,
    118 };
    119 
    120 struct RustSdpAttributeSsrcGroup {
    121  RustSdpAttributeSsrcGroupSemantic semantic;
    122  SsrcVec* ssrcs;
    123 };
    124 
    125 struct RustSdpAttributeRtpmap {
    126  uint8_t payloadType;
    127  StringView codecName;
    128  uint32_t frequency;
    129  uint32_t channels;
    130 };
    131 
    132 struct RustSdpAttributeRtcpFb {
    133  uint32_t payloadType;
    134  uint32_t feedbackType;
    135  StringView parameter;
    136  StringView extra;
    137 };
    138 
    139 struct RustSdpAttributeRidParameters {
    140  uint32_t max_width;
    141  uint32_t max_height;
    142  uint32_t max_fps;
    143  uint32_t max_fs;
    144  uint32_t max_br;
    145  uint32_t max_pps;
    146  StringVec* unknown;
    147 };
    148 
    149 struct RustSdpAttributeRid {
    150  StringView id;
    151  uint32_t direction;
    152  U16Vec* formats;
    153  RustSdpAttributeRidParameters params;
    154  StringVec* depends;
    155 };
    156 
    157 struct RustSdpAttributeImageAttrXYRange {
    158  uint32_t min;
    159  uint32_t max;
    160  uint32_t step;
    161  U32Vec* discrete_values;
    162 };
    163 
    164 struct RustSdpAttributeImageAttrSRange {
    165  float min;
    166  float max;
    167  F32Vec* discrete_values;
    168 };
    169 
    170 struct RustSdpAttributeImageAttrPRange {
    171  float min;
    172  float max;
    173 };
    174 
    175 struct RustSdpAttributeImageAttrSet {
    176  RustSdpAttributeImageAttrXYRange x;
    177  RustSdpAttributeImageAttrXYRange y;
    178  bool has_sar;
    179  RustSdpAttributeImageAttrSRange sar;
    180  bool has_par;
    181  RustSdpAttributeImageAttrPRange par;
    182  float q;
    183 };
    184 
    185 struct RustSdpAttributeImageAttrSetVec;
    186 struct RustSdpAttributeImageAttrSetList {
    187  RustSdpAttributeImageAttrSetVec* sets;
    188 };
    189 
    190 struct RustSdpAttributeImageAttr {
    191  uint32_t payloadType;
    192  RustSdpAttributeImageAttrSetList send;
    193  RustSdpAttributeImageAttrSetList recv;
    194 };
    195 
    196 struct RustAv1FmtpParameters {
    197  uint8_t profile;
    198  bool has_profile;
    199  uint8_t level_idx;
    200  bool has_level_idx;
    201  uint8_t tier;
    202  bool has_tier;
    203 };
    204 
    205 struct RustRtxFmtpParameters {
    206  uint8_t apt;
    207  bool has_rtx_time;
    208  uint32_t rtx_time;
    209 };
    210 
    211 struct RustSdpAttributeFmtpParameters {
    212  // H264
    213  uint32_t packetization_mode;
    214  bool level_asymmetry_allowed;
    215  uint32_t profile_level_id;
    216  uint32_t max_fs;
    217  uint32_t max_cpb;
    218  uint32_t max_dpb;
    219  uint32_t max_br;
    220  uint32_t max_mbps;
    221 
    222  // VP8 and VP9
    223  // max_fs, already defined in H264
    224  uint32_t max_fr;
    225 
    226  // Opus
    227  uint32_t maxplaybackrate;
    228  uint32_t maxaveragebitrate;
    229  bool usedtx;
    230  bool stereo;
    231  bool useinbandfec;
    232  bool cbr;
    233  uint32_t ptime;
    234  uint32_t minptime;
    235  uint32_t maxptime;
    236 
    237  // telephone-event
    238  StringView dtmf_tones;
    239 
    240  // AV1
    241  RustAv1FmtpParameters av1;
    242 
    243  // RTX
    244  RustRtxFmtpParameters rtx;
    245 
    246  // Red codecs
    247  U8Vec* encodings;
    248 
    249  // Unknown
    250  StringVec* unknown_tokens;
    251 };
    252 
    253 struct RustSdpAttributeFmtp {
    254  uint8_t payloadType;
    255  StringView codecName;
    256  RustSdpAttributeFmtpParameters parameters;
    257 };
    258 
    259 struct RustSdpAttributeFlags {
    260  bool iceLite;
    261  bool rtcpMux;
    262  bool rtcpRsize;
    263  bool bundleOnly;
    264  bool endOfCandidates;
    265  bool extmapAllowMixed;
    266 };
    267 
    268 struct RustSdpAttributeMsid {
    269  StringView id;
    270  StringView appdata;
    271 };
    272 
    273 struct RustSdpAttributeMsidSemantic {
    274  StringView semantic;
    275  StringVec* msids;
    276 };
    277 
    278 enum class RustSdpAttributeGroupSemantic {
    279  kRustLipSynchronization,
    280  kRustFlowIdentification,
    281  kRustSingleReservationFlow,
    282  kRustAlternateNetworkAddressType,
    283  kRustForwardErrorCorrection,
    284  kRustDecodingDependency,
    285  kRustBundle,
    286 };
    287 
    288 struct RustSdpAttributeGroup {
    289  RustSdpAttributeGroupSemantic semantic;
    290  StringVec* tags;
    291 };
    292 
    293 struct RustSdpAttributeRtcp {
    294  uint32_t port;
    295  RustExplicitlyTypedAddress unicastAddr;
    296  bool has_address;
    297 };
    298 
    299 struct RustSdpAttributeSctpmap {
    300  uint32_t port;
    301  uint32_t channels;
    302 };
    303 
    304 struct RustSdpAttributeSimulcastId {
    305  StringView id;
    306  bool paused;
    307 };
    308 
    309 struct RustSdpAttributeSimulcastIdVec;
    310 struct RustSdpAttributeSimulcastVersion {
    311  RustSdpAttributeSimulcastIdVec* ids;
    312 };
    313 
    314 struct RustSdpAttributeSimulcastVersionVec;
    315 struct RustSdpAttributeSimulcast {
    316  RustSdpAttributeSimulcastVersionVec* send;
    317  RustSdpAttributeSimulcastVersionVec* recv;
    318 };
    319 
    320 enum class RustDirection {
    321  kRustRecvonly,
    322  kRustSendonly,
    323  kRustSendrecv,
    324  kRustInactive
    325 };
    326 
    327 struct RustSdpAttributeRemoteCandidate {
    328  uint32_t component;
    329  RustAddress address;
    330  uint32_t port;
    331 };
    332 
    333 struct RustSdpAttributeExtmap {
    334  uint16_t id;
    335  bool direction_specified;
    336  RustDirection direction;
    337  StringView url;
    338  StringView extensionAttributes;
    339 };
    340 
    341 extern "C" {
    342 
    343 size_t string_vec_len(const StringVec* vec);
    344 nsresult string_vec_get_view(const StringVec* vec, size_t index,
    345                             StringView* str);
    346 nsresult free_boxed_string_vec(StringVec* vec);
    347 
    348 size_t f32_vec_len(const F32Vec* vec);
    349 nsresult f32_vec_get(const F32Vec* vec, size_t index, float* ret);
    350 
    351 size_t u32_vec_len(const U32Vec* vec);
    352 nsresult u32_vec_get(const U32Vec* vec, size_t index, uint32_t* ret);
    353 
    354 size_t u16_vec_len(const U16Vec* vec);
    355 nsresult u16_vec_get(const U16Vec* vec, size_t index, uint16_t* ret);
    356 
    357 size_t u8_vec_len(const U8Vec* vec);
    358 nsresult u8_vec_get(const U8Vec* vec, size_t index, uint8_t* ret);
    359 
    360 size_t ssrc_vec_len(const SsrcVec* vec);
    361 nsresult ssrc_vec_get_id(const SsrcVec* vec, size_t index, uint32_t* ret);
    362 
    363 void sdp_free_string(char* string);
    364 
    365 nsresult parse_sdp(StringView sdp, bool fail_on_warning, RustSdpSession** ret,
    366                   RustSdpError** err);
    367 RustSdpSession* sdp_new_reference(RustSdpSession* aSess);
    368 RustSdpSession* create_sdp_clone(const RustSdpSession* aSess);
    369 void sdp_free_session(RustSdpSession* ret);
    370 size_t sdp_get_error_line_num(const RustSdpError* err);
    371 char* sdp_get_error_message(const RustSdpError* err);
    372 void sdp_free_error_message(char* message);
    373 void sdp_free_error(RustSdpError* err);
    374 
    375 RustSdpOrigin sdp_get_origin(const RustSdpSession* aSess);
    376 
    377 uint32_t get_sdp_bandwidth(const RustSdpSession* aSess,
    378                           const char* aBandwidthType);
    379 BandwidthVec* sdp_get_session_bandwidth_vec(const RustSdpSession* aSess);
    380 BandwidthVec* sdp_get_media_bandwidth_vec(const RustMediaSection* aMediaSec);
    381 char* sdp_serialize_bandwidth(const BandwidthVec* bandwidths);
    382 bool sdp_session_has_connection(const RustSdpSession* aSess);
    383 nsresult sdp_get_session_connection(const RustSdpSession* aSess,
    384                                    RustSdpConnection* ret);
    385 RustAttributeList* get_sdp_session_attributes(const RustSdpSession* aSess);
    386 
    387 size_t sdp_media_section_count(const RustSdpSession* aSess);
    388 RustMediaSection* sdp_get_media_section(const RustSdpSession* aSess,
    389                                        size_t aLevel);
    390 nsresult sdp_add_media_section(RustSdpSession* aSess, uint32_t aMediaType,
    391                               uint32_t aDirection, uint16_t aPort,
    392                               uint32_t aProtocol, uint32_t aAddrType,
    393                               StringView aAddr);
    394 RustSdpMediaValue sdp_rust_get_media_type(const RustMediaSection* aMediaSec);
    395 RustSdpProtocolValue sdp_get_media_protocol(const RustMediaSection* aMediaSec);
    396 RustSdpFormatType sdp_get_format_type(const RustMediaSection* aMediaSec);
    397 StringVec* sdp_get_format_string_vec(const RustMediaSection* aMediaSec);
    398 U32Vec* sdp_get_format_u32_vec(const RustMediaSection* aMediaSec);
    399 void sdp_set_media_port(const RustMediaSection* aMediaSec, uint32_t aPort);
    400 uint32_t sdp_get_media_port(const RustMediaSection* aMediaSec);
    401 uint32_t sdp_get_media_port_count(const RustMediaSection* aMediaSec);
    402 uint32_t sdp_get_media_bandwidth(const RustMediaSection* aMediaSec,
    403                                 const char* aBandwidthType);
    404 bool sdp_media_has_connection(const RustMediaSection* aMediaSec);
    405 nsresult sdp_get_media_connection(const RustMediaSection* aMediaSec,
    406                                  RustSdpConnection* ret);
    407 
    408 RustAttributeList* sdp_get_media_attribute_list(
    409    const RustMediaSection* aMediaSec);
    410 
    411 nsresult sdp_media_add_codec(const RustMediaSection* aMediaSec, uint8_t aPT,
    412                             StringView aCodecName, uint32_t aClockrate,
    413                             uint16_t channels);
    414 void sdp_media_clear_codecs(const RustMediaSection* aMediaSec);
    415 nsresult sdp_media_add_datachannel(const RustMediaSection* aMediaSec,
    416                                   StringView aName, uint16_t aPort,
    417                                   uint16_t streams, uint32_t aMessageSize);
    418 
    419 nsresult sdp_get_iceufrag(const RustAttributeList* aList, StringView* ret);
    420 nsresult sdp_get_icepwd(const RustAttributeList* aList, StringView* ret);
    421 nsresult sdp_get_identity(const RustAttributeList* aList, StringView* ret);
    422 nsresult sdp_get_iceoptions(const RustAttributeList* aList, StringVec** ret);
    423 
    424 nsresult sdp_get_dtls_message(const RustAttributeList* aList,
    425                              RustSdpAttributeDtlsMessage* ret);
    426 
    427 size_t sdp_get_fingerprint_count(const RustAttributeList* aList);
    428 void sdp_get_fingerprints(const RustAttributeList* aList, size_t listSize,
    429                          RustSdpAttributeFingerprint* ret);
    430 
    431 nsresult sdp_get_setup(const RustAttributeList* aList, RustSdpSetup* ret);
    432 
    433 size_t sdp_get_ssrc_count(const RustAttributeList* aList);
    434 void sdp_get_ssrcs(const RustAttributeList* aList, size_t listSize,
    435                   RustSdpAttributeSsrc* ret);
    436 
    437 size_t sdp_get_ssrc_group_count(const RustAttributeList* aList);
    438 void sdp_get_ssrc_groups(const RustAttributeList* aList, size_t listSize,
    439                         RustSdpAttributeSsrcGroup* ret);
    440 
    441 size_t sdp_get_rtpmap_count(const RustAttributeList* aList);
    442 void sdp_get_rtpmaps(const RustAttributeList* aList, size_t listSize,
    443                     RustSdpAttributeRtpmap* ret);
    444 
    445 size_t sdp_get_fmtp_count(const RustAttributeList* aList);
    446 size_t sdp_get_fmtp(const RustAttributeList* aList, size_t listSize,
    447                    RustSdpAttributeFmtp* ret);
    448 
    449 int64_t sdp_get_ptime(const RustAttributeList* aList);
    450 int64_t sdp_get_max_msg_size(const RustAttributeList* aList);
    451 int64_t sdp_get_sctp_port(const RustAttributeList* aList);
    452 nsresult sdp_get_maxptime(const RustAttributeList* aList, uint64_t* aMaxPtime);
    453 
    454 RustSdpAttributeFlags sdp_get_attribute_flags(const RustAttributeList* aList);
    455 
    456 nsresult sdp_get_mid(const RustAttributeList* aList, StringView* ret);
    457 
    458 size_t sdp_get_msid_count(const RustAttributeList* aList);
    459 void sdp_get_msids(const RustAttributeList* aList, size_t listSize,
    460                   RustSdpAttributeMsid* ret);
    461 
    462 size_t sdp_get_msid_semantic_count(RustAttributeList* aList);
    463 void sdp_get_msid_semantics(const RustAttributeList* aList, size_t listSize,
    464                            RustSdpAttributeMsidSemantic* ret);
    465 
    466 size_t sdp_get_group_count(const RustAttributeList* aList);
    467 void sdp_get_groups(const RustAttributeList* aList, size_t listSize,
    468                    RustSdpAttributeGroup* ret);
    469 
    470 nsresult sdp_get_rtcp(const RustAttributeList* aList,
    471                      RustSdpAttributeRtcp* ret);
    472 
    473 size_t sdp_get_rtcpfb_count(const RustAttributeList* aList);
    474 void sdp_get_rtcpfbs(const RustAttributeList* aList, size_t listSize,
    475                     RustSdpAttributeRtcpFb* ret);
    476 
    477 size_t sdp_get_imageattr_count(const RustAttributeList* aList);
    478 void sdp_get_imageattrs(const RustAttributeList* aList, size_t listSize,
    479                        RustSdpAttributeImageAttr* ret);
    480 
    481 size_t sdp_imageattr_get_set_count(const RustSdpAttributeImageAttrSetVec* sets);
    482 void sdp_imageattr_get_sets(const RustSdpAttributeImageAttrSetVec* sets,
    483                            size_t listSize, RustSdpAttributeImageAttrSet* ret);
    484 
    485 size_t sdp_get_sctpmap_count(const RustAttributeList* aList);
    486 void sdp_get_sctpmaps(const RustAttributeList* aList, size_t listSize,
    487                      RustSdpAttributeSctpmap* ret);
    488 
    489 nsresult sdp_get_simulcast(const RustAttributeList* aList,
    490                           RustSdpAttributeSimulcast* ret);
    491 
    492 size_t sdp_simulcast_get_version_count(
    493    const RustSdpAttributeSimulcastVersionVec* aVersionList);
    494 void sdp_simulcast_get_versions(
    495    const RustSdpAttributeSimulcastVersionVec* aversionList, size_t listSize,
    496    RustSdpAttributeSimulcastVersion* ret);
    497 
    498 size_t sdp_simulcast_get_ids_count(const RustSdpAttributeSimulcastIdVec* aAlts);
    499 void sdp_simulcast_get_ids(const RustSdpAttributeSimulcastIdVec* aAlts,
    500                           size_t listSize, RustSdpAttributeSimulcastId* ret);
    501 
    502 RustDirection sdp_get_direction(const RustAttributeList* aList);
    503 
    504 size_t sdp_get_remote_candidate_count(const RustAttributeList* aList);
    505 void sdp_get_remote_candidates(const RustAttributeList* aList, size_t listSize,
    506                               RustSdpAttributeRemoteCandidate* ret);
    507 
    508 size_t sdp_get_candidate_count(const RustAttributeList* aList);
    509 void sdp_get_candidates(const RustAttributeList* aLisst, size_t listSize,
    510                        StringVec** ret);
    511 
    512 size_t sdp_get_rid_count(const RustAttributeList* aList);
    513 void sdp_get_rids(const RustAttributeList* aList, size_t listSize,
    514                  RustSdpAttributeRid* ret);
    515 
    516 size_t sdp_get_extmap_count(const RustAttributeList* aList);
    517 void sdp_get_extmaps(const RustAttributeList* aList, size_t listSize,
    518                     RustSdpAttributeExtmap* ret);
    519 
    520 }  // extern "C"
    521 
    522 #endif