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