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