diff -r dc4cddf5f2f8 -r c2e8c8b73582 realtimenetprots/rtp/documentation/rtp.dox --- a/realtimenetprots/rtp/documentation/rtp.dox Mon Mar 15 12:42:05 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of the License "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// This is the extra documentation for the RTP API -// This is the API for the SymbianOS RTP stack. -// To use this API, start by creating a RRtpSession -// A session encapsulates all RTP traffic to/from a particular port, and -// its associated RTCP traffic. -// RTP traffic from this port is modelled via the RRtpSendStream class. -// RTP traffic from a particular remote host is modelled via RRtpReceiveStream -// RRtpPacket and its subclasses RRtpSendPacket and RRtpReceivePacket are -// the encapsulations of the RTP packets. -// The API uses a R class 'cheshire cat' idiom. All the R classes in -// the API are handles onto resources, or you may prefer to think of -// them as wrappers round pointers. As such they have the following -// properties: -// - They are very lightweight and can be copied around by value. -// - 2 copies of the same handle are 'the same thing'; if you do something -// to one of them it will apply to the other. -// - They need to be 'opened' before they point to anactual resource, -// and must be closed when the resource is no longer needed. Note -// that in some cases, the resource is considered to be owned by -// another resource, so there is no need to close it. In these -// cases, there is no close method and this fact is clearly -// documented. If an R class is closed, any other copies of the -// same handle will become invalid as they are handles to -// nonexistent resources. -// The RTP stack relies heavily on an event model based on callback -// functions. This has the following advantages over alternative methods, -// such as signaling events via TRequestStatus objects or using mixins: -// - It is more flexible for the client; we can distinguish a large number -// of different events and allow the client to chose if they want to -// receive notifications about them in 1 function or many, and how they -// want to spread different notifications over their object structure. -// To give an example, a client might be interested in all SDES messages, -// only in some types of SDES messages or in no SDES messages, and they -// might want to handle these messages in different parts of the code or -// all in the same part. THe callback model can support all these cases. -// - Many other RTP APIs on other platforms use a similar concept, so -// creating a simialr API makes it easier to port code that originated -// on top of these APIs. -// There are 4 major concepts in the event model: -// - An event manager. The session, the send stream and the receive -// streams each have their own event manager. Callbacks registered -// on 1 manager don't apply to other managers. The manager is not -// exposed in the API. -// - An event. (TRtpEvent class). An event is generated when anything -// happens that the client might want to know about. The event can -// be thought of as comprising 2 numbers, the event type taken from -// TRtpEventType and another parameter whose meaning is event-type -// specific. For instance, for all the 'Fail' events it is a -// SymbianOS error code. Additional information might be implicitly -// associated with the event, but needs to be fetched from another -// object, for instance when processing a ErtpPacketReceived event, -// the RRtpReceivePacket object must be obtained from the -// Rrt-ReceiveStream. Events are associated with an object; for -// instance receive stream events are associated with a -// RRtpReceiveStream. There are functions on the event for -// obtaining that object. -// - A callback function. A callback function is a static function -// with a particular signature. Static -// functions are used because callback models using member -// functions in C++ either involve bending the rules of the -// language or a lot of code bloat. If a function is registered for -// a particular event, it will be called when that event -// occurs. One callback function can be associated with more than 1 -// callback registration. Callback functions take a pointer argument -// which was supplied as part of the registration; normally a -// static callback function in a CFoo class would take a pointer to -// a CFoo* and call a member function on the CFoo object that does -// the real work. -// - A callback registration. A callback registration is the thing -// that glues all this together. The event manager contains a -// number of callback registrations, each of which binds a function -// and pointer (normally an object) to a particular kind of -// event. Registrations can be bound to all events on a stream -// (except 'Fail' events), via the ErtpAnyEvent code, or they can -// be further restricted by a parameter whose meaning is event-type -// specific. (For instance for the ErtpSDES event, the parameter is -// used to express interest in only a particular SDES field.) The -// same callback function and object can be registered for several -// different registrations, possibly even on different streams. -// So to use the event model, decide which events you care about, decide -// which objects care about those events, and register functions in all -// those objects to be told about all the events. -// If an event leaves, an Fail event will be generated with the leave -// code. Handlers for error events must not leave, as this would -// result in an infinite loop if allwed. It is reccomended that error -// events are handled by a separate callback to other events, to avoid -// confusion about whether leaves are allowed. (This is why callbacks -// registered for ErtpAnyEvent don't get called back for Fail events) -// One-shot event registrations are registrations that are only called -// back once. For instance, an application might want to display the -// NAME SDES parameter but might only need to be told what it is when -// the first one arrives. A one-shot resistration will only be called -// back for the first NAME received. -// To register events, use one of the RegisterEventCallbackL -// functions. These are template functions that are available in -// global and member-function versions. The reason for this is -// limitations in the handling of template member functions in MSVC6; -// in many situations calls to the member functions won't compile and -// the global functions should be used instead. -// Note that there are always a pair of functions; one doesn't take -// the 'aParameter' parameter, and defaults it to -// KRtpNoParameter. This is more efficient as the parameter is often -// not used. -// The callback function takes a pointer which can be of any type. -// The RegisterEventCallbackL functions are all templated so that the -// pointer you supply must be of the same type as the function -// expects. -// As RTP/RTCP is removable from ROM using the SYMBIAN_EXCLUDE_RTP_RTCP -// in the build rom command a stub is used to prevent linking failures. -// The "#ifdef RTP_Removed" is used to reduce the overhead of having an extra set of cpp files to create the -// stub. Using "#ifdef RTP_Removed" the MMP files create an extra set of stubbed -// dlls from the one cpp file. The iby file then exports the complete or stubbed dlls depending on the -// SYMBIAN_EXCLUDE macro. -// The Open session functions leave with KErrNotSuported when the stub is used. Functions -// which can not leave ASSERT in debug mode as should not have been called since the Open and similar -// functions should have 'left'. -// -// - -/** - @mainpage Symbian RTP API - The RTP stack's event model is described in the section '@ref Events' - @page Events The Event Model - @page Stub of RTP API with #ifdef RTP_Removed -*/