diff -r 000000000000 -r 29b1cd4cb562 bluetooth/gavdp/source/gavdpIf.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/gavdp/source/gavdpIf.cpp Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,340 @@ +// Copyright (c) 2004-2009 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: +// + +/** + @file + @publishedPartner + @released +*/ + +#include +#include "gavdpInternal.h" + +/** +Default Constructor +*/ +EXPORT_C RGavdp::RGavdp() +: iGavdpImp(NULL) + { + } + +/** +Open a GAVDP session. +@note not to be confused with the "Open" primitive in the GAVDP spec. This is +merely opening the handle in the Symbian OS sense. +@param aServiceUser a reference to a MGavdpUser mixin for GAVDP callback +events. +@param aSocketServer reference to the client's Socket Server session. +@return system-wide error +@see RegisterSEP +*/ +EXPORT_C TInt RGavdp::Open(MGavdpUser& aServiceUser, RSocketServ& aSocketServer) + { + __ASSERT_ALWAYS(iGavdpImp==NULL,Panic(EGavdpAlreadyOpen)); + + TRAPD(res, iGavdpImp = CGavdp::NewL(aServiceUser, aSocketServer, *this)); + return res; + } + +/** +Closes the GAVDP session and frees all resources associated with it. +This function should not be called from within a client's implementation of +any MGavdpUser (upcall) method. +@note not to be confused with the "Close" primitive in the GAVDP spec. This is +merely closing the handle in the Symbian OS sense. +@note However, if this is Closed when streams are active, the Bluetooth +subsystem shall Release all Streams managed by this RGavdp instance. +@note that the closure of any bearer sockets created remains the +responsibility of the client. +*/ +EXPORT_C void RGavdp::Close() + { + delete iGavdpImp; + iGavdpImp = NULL; + } + +/** +Cancel the outstanding client request. +As per usual Symbian OS Cancel semantics, this method does not guarantee that +the outstanding request was "undone". +Therefore to reset each sides' state the client should consider sending an +Abort too. +@see RGavdp::AbortStream +*/ +EXPORT_C void RGavdp::Cancel() + { + if(iGavdpImp!=NULL) + { + iGavdpImp->Cancel(); + } + } + +/** +Connects a GAVDP session - i.e. creates an AVDTP signalling channel to a +remote device. +The signalling channel may already exist, in which case this session is added +as a user of that channel. +The necessary multiplexing is implemented in AVDTP, so the client need not be +concerned with this. +@param aRemoteAddr the Bluetooth device address of the remote GAVDP entity. +*/ +EXPORT_C void RGavdp::Connect(const TBTDevAddr& aRemoteAddr) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + iGavdpImp->Connect(aRemoteAddr); + } + +/** +Discover the Stream endpoints (SEPs) on the remote device. +Callbacks on MGavdpUser will be called as a result of this call. +@pre a Signalling channel must have been successfully created +@see MGavdpUser::GAVDP_SEPDiscovered +*/ +EXPORT_C void RGavdp::DiscoverRemoteSEPs() + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + iGavdpImp->DiscoverRemoteSEPs(); + } + +/** +Get the capabilities of a remote Stream Endpoint (SEP). +Callbacks on MGavdpUser will be called for the intersection of capabilities +that the remote supports and that the local GAVDP user is interested in using. +@param aSEID the ID of the remote SEP for which capabilities are to be +retrieved. +@param aInterestingCategories the categories the local GAVDP client is +interested in. +*/ +EXPORT_C void RGavdp::GetRemoteSEPCapabilities(TSEID aSEID, const TAvdtpServiceCategories& aInterestingCategories) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + iGavdpImp->GetRemoteSEPCapabilities(aSEID, aInterestingCategories); + } + +/** +Begin configuring (or reconfiguring) a remote SEP. +Subsequent calls are used to add each configuration required. +@see RGavdp::AddSEPCapability +@param aRemoteSEID the ID of the remote SEP. +@param aLocalSEID the ID of the local SEP. +@return system-wide error. +*/ +EXPORT_C TInt RGavdp::BeginConfiguringRemoteSEP(TSEID aRemoteSEID, TSEID aLocalSEID) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + return iGavdpImp->BeginConfiguringRemoteSEP(aRemoteSEID, aLocalSEID); + } + +/** +Begin configuring (or reconfiguring) a local SEP. +Subsequent calls are used to add each configuration required. +@see RGavdp::AddSEPCapability +@param aSEID the ID of the local SEP. +@return system-wide error. +*/ +EXPORT_C TInt RGavdp::BeginConfiguringLocalSEP(TSEID aSEID) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + return iGavdpImp->BeginConfiguringLocalSEP(aSEID); + } + +/** +Add a particular capability into a SEP. +When called on a local SEP this equates to adding capabilities into the SEP. +When called on a remote SEP this equates to configuring the SEP. +@param aCapability a capability +@see TAvdtpServiceCapability +@return system-wide error. +*/ +EXPORT_C TInt RGavdp::AddSEPCapability(const TAvdtpServiceCapability& aCapability) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + return iGavdpImp->AddSEPCapability(aCapability); + } + +/** +Finalises the (re)configuration of the SEP +*/ +EXPORT_C void RGavdp::CommitSEPConfiguration() + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + iGavdpImp->CommitSEPConfiguration(); + } + +/** +Start stream +@param aSEID the SEID of the local or remote SEP that requires starting +*/ +EXPORT_C void RGavdp::StartStream(TSEID aSEID) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + iGavdpImp->StartStream(aSEID); + } + +/** +Suspend stream +@note that the remote may not support Suspend, and an +AVDTP NOT_SUPPORTED_COMMAND error may result. +In this case the client should consider Closing the stream. +@param aSEID the SEID of the local or remote SEP that requires suspending. +*/ +EXPORT_C void RGavdp::SuspendStream(TSEID aSEID) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + iGavdpImp->SuspendStream(aSEID); + } + +/** +Abort stream +@note that once complete the state of the SEP will be Idle. Thus to restream, +the SEP has to be reconfigured, opened and started. +@param aSEID the SEID of the local or remote SEP that requires aborting. +*/ +EXPORT_C void RGavdp::AbortStream(TSEID aSEID) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + iGavdpImp->AbortStream(aSEID); + } + +/** +Send security control data to remote SEP. +The meaning of this is dependent on the configured Content Protection method. +@see TAvdtpContentProtectionCapabilities +@param aSEID the seid of the remote SEP +@param aSecurityData the security data +*/ +EXPORT_C void RGavdp::SendSecurityControl(TSEID aSEID, const TDesC8& aSecurityData) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + iGavdpImp->SendSecurityControl(aSEID, aSecurityData); + } + +/** +Register an extra local SEP. +@param aInfo reference containing SEP information. Note the SEID assigned by +AVDTP will be written back into aInfo. +@return system-wide error +*/ +EXPORT_C TInt RGavdp::RegisterSEP(TAvdtpSEPInfo& aInfo) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + return iGavdpImp->RegisterSEP(aInfo); + } + +/** +Listen for inbound signalling channel connections. +This is useful when the signalling channel is lost. +Note: This function will not connect the session to any existing connected +signalling channels. +The session will only be connected upon the next channel being connected. +Users should use Connect instead if they intend to connect to existing +signalling channels. +@pre At least SEP shall have been registered +@see RGavdp::RegisterSEP(TAvdtpSEPInfo& aInfo) +@panic The client thread will be panicked if Listen is called prior to any +SEPs being registered. +@return system-wide error code +*/ +EXPORT_C TInt RGavdp::Listen() + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + return iGavdpImp->Listen(); + } + +/** +Creates bearers (in the form of sockets) for sessions on the stream. +The sessions are media + optional reporting + optional recovery. +The sockets will be created on the client's Socket Server session. +The sockets may then be passed into RTP for its use. +If the sockets are passed to RTP the client still has the responsibility of +closing them. + - i.e. neither RTP nor GAVDP will close the sockets. +The reporting/recovery config is already known by the stream. All the required +bearers will be created. + +@param aSEID The SEID of the remote SEP for which the sockets are required. +@param aIgnored1 Source compatibility place holder +@param aIgnored2 Source compatibility place holder +@return system-wide error code + +@see RGavdp::CreateBearerSockets(TSEID aSEID) +@deprecated +*/ +EXPORT_C TInt RGavdp::CreateBearerSockets(TSEID aSEID, TBool /*aIgnored1*/, TBool /*aIgnored2*/) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + return iGavdpImp->CreateBearerSockets(aSEID); + } + +/** +Creates bearers (in the form of sockets) for sessions on the stream. +The sessions are media + optional reporting + optional recovery. +The sockets will be created on the client's Socket Server session. +The sockets may then be passed into RTP for its use. +If the sockets are passed to RTP the client still has the responsibility of +closing them. + - i.e. neither RTP nor GAVDP will close the sockets. +The reporting/recovery config is already known by the stream. All the required +bearers will be created. + +@param aSEID The SEID of the remote SEP for which the sockets are required. +@return system-wide error code +*/ +EXPORT_C TInt RGavdp::CreateBearerSockets(TSEID aSEID) + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + return iGavdpImp->CreateBearerSockets(aSEID); + } + +/** +This function returns the deprecated value KMaxAvdtpSecurityControlInfo so as +to ensure that the return value is what partners will expect during the +transition period from the use of the old constant to this new API. +When the constant is removed from BluetoothAV.h it should be moved to an +internal header. +@return KMaxAvdtpSecurityControlInfo +*/ +EXPORT_C TInt RGavdp::MaxSecurityControlLength() + { + return KMaxAvdtpSecurityControlInfo; + } + +/** +Disconnects the RGavdp session from the signalling channel, but does not destroy the local SEPs owned +by the signalling channel. Must only be called if the remote SEP has not yet been configured - +if the remote SEP has been configured then AbortStream() should be called. + +@return system-wide error code +@panic If remote SEP configured +*/ + +EXPORT_C TInt RGavdp::Shutdown() + { + __ASSERT_ALWAYS(iGavdpImp!=NULL,Panic(EGavdpNotOpen)); + TInt ret = iGavdpImp->Shutdown(); + if (ret==KErrNotReady) + { + Panic(EGavdpShutdownNotPermittedAfterRemoteSEPConfigured); + } + return ret; + } + +void RGavdp::UnbindBody() + { + iGavdpImp = NULL; + } + + +// EOF