diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/csessionhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/csessionhandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,254 @@ +/* +* Copyright (c) 2004-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* +*/ + + +#ifndef CSESSIOHANDLER_H +#define CSESSIOHANDLER_H +NONSHARABLE_CLASS( TSessionHandler ) : public MPVCommandStatusObserver, + public MPVInformationalEventObserver, + public MPVErrorEventObserver + { + public: + + /** + Handle an event that has been generated. + + @param "aResponse" "The response to a previously issued command." + */ + virtual void CommandCompletedL(const CPVCmdResponse& aResponse); + + /** + * Handle an informational event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleInformationalEventL(const CPVAsyncInformationalEvent& aEvent); + + /** + * Handle an error event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleErrorEventL(const CPVAsyncErrorEvent& aEvent); + public: + /** + * Constructor. + */ + TSessionHandler(MVtProtocolHandler* aProtocolHandler); + private: + MVtProtocolHandler* iProtocolHandler; + }; + +NONSHARABLE_CLASS( CSessionCommand ): public CBase, + public MVtSessionCommand + { + public: + /** + * Contructor. + */ + CSessionCommand(TSessionHandler* aSessionHandler, MPV2WaySymbianInterface* aPv2Way); + + /** + * Destructor. + */ + ~CSessionCommand(); + + /** + * This function is valid only in the EIdle state. It is a no-op when + * invoked in any other state. It causes the protocol to transition + * to the ESetup state. The terminal remains in the EInitializing state during + * the transition. + * + * + * @param aInitInfo + * A reference to a TVtInitInfo structure which set Mona on and off + * + * @leave This method can leave with one of the following error codes + * KPVErrInvalidState if invoked in the incorrect state + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt InitProtocolL(TVtInitInfo& aInitInfo); + + /** + * For an incoming track (MVTVideoSink) this function pauses sending + * media to the sink (output device) and stops the sink. It then does the protocol + * negotiations with the remote terminal to pause the logical channel for + * the specified track. + * + * For outgoing, it pauses the sending of media from the source and calls Stop() on the + * source. It also performs any necessary protocol negotiations with the remote terminal. + * EVtCommandPause will be sent to the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt PauseVideoL(MVTVideoSource& aDataSource); + virtual TInt PauseVideoL(MVTVideoSink& aDataSink); + virtual TInt PauseAudioL(MVTAudioSource& aAudioSource); + + /** + * Resume a previously paused incoming or outgoing track. For incoming, + * this function starts resumes playing out the media to the appropriate + * sink based on the current settings. For outgoing it resumes encoding + * and sending media from the source. + * + * EVtCommandResume will be invoked will be invoked on the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResumeVideoL(MVTVideoSource& aDataSource); + virtual TInt ResumeVideoL(MVTVideoSink& aDataSink); + virtual TInt ResumeAudioL(MVTAudioSource& aAudioSource); + + /** + * This function is valid only in the ESetup and EInitializing state. It is a + * no-op when invoked in the EIdle state and returns KPVErrInvalidState + * if invoked in any other state. + * + * It causes the protocol to transition back to the EIdle state. The + * terminal remains in the EResetting state during the transition. + * + * While resetting, the protocol de-allocates all resources resources that + * had been previously allocated. When it completes, ResetComplete is called + * and the protocol reverts to the EIdle state. + * + * @leave This method can leave with one of the following error codes + * KPVErrInvalidState if invoked in the incorrect state + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResetProtocolL(); + + /** + * This function can be invoked only in the ESetup state. The terminal starts connecting with the remote + * terminal based on the specified options and capabilities. + * The EVtCommandConnect command completion event will be passed to the observer + * when connect completes. + * Details about the negotiated session may be obtained by calling the GetSessionParamsL API. + * GetSessionParamsL may be called after call setup is started to get the list of available channels + * and their capabilities. + * Incoming tracks may be opened before ConnectL completes and will be indicated via the + * EVtIndicationIncommingTrack event. + * + * @param aComm + * An optional pointer to a comm server to provide comm source and sink end-points. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ConnectToProtocolL(MCommServer* aComm); + + /** + * Allows an application to provide a media source to be associated with a logical channel + * of communication with the peer. Sources should be added after the EVtIndicationOutgoingTrack + * indication is received for a newly established logical channel. The media type and + * channel id associated with the logical channel are specified as part of the indication. + * This function accepts a MVtVideoSource which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * Data sources could be of the following types: + * a)raw media sources like camera, microphone etc. + * b)sources of compressed data like file, gateway component etc. + * + * @param aChannelId + * Indicates the channel id to be associated with this source. + * @param aDataSource + * reference to the data source + * @leave This method can leave with one of the following error codes + * KErrNotSupported if the format of the sources/sinks is incomtible with what the SDK can handle + * KPVErrInvalidState if invoked in the incorrect state + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @return A unique command id for asynchronous completion + */ + virtual TInt AddVideoSourceL(const TUint aChannelId, MVTVideoSource &aDataSource); + virtual TInt AddAudioSourceL(const TUint aChannelId, MVTAudioSource &aDataSource); + + /** + * Allows an application to provide a media sink for rendering an incoming media bitstream in a + * logical channel of communication with the peer. + * AddDataSinkL can be called only for established incoming logical channels identified by a unique + * channel id. + * Regular incoming channels are established by the peer and are + * indicated using the EVtIndicationIncomingTrack indication. + * This function takes in PV extension to MVtVideoSink or MVtAudioSink which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * EVtCommandAddDataSink event is sent to the observer on completion of this call. + * + * @param aChannelId + * Indicates the channel id to be associated with this sink. + * @param aDataSink The data sink to be added + * + * @return A unique command id for asynchronous completion + **/ + virtual TInt AddVideoSinkL(const TUint aChannelId, MVTVideoSink &aDataSink); + virtual TInt AddAudioSinkL(const TUint aChannelId, MVTAudioSink &aDataSink); + + /** + * This API is to allow the user to cancel all pending requests. The current request being + * processed, if any, will also be aborted. + * EVtCommandCancelAllCommands will be passed to the command observer on completion. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt CancelAllCommandsL( ); + + /** + * The Disconnect call is valid only when invoked in the EConnecting, and + * EConnected states. It causes the terminal to transition to the + * EDisconnecting state. All the media tracks both incoming and outgoing + * will be closed on invoking Disconnect. On completion, the terminal + * goes to the ESetup state. + * + * It is a no-op when called in any other state. + * + * This is an asynchronous request. The EvtCommandDisconnect event will be + * sent to the observer when the request processing is complete. This + * is the only event the Phone application should expect after calling + * Disconnect. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt DisconnectFromProtocolL(); + + /** + * This API is to allow for extensibility of the protocol interface. + * It allows a caller to ask for an instance of a particular interface object to be returned. + * The mechanism is analogous to the COM IUnknown method. The interfaces are identified with + * an interface ID that is a UUID as in DCE and a pointer to the interface object is + * returned if it is supported. Otherwise the returned pointer is NULL. + * @param aType + * @param aProtocolCommand + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt GetProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand*& aProtocolCommand); + + /** + * This APIis to be used to release an interface that was previously obtained using + * QueryInterfaceL. + * @param aType + * @param + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt DeleteProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand* aProtocolCommand); + public: + MPV2WaySymbianInterface *iPv2Way; + private: + CVideoSourceProxy* iVideoSource; + CDisplaySinkProxy* iDisplaySink; + TSessionHandler* iSessionHandler; + }; +#endif +// End of File + \ No newline at end of file