localconnectivityservice/obexserviceman/obexservicemanclient/src/ObexSMClient.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/obexserviceman/obexservicemanclient/src/ObexSMClient.cpp Mon Jan 18 21:03:15 2010 +0200
@@ -0,0 +1,271 @@
+/*
+* 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: obexservicemanager client class implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "obexsmclient.h"
+#include <e32std.h>
+#include "debug.h"
+
+
+// CONSTANTS
+const TInt KServerConnectRetries = 2; // How many times client tries to make connection to server
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------
+// StartThread
+//
+// Create the server thread/process depending on the framework.
+// This function is exported from the DLL and called from the client
+// RObexSMServer::Connect() -method.
+// Returns: TInt: Error Code
+//
+// ---------------------------------------------------------
+
+TInt StartThread()
+ {
+ TRACE_FUNC
+
+ TInt retVal = KErrNone;
+ // create server - if one of this name does not already exist
+ TFindServer findSrcs(KSrcsName);
+ TFullName name;
+
+ if ( findSrcs.Next( name ) != KErrNone ) // we don't exist already
+ {
+ TRequestStatus started;
+ //TSrcsStart start( started );
+ const TUidType serverUid( KNullUid,KNullUid,KSrcsUid );
+
+ // Then we have to create the server
+ // This depends on if we are in WINS or target HW environment.
+
+ TRACE_INFO(_L("[SRCS]\tclient\tSrcs StartThread(): create the server"));
+ // We are on target HW or EKA2 WINS.
+ // New process has to be created for the SRCS
+ RProcess server;
+ retVal=server.Create(KSrcsName, // Full path to SRCS
+ KNullDesC, // Descriptor of parameters
+ serverUid); // Triplet UID of executable
+
+ // Check the return value of process creation
+ if ( retVal != KErrNone )
+ {
+ // Loading failed.
+ TRACE_ERROR((_L("[SRCS]\tclient\tSrcs StartThread(): process creation failed %d"), retVal));
+ return retVal;
+ }
+
+ TRACE_INFO(_L("[SRCS]\tclient\tSrcs StartThread(): Process created successfully"));
+
+
+ // Process/Thread has been created
+ // Now logon to the server
+ TRequestStatus stat;
+ //server.Logon(died);
+ server.Rendezvous(stat);
+
+ if (stat!=KRequestPending)
+ {
+ server.Kill(0); // abort startup
+ //FTRACE(FPrint(_L("c\tclient\tSrcs abort startup.\n")));
+ }
+ else
+ {
+ server.Resume(); // logon OK - start the server
+ //FTRACE(FPrint(_L("c\tclient\tSrcs Resumed.\n")));
+ }
+
+ // Then wait the start or death of the server.
+ User::WaitForRequest(stat);
+
+ // 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
+ TRACE_INFO((_L("[SRCS]\tclient\tSrcs Server started, code %d (0=>success)\n"), stat.Int()));
+ retVal=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
+
+ server.Close();
+ TRACE_INFO(_L("[SRCS]\tclient\tSrcs server handle closed."));
+ }
+
+ return retVal;
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+RObexSMServer::RObexSMServer()
+ {
+ }
+
+
+// ---------------------------------------------------------
+// Connect
+// Handles connection to server( creates session )
+// ---------------------------------------------------------
+//
+TInt RObexSMServer::Connect()
+ {
+ TRACE_FUNC
+
+ // IF there is allready a session handle,
+ // no other session is created.
+ if ( Handle() )
+ {
+ return KErrAlreadyExists;
+ }
+
+ // Else try to create a new session with server
+ TInt retry= KServerConnectRetries;
+
+ FOREVER
+ {
+ // Try to make session with server
+ TInt retVal=CreateSession(KSrcsName,Version());
+ TRACE_INFO((_L("[SRCS]\tclient\tRSrcs: create Session returned: %d"), retVal));
+ if ( retVal != KErrNotFound && retVal != KErrServerTerminated )
+ {
+ // Error which can't be handled happened.
+ return retVal;
+ }
+ // Decrease count
+ --retry;
+ if ( retry == 0 )
+ {
+ return retVal;
+ }
+
+ // Try to start the server
+ TRACE_INFO(_L("[SRCS]\tclient\tRSrcs::Connect(): try to start server"));
+ retVal=StartThread();
+ TRACE_INFO((_L("[SRCS]\tclient\tRSrcs: StartThread returned: %d"), retVal));
+
+ if ( retVal != KErrNone && retVal != KErrAlreadyExists )
+ {
+ // Error can't be handled.
+ return retVal;
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------
+// Version
+// Defines server version number
+// ---------------------------------------------------------
+//
+TVersion RObexSMServer::Version() const
+ {
+ TRACE_FUNC
+ return( TVersion( KSrcsMajorVersionNumber,
+ KSrcsMinorVersionNumber,
+ KSrcsBuildVersionNumber ));
+ }
+
+// ---------------------------------------------------------
+// ManageServices
+// Sends Manage services command to SRCS.
+// ---------------------------------------------------------
+//
+TInt RObexSMServer::ManageServices(TLocodBearer aBearer, TBool aBearStatus,TRequestStatus &aStatus )
+ {
+ TRACE_FUNC
+ TInt retVal = KErrNone;
+
+ TPckgBuf<TInt> pckg;
+ TIpcArgs args( &pckg, NULL, NULL );
+ TSrcsServRequest request;
+
+ switch(aBearer)
+ {
+ case ELocodBearerBT:
+ {
+ if(aBearStatus)
+ {
+ request=ESrcsBTServicesON;
+ }
+ else
+ {
+ request=ESrcsBTServicesOFF;
+ }
+ }
+ break;
+ case ELocodBearerIR:
+ {
+ if(aBearStatus)
+ {
+ request=ESrcsIrDAServicesON;
+ }
+ else
+ {
+ request=ESrcsIrDAServicesOFF;
+ }
+ }
+ break;
+ case ELocodBearerUSB:
+ {
+ if(aBearStatus)
+ {
+ request=ESrcsStartUSB;
+ }
+ else
+ {
+ request=ESrcsStopUSB;
+ }
+ }
+ break;
+ default:
+ {
+ TRACE_ERROR(_L("[SRCS]\tclient\tRSrcs Manageservice: Bad bearer"));
+ return KErrArgument;
+ }
+ }
+ if ( Handle() )
+ {
+ SendReceive( request, args, aStatus );
+ }
+ else
+ {
+ TRACE_ERROR(_L("[SRCS]\tclient\tRSrcs ManageBTServices. No Handle"));
+ retVal = KErrBadHandle;
+ }
+ return retVal;
+ }
+
+// ---------------------------------------------------------
+// CancelRequest
+// ---------------------------------------------------------
+//
+void RObexSMServer::CancelRequest()
+ {
+ TPckgBuf<TInt> pckg;
+ TIpcArgs args( &pckg, NULL, NULL );
+ TSrcsServRequest request;
+ request=ESrcsCancelRequest;
+ if ( Handle() )
+ {
+ SendReceive( request, args );
+ }
+
+ }
+//end of file
+