fotaapplication/fmsclient/src/fmsclient.cpp
author hgs
Fri, 15 Oct 2010 11:46:45 +0530
changeset 73 ae69c2e8bc34
parent 51 2e64dc50f295
permissions -rw-r--r--
201041
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"));
73
hgs
parents: 51
diff changeset
    98
		
hgs
parents: 51
diff changeset
    99
		const int maxRetry(4);
hgs
parents: 51
diff changeset
   100
		TInt retry = maxRetry;
hgs
parents: 51
diff changeset
   101
		do {
hgs
parents: 51
diff changeset
   102
         res = CreateSession( KFMSServerName,TVersion(1,0,0),2 );
hgs
parents: 51
diff changeset
   103
         if (KErrNotFound != res && KErrServerTerminated != res) {
hgs
parents: 51
diff changeset
   104
             retry =0;
hgs
parents: 51
diff changeset
   105
         } else {
hgs
parents: 51
diff changeset
   106
             TRAP(res, StartServerL());
hgs
parents: 51
diff changeset
   107
             if (KErrNone == res || KErrAlreadyExists == res) {
hgs
parents: 51
diff changeset
   108
                 retry =0;
hgs
parents: 51
diff changeset
   109
                 res = CreateSession( KFMSServerName,TVersion(1,0,0),2 );
hgs
parents: 51
diff changeset
   110
             }
hgs
parents: 51
diff changeset
   111
         }
hgs
parents: 51
diff changeset
   112
     } while (--retry > 0);
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   113
		User::LeaveIfError( res );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   114
		FLOG(_L("RFMSClient::OpenL()- session created"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   115
		CRepository* centrep2 = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   116
    TRAPD( err, centrep2 = CRepository::NewL( KCRUidFotaServer ) )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   117
    TInt val = KErrNone;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   118
    if (err==KErrNone ) 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   119
      {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   120
      	      centrep2->Get(  KFotaUpdateState, val );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   121
      	      delete centrep2;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   122
      }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   123
            
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   124
            centrep2 = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   125
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   126
		if( FotaStartUp && val == EFotaDownloadInterrupted )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   127
			{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   128
			FLOG(_L("RFMSClient::OpenL()- fotastartup using FMS session"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   129
			SendInterruptParamsL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   130
			}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   131
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   132
	else //not a secured client
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   133
		{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   134
		FLOG(_L("fmsclient not launched--insecured client"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   135
		res = KErrNotFound;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   136
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   137
	FLOG(_L("RFMSClient::OpenL()- End %d"),res);	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   138
	return res;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   139
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   140
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   141
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   142
// RFMSClient::Close()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   143
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   144
EXPORT_C void RFMSClient::Close()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   145
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   146
    FLOG(_L(" RFMSClient::Close"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   147
	RSessionBase::Close();  //basecall
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   148
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   149
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   150
// ----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   151
// RFMSClient::NotifyForResumeL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   152
// ----------------------------------------------------------------------------	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   153
EXPORT_C void RFMSClient::NotifyForResumeL(const TFmsIpcCommands& aReason,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   154
		const TInt& aBearer, const TDriveNumber& aDrive, const TInt& aSize)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   155
	{		
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   156
    FLOG(_L(" RFMSClient::NotifyForResumeL--Begin"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   157
    TInt Size(aSize),Drive((TInt)aDrive),Bearer(aBearer);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   158
    TInt err = SendReceive( (TInt)aReason, TIpcArgs(Bearer,Drive,Size));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   159
    FLOG(_L(" RFMSClient::NotifyForResumeL--End error as %d"),err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   160
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   161
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   162
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   163
// RFMSClient::SendInterruptParamsL() called only when fotastartup launched
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   164
// ---------------------------------------------------------------------------	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   165
void RFMSClient::SendInterruptParamsL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   166
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   167
	FLOG(_L(" RFMSClient::SendInterruptParamsL--Begin"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   168
	TInt err = Send( EFotaStartUpPlugin );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   169
	FLOG(_L(" RFMSClient::SendInterruptParamsL--End as %d"),err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   170
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   171
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   172
EXPORT_C void RFMSClient::NotifyForUpdateL(const TFmsIpcCommands& aReason, TUint aLevel)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   173
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   174
    FLOG(_L(" RFMSClient::NotifyForUpdateL--Begin, level = %d"), aLevel);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   175
    TInt err = SendReceive( (TInt) aReason, TIpcArgs (aLevel));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   176
    FLOG(_L(" RFMSClient::NotifyForUpdateL--End as %d"),err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   177
    User::LeaveIfError(err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   178
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   179
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   180
// RFMSClient::Cancel() 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   181
// ---------------------------------------------------------------------------	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   182
EXPORT_C void RFMSClient::Cancel()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   183
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   184
	FLOG(_L(" RFMSClient::Cancel--Begin"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   185
	TInt err = SendReceive( ECancelOutstandingRequest );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   186
	FLOG(_L(" RFMSClient::Cancel--End as %d"),err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   187
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   188
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   189
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   190
// RFMSClient::ActivePhoneCallSync() 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   191
// ---------------------------------------------------------------------------  
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   192
EXPORT_C TInt RFMSClient::IsPhoneCallActive(TInt& aCallActive)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   193
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   194
    FLOG(_L(" RFMSClient::IsPhoneCallActive--Begin"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   195
    TPckgBuf<TInt> result(aCallActive);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   196
    TInt err = SendReceive( EUpdPhoneCallActive,TIpcArgs(&result));    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   197
    aCallActive=result();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   198
    FLOG(_L(" RFMSClient::IsPhoneCallActive--End as %d,%d"),err,aCallActive);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   199
    return err;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   200
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   201
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   202
//End of file