sdkcreationmw/sdkconnectivityfw/emuconnectserver/CmdLauncher/src/EcmtLauncher.cpp
author Shabe Razvi <shaber@symbian.org>
Thu, 04 Nov 2010 17:22:05 +0000
changeset 4 b3b823debf08
parent 0 b26acd06ea60
permissions -rw-r--r--
Workaround for Bug 3917 - CWinsockInterface::DataSent calls NotifyDataSent which is not implemented.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     1
/*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     2
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     3
* All rights reserved.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     4
* This component and the accompanying materials are made available
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     6
* which accompanies this distribution, and is available
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     8
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     9
* Initial Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    11
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    12
* Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    13
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    14
* Description:  Standalone .exe that launces Ecmt framework without emulator
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    15
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    16
*/
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    17
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    18
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    19
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    20
// INCLUDE FILES
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    21
#include <e32base.h>
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    22
#include <f32file.h>
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    23
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    24
// MODULE DATA STRUCTURES
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    25
typedef TInt (*ExeEntryPoint)();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    26
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    27
// CONSTANTS
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    28
const TInt KDefaultMinHeapSize=0x10000; // !! for now
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    29
const TInt KDefaultMaxHeapSize=0x1000000; // !! for now
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    30
_LIT( KEcmtCoreFileName, "Z:\\Sys\\bin\\ECMTCORE.EXE" );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    31
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    32
// ============================= LOCAL FUNCTIONS ===============================
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    33
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    34
// -----------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    35
// ExeThreadStartFunction .
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    36
// Generic thread entry point that calls the first export of the library
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    37
// given as parameter.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    38
// -----------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    39
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    40
TInt ExeThreadStartFunction(TAny* aParam)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    41
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    42
	const TDesC& libraryName=(*(const TDesC*)aParam);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    43
	RLibrary lib;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    44
	TInt err=lib.Load(libraryName);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    45
	User::Free(aParam);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    46
	if (!err)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    47
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    48
		ExeEntryPoint exeFunc=(ExeEntryPoint)lib.Lookup(1);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    49
		if (!exeFunc)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    50
			err=KErrBadLibraryEntryPoint;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    51
		else
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    52
			err=(*exeFunc)();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    53
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    54
	return(err);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    55
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    56
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    57
// -----------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    58
// LaunchEcmtCoreL
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    59
// 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    60
// -----------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    61
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    62
void LaunchEcmtCoreL()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    63
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    64
	RFs fs;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    65
	fs.Connect();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    66
	TFindFile findExe( fs );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    67
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    68
	TInt err = findExe.FindByPath( KEcmtCoreFileName, NULL );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    69
	User::LeaveIfError( err );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    70
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    71
	TParse fileName;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    72
	TThreadId threadId;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    73
	User::LeaveIfError(fileName.Set(KEcmtCoreFileName, NULL, NULL));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    74
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    75
/* RThread process;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    76
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    77
	TBuf<KMaxFileName> threadName;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    78
	TPtrC baseName=fileName.Name();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    79
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    80
	TInt num=0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    81
	_LIT(KThreadFormat,"%S%02d");
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    82
	do
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    83
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    84
		threadName.Format(KThreadFormat,&baseName,num++);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    85
		err=process.Create(threadName,ExeThreadStartFunction,KDefaultStackSize,KDefaultMinHeapSize,KDefaultMaxHeapSize,NULL);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    86
		} while(err==KErrAlreadyExists);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    87
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    88
	User::LeaveIfError(err);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    89
	RHeap* heap=process.Heap();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    90
	RHeap* originalHeap=User::SwitchHeap(heap);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    91
	HBufC* commandLine=fileName.FullName().Alloc();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    92
	User::SwitchHeap(originalHeap);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    93
	if (!commandLine)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    94
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    95
		process.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    96
		User::LeaveNoMemory();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    97
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    98
	process.SetInitialParameter(commandLine);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    99
	threadId = process.Id();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   100
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   101
	process.Resume();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   102
	process.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   103
*/	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   104
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   105
	RProcess process;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   106
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   107
	TBuf<KMaxFileName> processName;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   108
	TPtrC baseName=fileName.Name();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   109
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   110
	HBufC* commandLine=fileName.FullName().Alloc();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   111
	if (!commandLine)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   112
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   113
		User::LeaveNoMemory();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   114
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   115
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   116
	TInt num=0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   117
	_LIT(KProcessFormat,"%S%02d");
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   118
	do
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   119
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   120
		processName.Format(KProcessFormat,&baseName,num++);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   121
//		err=process.Create(processName,ExeThreadStartFunction,KDefaultStackSize,KDefaultMinHeapSize,KDefaultMaxHeapSize,NULL); 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   122
		err = process.Create( processName, commandLine->Des() );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   123
		} while ( err == KErrAlreadyExists );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   124
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   125
	process.Resume();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   126
	process.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   127
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   128
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   129
// -----------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   130
// E32Main
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   131
// Entry point called by system
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   132
// -----------------------------------------------------------------------------
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   133
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   134
GLDEF_C TInt E32Main()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   135
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   136
	CTrapCleanup* cleanup=CTrapCleanup::New();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   137
	TRAPD(error, LaunchEcmtCoreL() );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   138
	delete cleanup;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   139
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   140
	RThread self;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   141
	self.Suspend();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   142
	return 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   143
    }