fotaapplication/fmsclient/src/fmsclient.cpp
author hgs
Tue, 13 Jul 2010 09:51:41 +0530
changeset 51 2e64dc50f295
child 73 ae69c2e8bc34
permissions -rw-r--r--
201025_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     1
/*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     3
* All rights reserved.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     8
*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     9
* Initial Contributors:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    11
*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    12
* Contributors:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    13
*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    14
* Description: Implementation of fotaserver component
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    15
* 	This is part of fotaapplication.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    16
*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    17
*/
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    18
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    19
#include <f32file.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    20
#include <fotaConst.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    21
#include <fotaengine.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    22
#include "fmsclientserver.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    23
#include "fmsclient.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    24
#include "fmsclientdebug.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    25
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    26
#include "fotaserverPrivateCRKeys.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    27
#include <centralrepository.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    28
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    29
// IsSecureClient()  
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    30
// Checks who is trying to launch FMS
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    31
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    32
TBool IsSecureClient(TBool& aFotaStartUp)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    33
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    34
	FLOG(_L("IsSecureClient Started"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    35
	RThread thread;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    36
	TUid fotaserver,fotastartup;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    37
	fotaserver.iUid = KFotaServerUid;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    38
	fotastartup.iUid = KStarterUid;	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    39
	if ( thread.SecureId() == fotaserver.iUid ) 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    40
		{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    41
		FLOG(_L("fmsclient fotaserver is using the service"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    42
		return ETrue;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    43
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    44
	else if ( thread.SecureId() ==  fotastartup.iUid )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    45
		{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    46
		FLOG(_L("fmsclient fotastartupplugin is using the service"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    47
		aFotaStartUp = ETrue;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    48
		return ETrue;    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    49
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    50
		else if (thread.SecureId() == 0x01D278B9 ) //test app
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    51
		{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    52
		FLOG(_L("fmsclient test app is using the service"));		
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    53
		return ETrue;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    54
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    55
	FLOG(_L("fmsclient not launched"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    56
	return EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    57
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    58
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    59
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    60
// StartServerL()  
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    61
//	Starts Fota Downlaod Interrupt Monitory server
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    62
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    63
TInt StartServerL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    64
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    65
	FLOG(_L("StartServerLt Started"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    66
	TInt res = KErrNone;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    67
	RProcess server;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    68
	res=server.Create(KFMSServerName,KNullDesC);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    69
	FLOG(_L("StartServerL-- create server error as %d"),res);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    70
	if (res!=KErrNone)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    71
		{		
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    72
		return res;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    73
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    74
	TRequestStatus stat;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    75
	server.Rendezvous(stat);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    76
	if (stat!=KRequestPending)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    77
		server.Kill(0);		// abort startup
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    78
	else
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    79
		server.Resume();	// logon OK - start the server
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    80
	User::WaitForRequest(stat);		// wait for start or death
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    81
	res=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    82
	FLOG(_L("StartServerL-- server.ExitType() returns %d"),res);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    83
	server.Close();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    84
	return res;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    85
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    86
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    88
// RFMSClient::OpenL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    89
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    90
EXPORT_C TInt RFMSClient::OpenL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    91
	{	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    92
	FLOG(_L("RFMSClient::OpenL()- Begin"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    93
	TInt res = KErrNone;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    94
	TBool FotaStartUp = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    95
	if( IsSecureClient(FotaStartUp))
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    96
		{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    97
		FLOG(_L("RFMSClient::OpenL()- Secured client"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    98
		res = CreateSession( KFMSServerName,TVersion(1,0,0),2 );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    99
		if ( res != KErrNone )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   100
			{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   101
			FLOG(_L("RFMSClient::OpenL()- session not created"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   102
			res = StartServerL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   103
			User::LeaveIfError( res );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   104
			res = CreateSession( KFMSServerName,TVersion(1,0,0),2 );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   105
			}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   106
		User::LeaveIfError( res );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   107
		FLOG(_L("RFMSClient::OpenL()- session created"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   108
		CRepository* centrep2 = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   109
    TRAPD( err, centrep2 = CRepository::NewL( KCRUidFotaServer ) )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   110
    TInt val = KErrNone;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   111
    if (err==KErrNone ) 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   112
      {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   113
      	      centrep2->Get(  KFotaUpdateState, val );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   114
      	      delete centrep2;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   115
      }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   116
            
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   117
            centrep2 = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   118
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   119
		if( FotaStartUp && val == EFotaDownloadInterrupted )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   120
			{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   121
			FLOG(_L("RFMSClient::OpenL()- fotastartup using FMS session"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   122
			SendInterruptParamsL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   123
			}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   124
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   125
	else //not a secured client
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   126
		{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   127
		FLOG(_L("fmsclient not launched--insecured client"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   128
		res = KErrNotFound;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   129
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   130
	FLOG(_L("RFMSClient::OpenL()- End %d"),res);	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   131
	return res;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   132
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   133
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   134
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   135
// RFMSClient::Close()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   136
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   137
EXPORT_C void RFMSClient::Close()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   138
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   139
    FLOG(_L(" RFMSClient::Close"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   140
	RSessionBase::Close();  //basecall
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   141
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   142
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   143
// ----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   144
// RFMSClient::NotifyForResumeL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   145
// ----------------------------------------------------------------------------	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   146
EXPORT_C void RFMSClient::NotifyForResumeL(const TFmsIpcCommands& aReason,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   147
		const TInt& aBearer, const TDriveNumber& aDrive, const TInt& aSize)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   148
	{		
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   149
    FLOG(_L(" RFMSClient::NotifyForResumeL--Begin"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   150
    TInt Size(aSize),Drive((TInt)aDrive),Bearer(aBearer);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   151
    TInt err = SendReceive( (TInt)aReason, TIpcArgs(Bearer,Drive,Size));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   152
    FLOG(_L(" RFMSClient::NotifyForResumeL--End error as %d"),err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   153
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   154
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   155
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   156
// RFMSClient::SendInterruptParamsL() called only when fotastartup launched
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   157
// ---------------------------------------------------------------------------	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   158
void RFMSClient::SendInterruptParamsL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   159
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   160
	FLOG(_L(" RFMSClient::SendInterruptParamsL--Begin"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   161
	TInt err = Send( EFotaStartUpPlugin );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   162
	FLOG(_L(" RFMSClient::SendInterruptParamsL--End as %d"),err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   163
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   164
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   165
EXPORT_C void RFMSClient::NotifyForUpdateL(const TFmsIpcCommands& aReason, TUint aLevel)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   166
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   167
    FLOG(_L(" RFMSClient::NotifyForUpdateL--Begin, level = %d"), aLevel);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   168
    TInt err = SendReceive( (TInt) aReason, TIpcArgs (aLevel));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   169
    FLOG(_L(" RFMSClient::NotifyForUpdateL--End as %d"),err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   170
    User::LeaveIfError(err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   171
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   172
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   173
// RFMSClient::Cancel() 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   174
// ---------------------------------------------------------------------------	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   175
EXPORT_C void RFMSClient::Cancel()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   176
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   177
	FLOG(_L(" RFMSClient::Cancel--Begin"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   178
	TInt err = SendReceive( ECancelOutstandingRequest );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   179
	FLOG(_L(" RFMSClient::Cancel--End as %d"),err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   180
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   181
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   182
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   183
// RFMSClient::ActivePhoneCallSync() 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   184
// ---------------------------------------------------------------------------  
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   185
EXPORT_C TInt RFMSClient::IsPhoneCallActive(TInt& aCallActive)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   186
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   187
    FLOG(_L(" RFMSClient::IsPhoneCallActive--Begin"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   188
    TPckgBuf<TInt> result(aCallActive);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   189
    TInt err = SendReceive( EUpdPhoneCallActive,TIpcArgs(&result));    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   190
    aCallActive=result();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   191
    FLOG(_L(" RFMSClient::IsPhoneCallActive--End as %d,%d"),err,aCallActive);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   192
    return err;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   193
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   194
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   195
//End of file