1/*
2 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11// This sub-API supports the following functionalities:
12//
13//  - External protocol support.
14//  - Packet timeout notification.
15//  - Dead-or-Alive connection observations.
16//
17// Usage example, omitting error checking:
18//
19//  using namespace webrtc;
20//  VoiceEngine* voe = VoiceEngine::Create();
21//  VoEBase* base = VoEBase::GetInterface(voe);
22//  VoENetwork* netw  = VoENetwork::GetInterface(voe);
23//  base->Init();
24//  int ch = base->CreateChannel();
25//  ...
26//  netw->SetPeriodicDeadOrAliveStatus(ch, true);
27//  ...
28//  base->DeleteChannel(ch);
29//  base->Terminate();
30//  base->Release();
31//  netw->Release();
32//  VoiceEngine::Delete(voe);
33//
34#ifndef WEBRTC_VOICE_ENGINE_VOE_NETWORK_H
35#define WEBRTC_VOICE_ENGINE_VOE_NETWORK_H
36
37#include "webrtc/common_types.h"
38
39namespace webrtc {
40
41class VoiceEngine;
42
43// VoEConnectionObserver
44class WEBRTC_DLLEXPORT VoEConnectionObserver
45{
46public:
47    // This method will be called peridically and deliver dead-or-alive
48    // notifications for a specified |channel| when the observer interface
49    // has been installed and activated.
50    virtual void OnPeriodicDeadOrAlive(int channel, bool alive) = 0;
51
52protected:
53    virtual ~VoEConnectionObserver() {}
54};
55
56// VoENetwork
57class WEBRTC_DLLEXPORT VoENetwork
58{
59public:
60    // Factory for the VoENetwork sub-API. Increases an internal
61    // reference counter if successful. Returns NULL if the API is not
62    // supported or if construction fails.
63    static VoENetwork* GetInterface(VoiceEngine* voiceEngine);
64
65    // Releases the VoENetwork sub-API and decreases an internal
66    // reference counter. Returns the new reference count. This value should
67    // be zero for all sub-API:s before the VoiceEngine object can be safely
68    // deleted.
69    virtual int Release() = 0;
70
71    // Installs and enables a user-defined external transport protocol for a
72    // specified |channel|.
73    virtual int RegisterExternalTransport(
74        int channel, Transport& transport) = 0;
75
76    // Removes and disables a user-defined external transport protocol for a
77    // specified |channel|.
78    virtual int DeRegisterExternalTransport(int channel) = 0;
79
80    // The packets received from the network should be passed to this
81    // function when external transport is enabled. Note that the data
82    // including the RTP-header must also be given to the VoiceEngine.
83    virtual int ReceivedRTPPacket(int channel,
84                                  const void* data,
85                                  unsigned int length) = 0;
86    virtual int ReceivedRTPPacket(int channel,
87                                  const void* data,
88                                  unsigned int length,
89                                  const PacketTime& packet_time) {
90      return 0;
91    }
92
93    // The packets received from the network should be passed to this
94    // function when external transport is enabled. Note that the data
95    // including the RTCP-header must also be given to the VoiceEngine.
96    virtual int ReceivedRTCPPacket(
97        int channel, const void* data, unsigned int length) = 0;
98
99protected:
100    VoENetwork() {}
101    virtual ~VoENetwork() {}
102};
103
104}  // namespace webrtc
105
106#endif  //  WEBRTC_VOICE_ENGINE_VOE_NETWORK_H
107