dcmofw/dcmoclient/src/dcmoclient.cpp
changeset 0 b497e44ab2fc
child 24 13d7c31c74e0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dcmofw/dcmoclient/src/dcmoclient.cpp	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 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:  DCMO Client implementation
+*
+*/
+
+#include <e32svr.h>
+#include <featmgr.h>
+#include "dcmoclientserver.h"
+#include "dcmoconst.h"
+#include "dcmoclient.h"
+#include "dcmodebug.h"
+
+
+// Standard server startup code
+// 
+static TInt StartServerL()
+	{
+	RDEBUG("DCMOServer: Starting server...");
+	
+	// EPOC and EKA 2 is easy, we just create a new server process. Simultaneous
+	// launching of two such processes should be detected when the second one
+	// attempts to create the server object, failing with KErrAlreadyExists.
+	RProcess server;
+	TInt r=server.Create(KDCMOServerName,KNullDesC);
+
+	if (r!=KErrNone)
+		{
+		RDEBUG_2("DCMOClient: server start failed %d",r);
+		return r;
+		}
+	TRequestStatus stat;
+	server.Rendezvous(stat);
+	if (stat!=KRequestPending)
+		server.Kill(0);		// abort startup
+	else
+		server.Resume();	// logon OK - start the server
+	RDEBUG("DCMOClient: Started");
+	User::WaitForRequest(stat);		// wait for start or death
+	// we can't use the 'exit reason' if the server panicked as this
+	// is the panic 'reason' and may be '0' which cannot be distinguished
+	// from KErrNone
+	r=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
+	server.Close();
+	return r;
+	}
+
+// ---------------------------------------------------------------------------
+// RDCMOClient::NewL() 
+// ---------------------------------------------------------------------------	
+EXPORT_C RDCMOClient* RDCMOClient::NewL()
+	{
+	RDEBUG(" RDCMOClient::NewL--Begin");
+	FeatureManager::InitializeLibL();
+	TBool featureSupport = FeatureManager::FeatureSupported( KFeatureIdFfRuntimeDeviceCapabilityConfiguration );
+	FeatureManager::UnInitializeLib();
+	
+	if ( ! featureSupport )  
+  {
+		// feature is not supported
+		RDEBUG(" RDCMOClient::NewL-- DCMO Feature is Not Supported" );	
+		User::Leave(KErrNotSupported);
+	}
+		
+	RDCMOClient* self = new( ELeave ) RDCMOClient( );
+	CleanupStack::PushL( self );
+	TInt err = self->OpenL();
+  CleanupStack::Pop();
+  RDEBUG_2(" RDCMOClient::NewL--End error as %d",err);  	
+  return self;
+  
+	}
+
+// -----------------------------------------------------------------------------
+// RDCMOClient::~RDCMOClient()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+RDCMOClient::~RDCMOClient()
+{
+    Close();
+}	
+
+// ---------------------------------------------------------------------------
+// RDCMOClient::OpenL()
+// ---------------------------------------------------------------------------
+TInt RDCMOClient::OpenL()
+	{	
+	RDEBUG("RDCMOClient::OpenL()- Begin");
+	TInt res = KErrNone;	
+	res = CreateSession( KDCMOServerName,TVersion(KDCMOServerMajorVersionNumber, KDCMOServerMinorVersionNumber, KDCMOServerBuildVersionNumber), KDCMOServerMessageSlotNumber );
+	if ( res == KErrNotFound || res == KErrServerTerminated )
+		{
+		RDEBUG("RDCMOClient::OpenL()- session not created");
+		res = StartServerL();
+		User::LeaveIfError( res );
+		res = CreateSession( KDCMOServerName,TVersion(KDCMOServerMajorVersionNumber, KDCMOServerMinorVersionNumber, KDCMOServerBuildVersionNumber), KDCMOServerMessageSlotNumber );
+		}
+	User::LeaveIfError( res );
+	RDEBUG_2("RDCMOClient::OpenL()- End with Errorcode as %d",res);	
+	return res;
+	}
+
+// ---------------------------------------------------------------------------
+// RDCMOClient::Close()
+// ---------------------------------------------------------------------------
+void RDCMOClient::Close()
+	{
+	RDEBUG(" RDCMOClient::Close");
+	RSessionBase::Close();  //basecall
+	}
+
+
+// ----------------------------------------------------------------------------
+// RDCMOClient::GetDCMOIntAttributeValue()
+// ----------------------------------------------------------------------------	
+TDCMOStatus RDCMOClient::GetDCMOIntAttributeValue(TDes& aCategory, TDCMONode aId, TInt& aValue)
+	{		
+    RDEBUG(" RDCMOClient::GetDCMOIntAttributeValue--Begin");
+	TPckg<TDCMONode> p(aId);
+	TPckg<TInt> intValue(aValue);
+	TDCMOStatus status(EDcmoSuccess);
+	TPckg<TDCMOStatus> statusValue(status);
+	TInt err = SendReceive( EDcmoGetAttrInt, TIpcArgs(&aCategory, &p, &intValue, &statusValue));
+	if(err != KErrNone)
+	    status = EDcmoFail;  	
+	RDEBUG_2(" RDCMOClient::GetDCMOIntAttributeValue--End error as %d",err);
+	return status;
+	}
+
+// ----------------------------------------------------------------------------
+// RDCMOClient::GetDCMOStrAttributeValue()
+// ----------------------------------------------------------------------------	
+TDCMOStatus RDCMOClient::GetDCMOStrAttributeValue(TDes& aCategory, TDCMONode aId, TDes& aStrValue)
+	{		
+	RDEBUG(" RDCMOClient::GetDCMOStrAttributeValue--Begin");
+	TPckg<TDCMONode> p(aId);
+	TDCMOStatus status(EDcmoSuccess);
+	TPckg<TDCMOStatus> statusValue(status);
+	TInt err = SendReceive( EDcmoGetAttrStr, TIpcArgs(&aCategory, &p, &aStrValue, &statusValue));
+	if(err != KErrNone)
+	    status = EDcmoFail;
+	RDEBUG_2(" RDCMOClient::GetDCMOStrAttributeValue--End error as %d",err);
+	return status;
+	}
+
+// ----------------------------------------------------------------------------
+// RDCMOClient::SetDCMOIntAttributeValue()
+// ----------------------------------------------------------------------------	
+TDCMOStatus RDCMOClient::SetDCMOIntAttributeValue(TDes& aCategory, TDCMONode aId, TInt aValue)
+	{		
+	RDEBUG(" RDCMOClient::SetDCMOIntAttributeValue--Begin");
+	TPckg<TDCMONode> p(aId);
+	TPckg<TInt> intValue(aValue);
+	TDCMOStatus status(EDcmoSuccess);
+	TPckg<TDCMOStatus> statusValue(status);
+	TInt err = SendReceive( EDcmoSetAttrInt, TIpcArgs(&aCategory, &p, &intValue, &statusValue));
+	if(err != KErrNone)
+	    status = EDcmoFail;
+	RDEBUG_2(" RDCMOClient::SetDCMOIntAttributeValue--End error as %d",err);
+	return status;
+	}
+	
+// ----------------------------------------------------------------------------
+// RDCMOClient::SetDCMOStrAttributeValue()
+// ----------------------------------------------------------------------------	
+TDCMOStatus RDCMOClient::SetDCMOStrAttributeValue(TDes& aCategory, TDCMONode aId, TDes& aStrValue)
+	{		
+	RDEBUG(" RDCMOClient::SetDCMOStrAttributeValue--Begin");
+	TPckg<TDCMONode> p(aId);
+	TDCMOStatus status(EDcmoSuccess);
+	TPckg<TDCMOStatus> statusValue(status);
+	TInt err = SendReceive( EDcmoSetAttrStr, TIpcArgs(&aCategory, &p, &aStrValue, &statusValue));
+	if(err != KErrNone)
+	    status = EDcmoFail;
+	RDEBUG_2(" RDCMOClient::SetDCMOStrAttributeValue--End error as %d",err);
+	return status;
+	}	
+
+// ----------------------------------------------------------------------------
+// RDCMOClient::SearchByGroupValue()
+// ----------------------------------------------------------------------------	
+void RDCMOClient::SearchByGroupValue(TDes& aGroup, TDes& aAdapterList)
+	{		
+	RDEBUG(" RDCMOClient::SearchByGroupValue--Begin");
+	TInt err = SendReceive( EDcmoSearchAdapter, TIpcArgs(&aGroup, &aAdapterList));
+	RDEBUG_2(" RDCMOClient::SearchByGroupValue--End error as %d",err);
+	}