tor-browser

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

RTCDTMFSender.h (2263B)


      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 _RTCDTMFSender_h_
      6 #define _RTCDTMFSender_h_
      7 
      8 #include "MediaEventSource.h"
      9 #include "js/RootingAPI.h"
     10 #include "mozilla/DOMEventTargetHelper.h"
     11 #include "mozilla/RefPtr.h"
     12 #include "nsITimer.h"
     13 
     14 class nsPIDOMWindowInner;
     15 class nsITimer;
     16 
     17 namespace mozilla {
     18 class AudioSessionConduit;
     19 
     20 struct DtmfEvent {
     21  DtmfEvent(int aPayloadType, int aPayloadFrequency, int aEventCode,
     22            int aLengthMs)
     23      : mPayloadType(aPayloadType),
     24        mPayloadFrequency(aPayloadFrequency),
     25        mEventCode(aEventCode),
     26        mLengthMs(aLengthMs) {}
     27  const int mPayloadType;
     28  const int mPayloadFrequency;
     29  const int mEventCode;
     30  const int mLengthMs;
     31 };
     32 
     33 namespace dom {
     34 class RTCRtpTransceiver;
     35 
     36 class RTCDTMFSender : public DOMEventTargetHelper,
     37                      public nsITimerCallback,
     38                      public nsINamed {
     39 public:
     40  RTCDTMFSender(nsPIDOMWindowInner* aWindow, RTCRtpTransceiver* aTransceiver);
     41 
     42  // nsISupports
     43  NS_DECL_NSITIMERCALLBACK
     44  NS_DECL_NSINAMED
     45  NS_DECL_ISUPPORTS_INHERITED
     46  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(RTCDTMFSender, DOMEventTargetHelper)
     47 
     48  // webidl
     49  JSObject* WrapObject(JSContext* aCx,
     50                       JS::Handle<JSObject*> aGivenProto) override;
     51  void SetPayloadType(int32_t aPayloadType, int32_t aPayloadFrequency);
     52  bool CanInsertDTMF() const;
     53  void InsertDTMF(const nsAString& aTones, uint32_t aDuration,
     54                  uint32_t aInterToneGap, ErrorResult& aRv);
     55  void GetToneBuffer(nsAString& aOutToneBuffer);
     56  IMPL_EVENT_HANDLER(tonechange)
     57 
     58  void StopPlayout();
     59 
     60  MediaEventSource<DtmfEvent>& OnDtmfEvent() { return mDtmfEvent; }
     61 
     62 private:
     63  virtual ~RTCDTMFSender() = default;
     64 
     65  void StartPlayout(uint32_t aDelay);
     66 
     67  RefPtr<RTCRtpTransceiver> mTransceiver;
     68  MediaEventProducer<DtmfEvent> mDtmfEvent;
     69  Maybe<int32_t> mPayloadType;
     70  Maybe<int32_t> mPayloadFrequency;
     71  nsString mToneBuffer;
     72  uint32_t mDuration = 0;
     73  uint32_t mInterToneGap = 0;
     74  nsCOMPtr<nsITimer> mSendTimer;
     75 };
     76 
     77 }  // namespace dom
     78 }  // namespace mozilla
     79 #endif  // _RTCDTMFSender_h_