tor-browser

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

Sdp.h (6045B)


      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 
      7 /*
      8 
      9         ,-----.                  ,--.  ,--.
     10        '  .--./ ,--,--.,--.,--.,-'  '-.`--' ,---. ,--,--,
     11        |  |    ' ,-.  ||  ||  |'-.  .-',--.| .-. ||      `
     12        '  '--'\\ '-'  |'  ''  '  |  |  |  |' '-' '|  ||  |
     13         `-----' `--`--' `----'   `--'  `--' `---' `--''--'
     14 
     15                        :+o+-
     16                      -dNNNNNd.
     17                      yNNNNNNNs
     18                      :mNNNNNm-
     19                       `/sso/``-://-
     20                        .:+sydNNNNNNms:                      `://`
     21                 `-/+shmNNNNNNNNNNNNNNNms-                  :mNNNm/
     22           `-/oydmNNNNNNNNNNNNNNNNNNNNNNNNdo-              +NNNNNN+
     23       .shmNNNNNNNNNNNmdyo/:dNNNNNNNNNNNNNNNNdo.         `sNNNNNm+
     24       hNNNNNNNNmhs+:-`   .dNNNNNNNNNNNNNNNNNNNNh+-`    `hNNNNNm:
     25       -yddyo/:.         -dNNNNm::ymNNNNNNNNNNNNNNNmdy+/dNNNNNd.
     26                        :mNNNNd.   `/ymNNNNNNNNNNNNNNNNNNNNNNh`
     27                       +NNNNNh`       `+hNNNNNNNNNNNNNNNNNNNs
     28                      sNNNNNy`           .yNNNNNm`-/oymNNNm+
     29                    `yNNNNNo              oNNNNNm`     `-.
     30                   .dNNNNm/               oNNNNNm`
     31                   oNNNNm:                +NNNNNm`
     32                   `+yho.                 +NNNNNm`
     33                                          +NNNNNNs.
     34                                          `yNNNNNNmy-
     35                                            -smNNNNNNh:
     36                                              .smNNNNNNh/
     37                                                `omNNNNNNd:
     38                                                  `+dNNNNNd
     39                             ````......````          /hmdy-
     40            `.:/+osyhddmNNMMMMMMMMMMMMMMMMMMMMNNmddhyso+/:.`
     41     `-+shmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmhs+-`
     42  -smMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMds-
     43 hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh
     44 yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMs
     45  .ohNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNh+.
     46      ./oydmMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmhyo:.
     47             `.:/+osyyhddmmNNMMMMMMMMMMMMMMNNmmddhyyso+/:.`
     48 
     49            ,--------.,--.     ,--.           ,--.
     50            '--.  .--'|  ,---. `--' ,---.     |  | ,---.
     51               |  |   |  .-.  |,--.(  .-'     |  |(  .-'
     52               |  |   |  | |  ||  |.-'  `)    |  |.-'  `)
     53               `--'   `--' `--'`--'`----'     `--'`----'
     54                                                                ,--.
     55       ,---.  ,------.  ,------.                  ,--.          |  |
     56      '   .-' |  .-.  \ |  .--. ' ,--,--.,--.--.,-'  '-. ,--,--.|  |
     57      `.  `-. |  |  \  :|  '--' |' ,-.  ||  .--''-.  .-'' ,-.  ||  |
     58      .-'    ||  '--'  /|  | --' \ '-'  ||  |     |  |  \ '-'  |`--'
     59      `-----' `-------' `--'      `--`--'`--'     `--'   `--`--'.--.
     60                                                                '__'
     61 */
     62 
     63 #ifndef _SDP_H_
     64 #define _SDP_H_
     65 
     66 #include <ostream>
     67 #include <sstream>
     68 
     69 #include "sdp/SdpAttributeList.h"
     70 #include "sdp/SdpEnum.h"
     71 #include "sdp/SdpMediaSection.h"
     72 
     73 namespace mozilla {
     74 
     75 class SdpOrigin;
     76 class SdpEncryptionKey;
     77 class SdpMediaSection;
     78 
     79 /**
     80 * Base class for an SDP
     81 */
     82 class Sdp {
     83 public:
     84  Sdp() = default;
     85  virtual ~Sdp() = default;
     86 
     87  virtual Sdp* Clone() const = 0;
     88 
     89  virtual const SdpOrigin& GetOrigin() const = 0;
     90  // Note: connection information is always retrieved from media sections
     91  virtual uint32_t GetBandwidth(const std::string& type) const = 0;
     92 
     93  virtual const SdpAttributeList& GetAttributeList() const = 0;
     94  virtual SdpAttributeList& GetAttributeList() = 0;
     95 
     96  virtual size_t GetMediaSectionCount() const = 0;
     97  virtual const SdpMediaSection& GetMediaSection(size_t level) const = 0;
     98  virtual SdpMediaSection& GetMediaSection(size_t level) = 0;
     99 
    100  virtual SdpMediaSection& AddMediaSection(SdpMediaSection::MediaType media,
    101                                           SdpDirectionAttribute::Direction dir,
    102                                           uint16_t port,
    103                                           SdpMediaSection::Protocol proto,
    104                                           sdp::AddrType addrType,
    105                                           const std::string& addr) = 0;
    106 
    107  virtual void Serialize(std::ostream&) const = 0;
    108 
    109  std::string ToString() const;
    110 };
    111 
    112 inline std::ostream& operator<<(std::ostream& os, const Sdp& sdp) {
    113  sdp.Serialize(os);
    114  return os;
    115 }
    116 
    117 inline std::string Sdp::ToString() const {
    118  std::stringstream s;
    119  s << *this;
    120  return s.str();
    121 }
    122 
    123 class SdpOrigin {
    124 public:
    125  SdpOrigin(const std::string& username, uint64_t sessId, uint64_t sessVer,
    126            sdp::AddrType addrType, const std::string& addr)
    127      : mUsername(username),
    128        mSessionId(sessId),
    129        mSessionVersion(sessVer),
    130        mAddrType(addrType),
    131        mAddress(addr) {}
    132 
    133  const std::string& GetUsername() const { return mUsername; }
    134 
    135  uint64_t GetSessionId() const { return mSessionId; }
    136 
    137  uint64_t GetSessionVersion() const { return mSessionVersion; }
    138 
    139  sdp::AddrType GetAddrType() const { return mAddrType; }
    140 
    141  const std::string& GetAddress() const { return mAddress; }
    142 
    143  void Serialize(std::ostream& os) const {
    144    sdp::NetType netType = sdp::kInternet;
    145    os << "o=" << mUsername << " " << mSessionId << " " << mSessionVersion
    146       << " " << netType << " " << mAddrType << " " << mAddress << "\r\n";
    147  }
    148 
    149 private:
    150  std::string mUsername;
    151  uint64_t mSessionId;
    152  uint64_t mSessionVersion;
    153  sdp::AddrType mAddrType;
    154  std::string mAddress;
    155 };
    156 
    157 inline std::ostream& operator<<(std::ostream& os, const SdpOrigin& origin) {
    158  origin.Serialize(os);
    159  return os;
    160 }
    161 
    162 }  // namespace mozilla
    163 
    164 #endif