--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedconnectionhandler/cchclient/src/cchclient.cpp Wed Sep 01 12:29:57 2010 +0100
@@ -0,0 +1,460 @@
+/*
+* Copyright (c) 2006-2007 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: RCCHClient implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "cchclient.h"
+#include "cchlogger.h"
+#include "cchclientserver.h"
+#include "cchclientserverinternal.h"
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES
+// None
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// LOCAL CONSTANTS AND MACROS
+// None
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+// None
+
+// ============================= LOCAL FUNCTIONS =============================
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// RCCHClient::RCCHClient
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RCCHClient::RCCHClient()
+ {
+ // No implementation required
+ iService = NULL;
+ }
+
+EXPORT_C RCCHClient::~RCCHClient()
+ {
+ delete iService;
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::Open
+// Open subsession
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RCCHClient::Open( const RCCHServer& aRCCHServer )
+ {
+ CCHLOGSTRING( "RCCHClient::Open" );
+ return RSubSessionBase::CreateSubSession(
+ aRCCHServer, ECCHOpenSubSession );
+ }
+
+// -----------------------------------------------------------------------------
+// RCCHClient::Close
+// Close subsession
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::Close()
+ {
+ CCHLOGSTRING( "RCCHClient::Close" );
+ RSubSessionBase::CloseSubSession( ECCHCloseSubSession );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::RegisterToServer
+// Send register message to server.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::RegisterToServer( TRequestStatus& aReqStatus ) const
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHServerRegister, args, aReqStatus );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::RegisterToServerCancel
+// Cancel register server request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::RegisterToServerCancel( ) const
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHServerRegisterCancel, args );
+ }
+
+
+// ---------------------------------------------------------------------------
+// RCCHClient::SubscribeToEvents
+// Subscribe to specific service events.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::SubscribeToEvents(
+ const TServiceSelection& aServiceSelection,
+ TPckgBuf<TServiceStatus>& aServiceStatus,
+ TRequestStatus& aReqStatus ) const
+ {
+ const TIpcArgs args(
+ aServiceSelection.iServiceId, aServiceSelection.iType,
+ &aServiceStatus );
+ SendReceive( ECCHSubscribeToEvents, args, aReqStatus );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::SubscribeToEvents
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::SubscribeToEventsCancel() const
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHSubscribeToEventsCancel, args );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::GetServicesL
+// Client queries for all services and sub-services.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::GetServicesL(
+ CArrayFixFlat<TCCHService>& aServices,
+ TRequestStatus& aReqStatus )
+ {
+ TUint32 count( 0 );
+ TPckgBuf<TUint32> countPckg( count );
+ User::LeaveIfError(
+ SendReceive( ECCHServiceCount, TIpcArgs(
+ &countPckg, ECCHUnknown ) ) );
+
+ for ( TInt i( 0 ); i < countPckg(); i++ )
+ {
+ TCCHService service;
+ aServices.AppendL( service );
+ }
+
+ if ( countPckg() )
+ {
+ TUint32 length = countPckg() * sizeof( TCCHService );
+
+ if ( !iService )
+ {
+ iService = new (ELeave) TPtr8( reinterpret_cast<TText8*>(
+ &aServices[ 0 ] ), length, length );
+ }
+ else
+ {
+ iService->Set( reinterpret_cast<TText8*>(
+ &aServices[ 0 ] ), length, length );
+ }
+
+ const TIpcArgs args( KErrNotFound, ECCHUnknown, iService );
+ SendReceive( ECCHGetServices, args, aReqStatus );
+ }
+ else
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHGetServices, args, aReqStatus );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::GetServicesL
+// Get services which contains this type of sub-services
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::GetServicesL(
+ const TServiceSelection& aServiceSelection,
+ CArrayFixFlat<TCCHService>& aServices,
+ TRequestStatus& aReqStatus )
+ {
+ TUint32 count( 0 );
+ TPckgBuf<TUint32> countPckg( count );
+
+ // If some Service has selected Service count must be one,
+ // otherwise we have to ask how many Services is enough
+ if ( aServiceSelection.iServiceId != 0 )
+ {
+ countPckg = 1;
+ }
+ else
+ {
+ User::LeaveIfError(
+ SendReceive( ECCHServiceCount, TIpcArgs( &countPckg,
+ aServiceSelection.iType ) ) );
+ }
+
+ for ( TInt i( 0 ); i < countPckg(); i++ )
+ {
+ TCCHService service;
+ aServices.AppendL( service );
+ }
+
+ if ( countPckg() )
+ {
+ TUint32 length = countPckg() * sizeof( TCCHService );
+
+ if ( !iService )
+ {
+ iService = new (ELeave) TPtr8( reinterpret_cast<TText8*>(
+ &aServices[ 0 ] ), length, length );
+ }
+ else
+ {
+ iService->Set( reinterpret_cast<TText8*>(
+ &aServices[ 0 ] ), length, length );
+ }
+
+ const TIpcArgs args( aServiceSelection.iServiceId,
+ aServiceSelection.iType,
+ iService );
+ SendReceive( ECCHGetServices, args, aReqStatus );
+ }
+ else
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHGetServices, args, aReqStatus );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::GetServicesCancel
+// Cancel get services request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::GetServicesCancel() const
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHGetServicesCancel, args );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::GetServiceState
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RCCHClient::GetServiceState(
+ const TServiceSelection& aServiceSelection,
+ TCCHSubserviceState& aState ) const
+ {
+ TPckgBuf<TCCHSubserviceState> statePckg( aState );
+ const TIpcArgs args(
+ aServiceSelection.iServiceId, aServiceSelection.iType, &statePckg );
+ TInt error = SendReceive( ECCHGetServiceState, args );
+ aState = statePckg();
+ return error;
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::EnableService
+// Enable services. All sub-services under the service are enabled.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::EnableService(
+ const TServiceSelection& aServiceSelection,
+ TRequestStatus& aReqStatus,
+ TBool aConnectivityCheck ) const
+ {
+ const TIpcArgs args(
+ aServiceSelection.iServiceId, aServiceSelection.iType,
+ aConnectivityCheck );
+ SendReceive( ECCHEnableService, args, aReqStatus );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::EnableServiceCancel
+// Cancels enable services request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::EnableServiceCancel() const
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHEnableServiceCancel, args );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::DisableService
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::DisableService(
+ const TServiceSelection& aServiceSelection,
+ TRequestStatus& aReqStatus ) const
+ {
+ const TIpcArgs args(
+ aServiceSelection.iServiceId, aServiceSelection.iType );
+ SendReceive( ECCHDisableService, args, aReqStatus );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::DisableServiceCancel
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::DisableServiceCancel() const
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHDisableServiceCancel, args );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::GetServiceInfo
+// Get service specifics information about service and protocol
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RCCHClient::GetServiceInfo(
+ const TServiceSelection& aServiceSelection,
+ TDes& aBuffer ) const
+ {
+ TPckgBuf<TServiceConnectionInfo> serviceConnInfoPckg;
+ serviceConnInfoPckg().SetServiceId( aServiceSelection.iServiceId );
+ serviceConnInfoPckg().SetType( aServiceSelection.iType );
+ serviceConnInfoPckg().SetParameter( aServiceSelection.iParameter );
+
+ // only service id, type and parameter values are used from
+ // TServiceConnectionInfo
+ const TIpcArgs args( &serviceConnInfoPckg, &aBuffer );
+ return SendReceive( ECCHGetServiceInfo, args );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::SetConnectionInfo
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::SetConnectionInfo(
+ const TPckgBuf<TServiceConnectionInfo>& aServiceConnInfo,
+ TRequestStatus& aReqStatus )
+ {
+ const TIpcArgs args( &aServiceConnInfo );
+ SendReceive( ECCHSetConnectionInfo, args, aReqStatus );
+ }
+
+// -----------------------------------------------------------------------------
+// RCCHClient::SetConnectionInfoCancel
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RCCHClient::SetConnectionInfoCancel() const
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHSetConnectionInfoCancel, args );
+ }
+
+// -----------------------------------------------------------------------------
+// RCCHClient::GetConnectionInfo
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void RCCHClient::GetConnectionInfo(
+ const TServiceSelection& aServiceSelection,
+ TPckgBuf<TServiceConnectionInfo>& aServiceConnInfo,
+ TRequestStatus& aReqStatus ) const
+ {
+ aServiceConnInfo().SetServiceId( aServiceSelection.iServiceId );
+ aServiceConnInfo().SetType( aServiceSelection.iType );
+ aServiceConnInfo().SetParameter( aServiceSelection.iParameter );
+ // only service id, type and parameter values are used from
+ // TServiceConnectionInfo
+ const TIpcArgs args( &aServiceConnInfo );
+ SendReceive( ECCHGetConnectionInfo, args, aReqStatus );
+ }
+
+// -----------------------------------------------------------------------------
+// RCCHClient::GetConnectionInfoCancel
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void RCCHClient::GetConnectionInfoCancel() const
+ {
+ const TIpcArgs args( TIpcArgs::ENothing );
+ SendReceive( ECCHGetConnectionInfoCancel, args );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::ReserveService
+// Reserves the service for exclusive use
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RCCHClient::ReserveService(
+ const TServiceSelection& aServiceSelection )
+ {
+ const TIpcArgs args(
+ aServiceSelection.iServiceId, aServiceSelection.iType );
+ return SendReceive( ECCHReserveService, args );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::FreeService
+// Frees the exclusive service reservation
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RCCHClient::FreeService(
+ const TServiceSelection& aServiceSelection )
+ {
+ const TIpcArgs args(
+ aServiceSelection.iServiceId, aServiceSelection.iType );
+ return SendReceive( ECCHFreeService, args );
+ }
+
+// ---------------------------------------------------------------------------
+// RCCHClient::IsReserved
+// Returns true if the service is reserved for exclusive use
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool RCCHClient::IsReserved(
+ const TServiceSelection& aServiceSelection ) const
+ {
+ TPckgBuf<TBool> reserved;
+ const TIpcArgs args(
+ aServiceSelection.iServiceId, aServiceSelection.iType,&reserved );
+ SendReceive( ECCHIsReserved, args );
+ return reserved();
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// End of File