--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/smsprotocols/smsstack/test/smsstackbasetestserver.cpp Fri Mar 12 15:49:38 2010 +0200
@@ -0,0 +1,172 @@
+// Copyright (c) 1999-2009 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:
+//
+
+// @file
+// @test
+
+#include "smsstackbasetestserver.h"
+#include <test/TestExecuteStepBase.h>
+#include <e32def.h>
+#include <commsdattypesv1_1.h>
+#include <commsdat_partner.h>
+
+using namespace CommsDat;
+
+EXPORT_C CSmsStackTestServer::CSmsStackTestServer()
+ {
+ }
+
+EXPORT_C CSmsStackTestServer::~CSmsStackTestServer()
+ {
+ iPhone1.Close();
+ iPhone2.Close();
+ iTelServer.Close();
+ }
+
+EXPORT_C void CSmsStackTestServer::InitializeTsyAndPhonesL()
+/**
+ * This functions first gets the list of TSYs from Commsdat and then load each TSY in order.
+ * Having loaded the TSY, the function opens a phone session to this TSY.
+ * Maximum two TSYs are loaded. If there is only one TSY, aPhone2 parameter is not changed.
+ */
+ {
+ TInt err = iTelServer.Connect();
+
+ if ( KErrNone != err )
+ {
+ ERR_PRINTF2(_L("Couldn't connect to ETel server. Error:%d"), err);
+ User::Leave( err );
+ }
+
+ RArray<TName> tsyNameList;
+ CleanupClosePushL(tsyNameList);
+
+ GetTsyNamesFromCommsdatL(tsyNameList);
+
+ TInt tsyCount = tsyNameList.Count();
+
+ if( tsyCount < 1 )
+ {
+ ERR_PRINTF1(_L("Couldn't find any TSY record in Commsdat Baseband table."));
+ User::Leave( KErrNotFound );
+ }
+ else if ( tsyCount > 2)
+ {
+ ERR_PRINTF2(_L("Found %d baseband record. First two TSY will be loaded."), tsyCount);
+ }
+
+ LoadTsyL(iTelServer, iPhone1, tsyNameList[0]);
+ if(--tsyCount)
+ {
+ LoadTsyL(iTelServer, iPhone2, tsyNameList[1]);
+ }
+
+ CleanupStack::PopAndDestroy(&tsyNameList);
+ }
+
+void CSmsStackTestServer::GetTsyNamesFromCommsdatL(RArray<TName>& aTsyNameList)
+ {
+ CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
+ CleanupStack::PushL(db);
+
+ TName tsy;
+ TUint32 modemId = 0;
+
+ CMDBField<TUint32>* globalSettingsField = new(ELeave) CMDBField<TUint32>(KCDTIdModemPhoneServicesSMS);
+ CleanupStack::PushL(globalSettingsField);
+ globalSettingsField->SetRecordId(1);
+ globalSettingsField->LoadL(*db);
+ modemId = *globalSettingsField;
+ CleanupStack::PopAndDestroy(globalSettingsField);
+
+ CMDBField<TDesC>* tsyField = new(ELeave) CMDBField<TDesC>(KCDTIdTsyName);
+ CleanupStack::PushL(tsyField);
+ tsyField->SetRecordId(modemId);
+ tsyField->SetMaxLengthL(KMaxTextLength);
+ tsyField->LoadL(*db);
+ tsy = *tsyField;
+ aTsyNameList.AppendL(tsy);
+
+ CleanupStack::PopAndDestroy(2, db); // db, tsyField
+ }
+
+void CSmsStackTestServer::LoadTsyL(RTelServer& aServer, RPhone& aPhone, const TDesC& aTsyName)
+ {
+ INFO_PRINTF2(_L("Using TSY \"%S\"Loading RTelServer..."), &aTsyName);
+
+ TInt ret = aServer.LoadPhoneModule(aTsyName);
+ if (ret!=KErrNone)
+ {
+ ERR_PRINTF2(_L("Loading Phone Module returned %d"), ret);
+ User::Leave(ret);
+ }
+
+ // Find the phone corresponding to this TSY and open a number of handles on it
+ TInt numPhones;
+ ret = aServer.EnumeratePhones(numPhones);
+ if (ret!=KErrNone)
+ {
+ ERR_PRINTF2(_L("Enumerate Phones returned %d"), ret);
+ User::Leave(ret);
+ }
+
+ TBool found=EFalse;
+
+ while (numPhones--)
+ {
+ TName phoneTsy;
+ ret = aServer.GetTsyName(numPhones,phoneTsy);
+ if (ret!=KErrNone)
+ {
+ ERR_PRINTF2(_L("GetTsyName returned %d"), ret);
+ User::Leave(ret);
+ }
+
+ if (phoneTsy.CompareF(aTsyName)==KErrNone)
+ {
+ INFO_PRINTF1(_L("Found RPhone..."));
+ found = ETrue;
+ RTelServer::TPhoneInfo info;
+ ret = aServer.GetPhoneInfo(numPhones,info);
+ if (ret!=KErrNone)
+ {
+ ERR_PRINTF2(_L("GetPhoneInfo returned %d"), ret);
+ User::Leave(ret);
+ }
+ ret = aPhone.Open(aServer,info.iName);
+ if (ret!=KErrNone)
+ {
+ ERR_PRINTF2(_L("Opening phone returned %d"), ret);
+ User::Leave(ret);
+ }
+
+ INFO_PRINTF1(_L("Initializing..."));
+ ret = aPhone.Initialise();
+ TTimeIntervalMicroSeconds32 InitPause=9000000; //Required Pause to Allow SMSStack to Complete its Async Init
+ User::After(InitPause); //call to the TSY and finish its StartUp.
+ if (ret!=KErrNone)
+ {
+ ERR_PRINTF2(_L("Completed Initialize returned %d"), ret);
+ User::Leave(ret);
+ }
+ break;
+ }
+ }
+
+ if(!found)
+ {
+ ERR_PRINTF2(_L("Couldn't find the phone for TSY %S"), &aTsyName);
+ }
+ }