LCOV - code coverage report
Current view: top level - media/webrtc/signaling/src/jsep - JsepSessionImpl.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 29 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 28 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* This Source Code Form is subject to the terms of the Mozilla Public
       2             :  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
       3             :  * You can obtain one at http://mozilla.org/MPL/2.0/. */
       4             : 
       5             : #ifndef _JSEPSESSIONIMPL_H_
       6             : #define _JSEPSESSIONIMPL_H_
       7             : 
       8             : #include <set>
       9             : #include <string>
      10             : #include <vector>
      11             : 
      12             : #include "signaling/src/jsep/JsepCodecDescription.h"
      13             : #include "signaling/src/jsep/JsepTrack.h"
      14             : #include "signaling/src/jsep/JsepSession.h"
      15             : #include "signaling/src/jsep/JsepTrack.h"
      16             : #include "signaling/src/sdp/SipccSdpParser.h"
      17             : #include "signaling/src/sdp/SdpHelper.h"
      18             : #include "signaling/src/common/PtrVector.h"
      19             : 
      20             : namespace mozilla {
      21             : 
      22           0 : class JsepUuidGenerator
      23             : {
      24             : public:
      25           0 :   virtual ~JsepUuidGenerator() {}
      26             :   virtual bool Generate(std::string* id) = 0;
      27             : };
      28             : 
      29           0 : class JsepSessionImpl : public JsepSession
      30             : {
      31             : public:
      32           0 :   JsepSessionImpl(const std::string& name, UniquePtr<JsepUuidGenerator> uuidgen)
      33           0 :       : JsepSession(name),
      34             :         mIsOfferer(false),
      35             :         mWasOffererLastTime(false),
      36             :         mIceControlling(false),
      37             :         mRemoteIsIceLite(false),
      38             :         mRemoteIceIsRestarting(false),
      39             :         mBundlePolicy(kBundleBalanced),
      40             :         mSessionId(0),
      41             :         mSessionVersion(0),
      42           0 :         mUuidGen(Move(uuidgen)),
      43           0 :         mSdpHelper(&mLastError)
      44             :   {
      45           0 :   }
      46             : 
      47             :   // Implement JsepSession methods.
      48             :   virtual nsresult Init() override;
      49             : 
      50             :   virtual nsresult AddTrack(const RefPtr<JsepTrack>& track) override;
      51             : 
      52             :   virtual nsresult RemoveTrack(const std::string& streamId,
      53             :                                const std::string& trackId) override;
      54             : 
      55             :   virtual nsresult SetIceCredentials(const std::string& ufrag,
      56             :                                      const std::string& pwd) override;
      57           0 :   virtual const std::string& GetUfrag() const override { return mIceUfrag; }
      58           0 :   virtual const std::string& GetPwd() const override { return mIcePwd; }
      59             :   nsresult SetBundlePolicy(JsepBundlePolicy policy) override;
      60             : 
      61             :   virtual bool
      62           0 :   RemoteIsIceLite() const override
      63             :   {
      64           0 :     return mRemoteIsIceLite;
      65             :   }
      66             : 
      67             :   virtual bool
      68           0 :   RemoteIceIsRestarting() const override
      69             :   {
      70           0 :     return mRemoteIceIsRestarting;
      71             :   }
      72             : 
      73             :   virtual std::vector<std::string>
      74           0 :   GetIceOptions() const override
      75             :   {
      76           0 :     return mIceOptions;
      77             :   }
      78             : 
      79             :   virtual nsresult AddDtlsFingerprint(const std::string& algorithm,
      80             :                                       const std::vector<uint8_t>& value) override;
      81             : 
      82             :   nsresult AddRtpExtension(std::vector<SdpExtmapAttributeList::Extmap>& extensions,
      83             :                            const std::string& extensionName,
      84             :                            SdpDirectionAttribute::Direction direction);
      85             :   virtual nsresult AddAudioRtpExtension(
      86             :       const std::string& extensionName,
      87             :       SdpDirectionAttribute::Direction direction =
      88             :       SdpDirectionAttribute::Direction::kSendrecv) override;
      89             : 
      90             :   virtual nsresult AddVideoRtpExtension(
      91             :       const std::string& extensionName,
      92             :       SdpDirectionAttribute::Direction direction =
      93             :       SdpDirectionAttribute::Direction::kSendrecv) override;
      94             : 
      95             :   virtual std::vector<JsepCodecDescription*>&
      96           0 :   Codecs() override
      97             :   {
      98           0 :     return mSupportedCodecs.values;
      99             :   }
     100             : 
     101             :   virtual nsresult ReplaceTrack(const std::string& oldStreamId,
     102             :                                 const std::string& oldTrackId,
     103             :                                 const std::string& newStreamId,
     104             :                                 const std::string& newTrackId) override;
     105             : 
     106             :   virtual nsresult SetParameters(
     107             :       const std::string& streamId,
     108             :       const std::string& trackId,
     109             :       const std::vector<JsepTrack::JsConstraints>& constraints) override;
     110             : 
     111             :   virtual nsresult GetParameters(
     112             :       const std::string& streamId,
     113             :       const std::string& trackId,
     114             :       std::vector<JsepTrack::JsConstraints>* outConstraints) override;
     115             : 
     116             :   virtual std::vector<RefPtr<JsepTrack>> GetLocalTracks() const override;
     117             : 
     118             :   virtual std::vector<RefPtr<JsepTrack>> GetRemoteTracks() const override;
     119             : 
     120             :   virtual std::vector<RefPtr<JsepTrack>>
     121             :     GetRemoteTracksAdded() const override;
     122             : 
     123             :   virtual std::vector<RefPtr<JsepTrack>>
     124             :     GetRemoteTracksRemoved() const override;
     125             : 
     126             :   virtual nsresult CreateOffer(const JsepOfferOptions& options,
     127             :                                std::string* offer) override;
     128             : 
     129             :   virtual nsresult CreateAnswer(const JsepAnswerOptions& options,
     130             :                                 std::string* answer) override;
     131             : 
     132             :   virtual std::string GetLocalDescription(JsepDescriptionPendingOrCurrent type)
     133             :                                           const override;
     134             : 
     135             :   virtual std::string GetRemoteDescription(JsepDescriptionPendingOrCurrent type)
     136             :                                            const override;
     137             : 
     138             :   virtual nsresult SetLocalDescription(JsepSdpType type,
     139             :                                        const std::string& sdp) override;
     140             : 
     141             :   virtual nsresult SetRemoteDescription(JsepSdpType type,
     142             :                                         const std::string& sdp) override;
     143             : 
     144             :   virtual nsresult AddRemoteIceCandidate(const std::string& candidate,
     145             :                                          const std::string& mid,
     146             :                                          uint16_t level) override;
     147             : 
     148             :   virtual nsresult AddLocalIceCandidate(const std::string& candidate,
     149             :                                         uint16_t level,
     150             :                                         std::string* mid,
     151             :                                         bool* skipped) override;
     152             : 
     153             :   virtual nsresult UpdateDefaultCandidate(
     154             :       const std::string& defaultCandidateAddr,
     155             :       uint16_t defaultCandidatePort,
     156             :       const std::string& defaultRtcpCandidateAddr,
     157             :       uint16_t defaultRtcpCandidatePort,
     158             :       uint16_t level) override;
     159             : 
     160             :   virtual nsresult EndOfLocalCandidates(uint16_t level) override;
     161             : 
     162             :   virtual nsresult Close() override;
     163             : 
     164             :   virtual const std::string GetLastError() const override;
     165             : 
     166             :   virtual bool
     167           0 :   IsIceControlling() const override
     168             :   {
     169           0 :     return mIceControlling;
     170             :   }
     171             : 
     172             :   virtual bool
     173           0 :   IsOfferer() const override
     174             :   {
     175           0 :     return mIsOfferer;
     176             :   }
     177             : 
     178             :   // Access transports.
     179             :   virtual std::vector<RefPtr<JsepTransport>>
     180           0 :   GetTransports() const override
     181             :   {
     182           0 :     return mTransports;
     183             :   }
     184             : 
     185             :   virtual std::vector<JsepTrackPair>
     186           0 :   GetNegotiatedTrackPairs() const override
     187             :   {
     188           0 :     return mNegotiatedTrackPairs;
     189             :   }
     190             : 
     191             :   virtual bool AllLocalTracksAreAssigned() const override;
     192             : 
     193             : private:
     194           0 :   struct JsepDtlsFingerprint {
     195             :     std::string mAlgorithm;
     196             :     std::vector<uint8_t> mValue;
     197             :   };
     198             : 
     199           0 :   struct JsepSendingTrack {
     200             :     RefPtr<JsepTrack> mTrack;
     201             :     Maybe<size_t> mAssignedMLine;
     202             :   };
     203             : 
     204           0 :   struct JsepReceivingTrack {
     205             :     RefPtr<JsepTrack> mTrack;
     206             :     Maybe<size_t> mAssignedMLine;
     207             :   };
     208             : 
     209             :   // Non-const so it can set mLastError
     210             :   nsresult CreateGenericSDP(UniquePtr<Sdp>* sdp);
     211             :   void AddExtmap(SdpMediaSection* msection) const;
     212             :   void AddMid(const std::string& mid, SdpMediaSection* msection) const;
     213             :   const std::vector<SdpExtmapAttributeList::Extmap>* GetRtpExtensions(
     214             :       SdpMediaSection::MediaType type) const;
     215             : 
     216             :   void AddCommonExtmaps(const SdpMediaSection& remoteMsection,
     217             :                         SdpMediaSection* msection);
     218             :   nsresult SetupIds();
     219             :   nsresult CreateSsrc(uint32_t* ssrc);
     220             :   void SetupDefaultCodecs();
     221             :   void SetupDefaultRtpExtensions();
     222             :   void SetState(JsepSignalingState state);
     223             :   // Non-const so it can set mLastError
     224             :   nsresult ParseSdp(const std::string& sdp, UniquePtr<Sdp>* parsedp);
     225             :   nsresult SetLocalDescriptionOffer(UniquePtr<Sdp> offer);
     226             :   nsresult SetLocalDescriptionAnswer(JsepSdpType type, UniquePtr<Sdp> answer);
     227             :   nsresult SetRemoteDescriptionOffer(UniquePtr<Sdp> offer);
     228             :   nsresult SetRemoteDescriptionAnswer(JsepSdpType type, UniquePtr<Sdp> answer);
     229             :   nsresult ValidateLocalDescription(const Sdp& description);
     230             :   nsresult ValidateRemoteDescription(const Sdp& description);
     231             :   nsresult ValidateOffer(const Sdp& offer);
     232             :   nsresult ValidateAnswer(const Sdp& offer, const Sdp& answer);
     233             :   nsresult SetRemoteTracksFromDescription(const Sdp* remoteDescription);
     234             :   // Non-const because we use our Uuid generator
     235             :   nsresult CreateReceivingTrack(size_t mline,
     236             :                                 const Sdp& sdp,
     237             :                                 const SdpMediaSection& msection,
     238             :                                 RefPtr<JsepTrack>* track);
     239             :   nsresult HandleNegotiatedSession(const UniquePtr<Sdp>& local,
     240             :                                    const UniquePtr<Sdp>& remote);
     241             :   nsresult AddTransportAttributes(SdpMediaSection* msection,
     242             :                                   SdpSetupAttribute::Role dtlsRole);
     243             :   nsresult CopyPreviousTransportParams(const Sdp& oldAnswer,
     244             :                                        const Sdp& offerersPreviousSdp,
     245             :                                        const Sdp& newOffer,
     246             :                                        Sdp* newLocal);
     247             :   nsresult SetupOfferMSections(const JsepOfferOptions& options, Sdp* sdp);
     248             :   // Non-const so it can assign m-line index to tracks
     249             :   nsresult SetupOfferMSectionsByType(SdpMediaSection::MediaType type,
     250             :                                      const Maybe<size_t>& offerToReceive,
     251             :                                      Sdp* sdp);
     252             :   nsresult BindLocalTracks(SdpMediaSection::MediaType mediatype,
     253             :                            Sdp* sdp);
     254             :   nsresult BindRemoteTracks(SdpMediaSection::MediaType mediatype,
     255             :                             Sdp* sdp,
     256             :                             size_t* offerToReceive);
     257             :   nsresult SetRecvAsNeededOrDisable(SdpMediaSection::MediaType mediatype,
     258             :                                     Sdp* sdp,
     259             :                                     size_t* offerToRecv);
     260             :   void SetupOfferToReceiveMsection(SdpMediaSection* offer);
     261             :   nsresult AddRecvonlyMsections(SdpMediaSection::MediaType mediatype,
     262             :                                 size_t count,
     263             :                                 Sdp* sdp);
     264             :   nsresult AddReofferMsections(const Sdp& oldLocalSdp,
     265             :                                const Sdp& oldAnswer,
     266             :                                Sdp* newSdp);
     267             :   void SetupBundle(Sdp* sdp) const;
     268             :   nsresult GetRemoteIds(const Sdp& sdp,
     269             :                         const SdpMediaSection& msection,
     270             :                         std::string* streamId,
     271             :                         std::string* trackId);
     272             :   nsresult CreateOfferMSection(SdpMediaSection::MediaType type,
     273             :                                SdpMediaSection::Protocol proto,
     274             :                                SdpDirectionAttribute::Direction direction,
     275             :                                Sdp* sdp);
     276             :   nsresult GetFreeMsectionForSend(SdpMediaSection::MediaType type,
     277             :                                   Sdp* sdp,
     278             :                                   SdpMediaSection** msection);
     279             :   nsresult CreateAnswerMSection(const JsepAnswerOptions& options,
     280             :                                 size_t mlineIndex,
     281             :                                 const SdpMediaSection& remoteMsection,
     282             :                                 Sdp* sdp);
     283             :   nsresult SetRecvonlySsrc(SdpMediaSection* msection);
     284             :   nsresult BindMatchingLocalTrackToAnswer(SdpMediaSection* msection);
     285             :   nsresult BindMatchingRemoteTrackToAnswer(SdpMediaSection* msection);
     286             :   nsresult DetermineAnswererSetupRole(const SdpMediaSection& remoteMsection,
     287             :                                       SdpSetupAttribute::Role* rolep);
     288             :   nsresult MakeNegotiatedTrackPair(const SdpMediaSection& remote,
     289             :                                    const SdpMediaSection& local,
     290             :                                    const RefPtr<JsepTransport>& transport,
     291             :                                    bool usingBundle,
     292             :                                    size_t transportLevel,
     293             :                                    JsepTrackPair* trackPairOut);
     294             :   void InitTransport(const SdpMediaSection& msection, JsepTransport* transport);
     295             : 
     296             :   nsresult FinalizeTransport(const SdpAttributeList& remote,
     297             :                              const SdpAttributeList& answer,
     298             :                              const RefPtr<JsepTransport>& transport);
     299             : 
     300             :   nsresult GetNegotiatedBundledMids(SdpHelper::BundledMids* bundledMids);
     301             : 
     302             :   nsresult EnableOfferMsection(SdpMediaSection* msection);
     303             : 
     304             :   mozilla::Sdp* GetParsedLocalDescription(JsepDescriptionPendingOrCurrent type)
     305             :                                           const;
     306             :   mozilla::Sdp* GetParsedRemoteDescription(JsepDescriptionPendingOrCurrent type)
     307             :                                            const;
     308             :   const Sdp* GetAnswer() const;
     309             : 
     310             :   std::vector<JsepSendingTrack> mLocalTracks;
     311             :   std::vector<JsepReceivingTrack> mRemoteTracks;
     312             :   // By the most recent SetRemoteDescription
     313             :   std::vector<JsepReceivingTrack> mRemoteTracksAdded;
     314             :   std::vector<JsepReceivingTrack> mRemoteTracksRemoved;
     315             :   std::vector<RefPtr<JsepTransport> > mTransports;
     316             :   // So we can rollback
     317             :   std::vector<RefPtr<JsepTransport> > mOldTransports;
     318             :   std::vector<JsepTrackPair> mNegotiatedTrackPairs;
     319             : 
     320             :   bool mIsOfferer;
     321             :   bool mWasOffererLastTime;
     322             :   bool mIceControlling;
     323             :   std::string mIceUfrag;
     324             :   std::string mIcePwd;
     325             :   bool mRemoteIsIceLite;
     326             :   bool mRemoteIceIsRestarting;
     327             :   std::vector<std::string> mIceOptions;
     328             :   JsepBundlePolicy mBundlePolicy;
     329             :   std::vector<JsepDtlsFingerprint> mDtlsFingerprints;
     330             :   uint64_t mSessionId;
     331             :   uint64_t mSessionVersion;
     332             :   std::vector<SdpExtmapAttributeList::Extmap> mAudioRtpExtensions;
     333             :   std::vector<SdpExtmapAttributeList::Extmap> mVideoRtpExtensions;
     334             :   UniquePtr<JsepUuidGenerator> mUuidGen;
     335             :   std::string mDefaultRemoteStreamId;
     336             :   std::map<size_t, std::string> mDefaultRemoteTrackIdsByLevel;
     337             :   std::string mCNAME;
     338             :   // Used to prevent duplicate local SSRCs. Not used to prevent local/remote or
     339             :   // remote-only duplication, which will be important for EKT but not now.
     340             :   std::set<uint32_t> mSsrcs;
     341             :   // When an m-section doesn't have a local track, it still needs an ssrc, which
     342             :   // is stored here.
     343             :   std::vector<uint32_t> mRecvonlySsrcs;
     344             :   UniquePtr<Sdp> mGeneratedLocalDescription; // Created but not set.
     345             :   UniquePtr<Sdp> mCurrentLocalDescription;
     346             :   UniquePtr<Sdp> mCurrentRemoteDescription;
     347             :   UniquePtr<Sdp> mPendingLocalDescription;
     348             :   UniquePtr<Sdp> mPendingRemoteDescription;
     349             :   PtrVector<JsepCodecDescription> mSupportedCodecs;
     350             :   std::string mLastError;
     351             :   SipccSdpParser mParser;
     352             :   SdpHelper mSdpHelper;
     353             : };
     354             : 
     355             : } // namespace mozilla
     356             : 
     357             : #endif

Generated by: LCOV version 1.13