201009
authorhgs
Sat, 24 Apr 2010 00:11:33 +0300
changeset 29 ce4f184690c9
parent 28 ec1b007b6296
child 30 64b3172ba347
201009
localconnectivityservice/lcstylustap/tsrc/LcStylusTapTest/group/Bld.inf
localconnectivityservice/lcstylustap/tsrc/LcStylusTapTest/group/bld.inf
localconnectivityservice/modematplugin/src/atcopscmd.cpp
localconnectivityservice/obexsendservices/obexservicebtsend/src/btsssendlisthandler.cpp
localconnectivityservice/obexserviceman/group/bld.inf
localconnectivityservice/obexserviceman/obexservicemanserver/inc/SrcsServiceManager.h
localconnectivityservice/obexserviceman/obexservicemanserver/inc/SrcsTransport.h
localconnectivityservice/obexserviceman/obexservicemanserver/inc/SrcsTransport.inl
localconnectivityservice/obexserviceman/obexservicemanserver/inc/obexservicemanprop.h
localconnectivityservice/obexserviceman/obexservicemanserver/src/SrcsServiceManager.cpp
localconnectivityservice/obexserviceman/plugins/inc/usb/obexsmusbconnection.h
localconnectivityservice/obexserviceman/plugins/src/usb/obexsmusbconnection.cpp
--- a/localconnectivityservice/lcstylustap/tsrc/LcStylusTapTest/group/Bld.inf	Fri Apr 23 23:56:14 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
-* Copyright (c) 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:  Build information file for LcStylusTapTest
-*
-*/
-
-
-PRJ_PLATFORMS
-// specify the platforms your component needs to be built for here
-// defaults to WINS MARM so you can ignore this if you just build these
-DEFAULT
-
-PRJ_TESTEXPORTS
-// NOTE: If using ARS requirements all export operations should be done under this.
-// 'abld test export'
-
-PRJ_EXPORTS
-// Specify the source file followed by its destination here
-// copy will be used to copy the source file to its destination
-// If there's no destination then the source file will be copied
-// to the same name in /epoc32/include
-// Example: 
-/*
-/agnmodel/inc/AGMCOMON.H
-*/
-
-PRJ_TESTMMPFILES
-LcStylusTapTest.mmp
-
-PRJ_MMPFILES
-LcStylusTapTest_exe.mmp
-//LcStylusTapTest_nrm.mmp
-
-// Specify the .mmp files required for building the important component
-// releasables.
-//
-// Specify "tidy" if the component you need to build doesn't need to be
-// released. Specify "ignore" if the MMP file exists but should be
-// ignored.
-// Example:
-/*
-/agnmodel/group/agnmodel.mmp
-#if defined(MARM)
-/agnmodel/group/agsvexe.mmp
-#endif
-*/
-
-//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/lcstylustap/tsrc/LcStylusTapTest/group/bld.inf	Sat Apr 24 00:11:33 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 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:  Build information file for LcStylusTapTest
+*
+*/
+
+
+PRJ_PLATFORMS
+// specify the platforms your component needs to be built for here
+// defaults to WINS MARM so you can ignore this if you just build these
+DEFAULT
+
+PRJ_TESTEXPORTS
+// NOTE: If using ARS requirements all export operations should be done under this.
+// 'abld test export'
+
+PRJ_EXPORTS
+// Specify the source file followed by its destination here
+// copy will be used to copy the source file to its destination
+// If there's no destination then the source file will be copied
+// to the same name in /epoc32/include
+// Example: 
+/*
+/agnmodel/inc/AGMCOMON.H
+*/
+
+PRJ_TESTMMPFILES
+LcStylusTapTest.mmp
+
+PRJ_MMPFILES
+LcStylusTapTest_exe.mmp
+//LcStylusTapTest_nrm.mmp
+
+// Specify the .mmp files required for building the important component
+// releasables.
+//
+// Specify "tidy" if the component you need to build doesn't need to be
+// released. Specify "ignore" if the MMP file exists but should be
+// ignored.
+// Example:
+/*
+/agnmodel/group/agnmodel.mmp
+#if defined(MARM)
+/agnmodel/group/agsvexe.mmp
+#endif
+*/
+
+//  End of File
--- a/localconnectivityservice/modematplugin/src/atcopscmd.cpp	Fri Apr 23 23:56:14 2010 +0300
+++ b/localconnectivityservice/modematplugin/src/atcopscmd.cpp	Sat Apr 24 00:11:33 2010 +0300
@@ -732,12 +732,21 @@
             break; 
         case ESetSystemNetworkBand: 
         case EManuallyRegisterToNetworkAndChooseAccTech: 
-            // Cannot set the access technology, so set it back to EAccTechNotSet. 
-            // This prevents replying to queries with outdated or incorrect acc tech information. 
-            TRACE_INFO( _L("CATCOPSCmd::RunL() couldn't set system network band, so reset access tech."));
-            iAccTech = EAccTechNotSet; 
-            // Fall through to default, because these require an error response. 
-
+			if(iRegistrationMode == EModeManualAutomatic)
+                {
+                // Manual registration failed, try automatic next. 
+                TRACE_INFO( _L("CATCOPSCmd::RunL() registration mode manual automatic, try automatic."));
+                AutomaticNetworkRegistration(); 
+				break;
+                }
+            else 
+                {
+				// Cannot set the access technology, so set it back to EAccTechNotSet. 
+				// This prevents replying to queries with outdated or incorrect acc tech information. 
+				TRACE_INFO( _L("CATCOPSCmd::RunL() couldn't set system network band, so reset access tech."));
+				iAccTech = EAccTechNotSet; 
+				// Fall through to default, because these require an error response. 
+				}
         default: 
             // In all other cases send back an error response. 
             TRACE_INFO( _L("CATCOPSCmd::RunL() reply an error."));
--- a/localconnectivityservice/obexsendservices/obexservicebtsend/src/btsssendlisthandler.cpp	Fri Apr 23 23:56:14 2010 +0300
+++ b/localconnectivityservice/obexsendservices/obexservicebtsend/src/btsssendlisthandler.cpp	Sat Apr 24 00:11:33 2010 +0300
@@ -20,7 +20,7 @@
 #include <AiwGenericParam.h>
 
 #include "BTSSSendListHandler.h"
-#include "btserviceparameterlist.h"
+#include "BTServiceParameterList.h"
 #include "BTSendingServiceDebug.h"
 
 
--- a/localconnectivityservice/obexserviceman/group/bld.inf	Fri Apr 23 23:56:14 2010 +0300
+++ b/localconnectivityservice/obexserviceman/group/bld.inf	Sat Apr 24 00:11:33 2010 +0300
@@ -33,12 +33,13 @@
 ../conf/obexserviceman.confml			MW_LAYER_CONFML(obexserviceman.confml)
 ../conf/obexserviceman_20016BC5.crml	MW_LAYER_CRML(obexserviceman_20016BC5.crml)
 
+../obexservicemanserver/inc/obexservicemanprop.h			MW_LAYER_PLATFORM_EXPORT_PATH(obexservicemanprop.h)
+
 // Backup registration file
 backup_registration.xml  /epoc32/data/z/private/101f7c87/backup_registration.xml
 backup_registration.xml  /epoc32/release/winscw/udeb/z/private/101f7c87/backup_registration.xml
 backup_registration.xml  /epoc32/release/winscw/urel/z/private/101f7c87/backup_registration.xml
 
-../obexservicemanclient/inc/usbobex.h		    |../../../inc/usbobex.h
 
 ../rom/obex.iby                                 /epoc32/rom/include/obex.iby
 ../rom/obex.iby                                 CORE_MW_LAYER_IBY_EXPORT_PATH(obex.iby)
--- a/localconnectivityservice/obexserviceman/obexservicemanserver/inc/SrcsServiceManager.h	Fri Apr 23 23:56:14 2010 +0300
+++ b/localconnectivityservice/obexserviceman/obexservicemanserver/inc/SrcsServiceManager.h	Sat Apr 24 00:11:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -141,12 +141,17 @@
     void ServiceArray(CArrayPtr<CSrcsTransport> &aTransport, TBool aState);
     
 private:
-
+    
    /**
     * C++ default constructor.
     */
     CSrcsServiceManager();
     
+    /*
+     * Perform service controllers post-initialization
+     */
+    void PostInitialize(CArrayPtr<CSrcsTransport> &aTransport);
+    
     CArrayPtr<CSrcsTransport>*		iBTConnectionArray;		// array of BT Connections
     CArrayPtr<CSrcsTransport>*		iUSBConnectionArray;	// array of USB Connections
     CArrayPtr<CSrcsTransport>*		iIrDAConnectionArray;	// array of IrDA Connections
@@ -155,6 +160,8 @@
     RMessage2                       iMessage;
     TInt                            iErrorState;
     TPtrC8                          iTransportName;     // Service name
+    TSrcsTransport                  iTransportType;     // Service type
+    TBool                           iTransportState;    // Service On/Off
     };
 #endif      // SRCSSERVICEMANAGER_H
 
--- a/localconnectivityservice/obexserviceman/obexservicemanserver/inc/SrcsTransport.h	Fri Apr 23 23:56:14 2010 +0300
+++ b/localconnectivityservice/obexserviceman/obexservicemanserver/inc/SrcsTransport.h	Sat Apr 24 00:11:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -89,7 +89,17 @@
 	*		  false: OBEX service is inactive.
 	*/
 	virtual TBool IsOBEXActive() = 0;
-	
+    
+	/** 
+    * Perform any outstanding initialization tasks.
+    * 
+    * The transport may decide to implement two-phase initialization to improve performance where needed.
+    * For instance, USB Transport has to register all service controller's interfaces and complete the message from obex class controller
+    * as soon as possible to satisfy timing requirements and defer service controller plugin creation to later stage.
+    *
+    * @return none.
+    */
+    virtual void PostInitializeL();
 	
 
 protected:
--- a/localconnectivityservice/obexserviceman/obexservicemanserver/inc/SrcsTransport.inl	Fri Apr 23 23:56:14 2010 +0300
+++ b/localconnectivityservice/obexserviceman/obexservicemanserver/inc/SrcsTransport.inl	Sat Apr 24 00:11:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -69,3 +69,6 @@
     REComSession::ListImplementationsL(KCSrcsTransportUid, resolverParams, aImplInfoArray);
     }
     
+inline void CSrcsTransport::PostInitializeL()
+    {
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/obexserviceman/obexservicemanserver/inc/obexservicemanprop.h	Sat Apr 24 00:11:33 2010 +0300
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010 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:
+ * Obex Service Manager P&S keys definitions
+ *
+ */
+ 
+#ifndef __OBEXSERVICEMANPROP_H__
+#define __OBEXSERVICEMANPROP_H__
+
+#include <e32std.h>
+
+const TUid KUidObexSMCategory = {0x101F7C87};
+const TUint KObexSMPostInitErrorProperty = 1;    // Post Initialization Error Code
+
+#endif
--- a/localconnectivityservice/obexserviceman/obexservicemanserver/src/SrcsServiceManager.cpp	Fri Apr 23 23:56:14 2010 +0300
+++ b/localconnectivityservice/obexserviceman/obexservicemanserver/src/SrcsServiceManager.cpp	Sat Apr 24 00:11:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -20,6 +20,8 @@
 // INCLUDE FILES
 #include "SrcsServiceManager.h"
 #include "debug.h"
+#include <e32property.h>
+#include "obexservicemanprop.h"
 
 
 // CONSTANTS
@@ -27,6 +29,10 @@
 // The granularity of the array used to hold BT, IrDA and USB connnection objects
 static const TInt KConnectionArrayGranularity = 4;
 
+const TUint32 KObexSMSid = {0x101F7C87};
+static _LIT_SECURITY_POLICY_S0(KObexSMOnlyPolicy,KObexSMSid);
+static _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy);
+
 // ================= MEMBER FUNCTIONS =======================
 
 
@@ -46,7 +52,8 @@
 //
 CSrcsServiceManager::~CSrcsServiceManager()
     {       
-    Cancel();    
+    Cancel();
+    RProperty::Delete(KUidObexSMCategory, KObexSMPostInitErrorProperty);
     if ( iBTConnectionArray )
         {
         // Cleanup the array
@@ -95,6 +102,13 @@
     iBTConnectionArray = new(ELeave) CArrayPtrFlat<CSrcsTransport>(KConnectionArrayGranularity);
     iUSBConnectionArray = new(ELeave) CArrayPtrFlat<CSrcsTransport>(KConnectionArrayGranularity);
 	iIrDAConnectionArray = new(ELeave) CArrayPtrFlat<CSrcsTransport>(KConnectionArrayGranularity);
+	
+    TInt err = RProperty::Define(KUidObexSMCategory, KObexSMPostInitErrorProperty, RProperty::EInt, KAllowAllPolicy, KObexSMOnlyPolicy);
+    if ( err != KErrNone && err != KErrAlreadyExists )
+        {
+        User::LeaveIfError(err);
+        }
+    (void)RProperty::Set(KUidObexSMCategory,KObexSMPostInitErrorProperty,KErrNone);
     }
 
 // ---------------------------------------------------------
@@ -132,7 +146,9 @@
     {
     FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: DoManageServices"));
     iObserver=aObserver;
-    iMessage=aMessage;    
+    iMessage=aMessage;
+    iTransportType = aTransport;
+    iTransportState = aState;
     TRAPD(error,RealDoManageServiceL(aTransport,aState));    
     if (error != KErrNone)
         {
@@ -152,6 +168,35 @@
     {
     FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL"));
     iObserver->RequestCompleted(iMessage,iStatus.Int());
+
+    // If the transport is being turned on, launch post-initialization routine 
+    // for appropriate service controllers array
+    if (iTransportState)
+        {
+        switch(iTransportType)
+            {
+        case ESrcsTransportBT:
+            FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL(Bluetooth)"));
+            PostInitialize(*iBTConnectionArray);
+            break;
+        case ESrcsTransportUSB:
+            FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL(USB)"));
+            PostInitialize(*iUSBConnectionArray);
+            break;
+        case ESrcsTransportIrDA:
+            FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL(IrDA)"));
+            PostInitialize(*iIrDAConnectionArray);
+            break;
+        default:
+            FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL. Transport not supported.")));
+            break;
+            }
+        }
+    else
+        {
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL() - transport is turned off"));
+        }
+
     FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RunL exit"));
     }
 // ---------------------------------------------------------
@@ -177,7 +222,7 @@
 void CSrcsServiceManager::RealDoManageServiceL(TSrcsTransport aTransport, TBool aState)
     {    
     FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RealDoManageServiceL"));
-
+ 
     switch(aTransport)
         {
     case ESrcsTransportBT:
@@ -276,17 +321,52 @@
                 }
 
             // Clean up            
-           infoArrayTranport.ResetAndDestroy();                 
-           infoArrayServiceController.ResetAndDestroy();                
-           CleanupStack::PopAndDestroy(2); //infoArrayServiceController
+            infoArrayTranport.ResetAndDestroy();                 
+            infoArrayServiceController.ResetAndDestroy();                
+            CleanupStack::PopAndDestroy(2); //infoArrayServiceController
            
             }
         }
     else // turn off service
         {
         FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: ManageServicesL(Turn OFF)"));    	        
-        aTransport.ResetAndDestroy();                 
+        aTransport.ResetAndDestroy();
+        // This is a special case for USB transport. Clear errors.
+        if (iTransportType == ESrcsTransportUSB)
+            {
+            (void)RProperty::Set(KUidObexSMCategory,KObexSMPostInitErrorProperty,KErrNone);
+            }
         }        
     FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: RealDoManageServiceL exit"));
-    }    
+    }
+
+// ------------------------------------------------------------------------------------------
+// CSrcsServiceManager
+// This function iterates through all detected service controllers for given transport 
+// and calls post-initialization routines.
+// This solution is implemented mainly to satisfy tough timing requirements for USB transport
+// ------------------------------------------------------------------------------------------
+//
+void CSrcsServiceManager::PostInitialize(CArrayPtr<CSrcsTransport> &aTransport)
+    {
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitialize()"));
+    for (TInt i=0; i < aTransport.Count(); ++i)
+        {
+        FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitilize. Processing Service Controller[%d]"), i));
+        TRAPD(err,aTransport[i]->PostInitializeL());
+        
+        // This is a special case for USB transport to notify the USB OBEX class controller about any errors occured
+        // at Post-Initialization stage.
+        // Post-initialization is not implemented for Bluetooth and IrDA transports, so there is no need to notify.
+        if ((err != KErrNone) && (iTransportType == ESrcsTransportUSB))
+            {
+            (void)RProperty::Set(KUidObexSMCategory,KObexSMPostInitErrorProperty,err);
+            FTRACE(FPrint(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitialize. Transport[%d]::PostInitializeL() returned %d, exiting..."), i, err));
+            break;
+            }
+        FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitialize() - DONE post initialization"));
+        }
+    FLOG(_L("[SRCS]\tserver\tCSrcsServiceManager: PostInitialize() exit"));
+    }
+
 // End of file
--- a/localconnectivityservice/obexserviceman/plugins/inc/usb/obexsmusbconnection.h	Fri Apr 23 23:56:14 2010 +0300
+++ b/localconnectivityservice/obexserviceman/plugins/inc/usb/obexsmusbconnection.h	Sat Apr 24 00:11:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -55,8 +55,13 @@
 	*		  EFalse: OBEX service is inactive.
 	*/
 	TBool IsOBEXActive();
-	
-	
+	    
+   /** 
+    * Perform any outstanding initialization tasks
+    *
+    * @return none.
+    */
+   void PostInitializeL();
 
 private:
 
@@ -96,7 +101,8 @@
 private:
     CObexServer* iServer;                               // Obex Server
     CSrcsInterface* iController;                        // Service Controller callback
-    CImplementationInformation* iImplementationInfo;    // Implementation Info        
+    CImplementationInformation* iImplementationInfo;    // Implementation Info    
+    TUid iImplUid;
     };
 
 #endif      // OBEXSMUSBCONNECTION_H
--- a/localconnectivityservice/obexserviceman/plugins/src/usb/obexsmusbconnection.cpp	Fri Apr 23 23:56:14 2010 +0300
+++ b/localconnectivityservice/obexserviceman/plugins/src/usb/obexsmusbconnection.cpp	Sat Apr 24 00:11:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -95,12 +95,11 @@
 //
 void CObexSMUsbConnection::ConstructL()
     {    
-    // Create service controller implementation object
-    iController = CSrcsInterface::NewL(iImplementationInfo->ImplementationUid());
+    // Save service controller implementation UID for deferred initialization
+    iImplUid = iImplementationInfo->ImplementationUid();
+
     FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: CSrcsInterface::NewL\t"));
 
-	iController->SetMediaType( ESrcsMediaUSB );
-
     // parsing opaque_data in iImplementationInfo
     TPtrC8 res_string = iImplementationInfo->OpaqueData();
     
@@ -173,25 +172,14 @@
 	// Try to create OBEX server
 	iServer = CObexServer::NewL(obexUsbProtocolInfo, aObexProtocolPolicy);
     FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: CObexServer::NewL"));
-
-    
-    
-    FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: iServer->Start"));
-
-	FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: SetObexServer\t"));
-	// Try to start server 
-	User::LeaveIfError ( iController->SetObexServer( iServer ));
-	
-
-    // we do not accept Obex passkey for USB transport, so do NOT set callback.
-    // iServer->SetCallBack( *this );
-
     // if there is "local who" field
     if(op_LocalWho.Size())
         {
         User::LeaveIfError ( iServer->SetLocalWho( op_LocalWho ) );
         FLOG(_L("[SRCS] CSrcsUsbConnection: ConstructL: SetLocalWho"));
-        }      
+        }
+    
+    // The rest of initialization procedure is executed in PostInitialzeL()
     }
 
 // ---------------------------------------------------------
@@ -219,4 +207,17 @@
 	return ETrue;	
 	}     
 
+void CObexSMUsbConnection::PostInitializeL()
+    {
+    FTRACE(FPrint(_L("[SRCS] CObexSMUsbConnection: PostInitializeL(%08X)"), iImplUid.iUid));
+
+    iController = CSrcsInterface::NewL(iImplUid);
+    iController->SetMediaType( ESrcsMediaUSB );
+
+    FLOG(_L("[SRCS] CObexSMUsbConnection::PostInitializeL(): SetObexServer\t"));
+    // Try to start server 
+    User::LeaveIfError ( iController->SetObexServer( iServer ));
+    FLOG( _L( "[SRCS] CObexSMUsbConnection: PostInitializeL() exits\t" ) );
+    }
+
 // End of file