diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/commsdataobjects/test/src/testapp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/commsdataobjects/test/src/testapp.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,469 @@ +// Copyright (c) 2008-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: +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "queryconnsettingstiermgrimpl.h" +#include "noddyqueryconnsettingsimpl.h" + +using namespace ESock; + + +void Test0cL() + { + // --------------------------------------------------------------------- + // Creating the query + // --------------------------------------------------------------------- + XConnectionQuerySet* querySet = XConnectionQuerySet::NewL(); + CleanupDeletePushL(querySet); + + XConnectionQueryBase* query; + query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdTsyName, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet); + query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet); + + CleanupStack::PopAndDestroy(querySet); + } + + +void Test1L() + { + // --------------------------------------------------------------------- + // Creating the query + // --------------------------------------------------------------------- + + XConnectionQuerySet* querySet = XConnectionQuerySet::NewL(); + CleanupDeletePushL(querySet); + + XConnectionQueryBase* query; + query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdTsyName, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet); + query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet); + + + // --------------------------------------------------------------------- + // Serialisation/Deserialisation Test + // --------------------------------------------------------------------- + CConnectionQuerySet* cdo = CConnectionQuerySet::NewL(querySet); + CleanupStack::Pop(querySet); + CleanupStack::PushL(cdo); + + TInt length = cdo->Length(); + HBufC8* buffer = HBufC8::NewLC(length); + if (!buffer) + { + User::Leave(KErrNoMemory); + } + + + TPtr8 storePtr(buffer->Des()); + TInt ret = cdo->Store(storePtr); + User::LeaveIfError(ret); + + + // Load using Load() + TPtrC8 loadPtr = buffer->Des(); + CConnectionQuerySet* outputContainer = CConnectionQuerySet::LoadL(loadPtr); + + delete outputContainer; + + CleanupStack::PopAndDestroy(buffer); + CleanupStack::PopAndDestroy(cdo); + } + + + +void Test3L() + { + // --------------------------------------------------------------------- + // Creating the query + // --------------------------------------------------------------------- + + CNoddyQueryConnSettingsImpl* impl = new (ELeave)CNoddyQueryConnSettingsImpl(); + CleanupStack::PushL(impl); + + XConnectionQuerySet* querySet = XConnectionQuerySet::NewL(); + CleanupDeletePushL(querySet); + + XConnectionQueryBase* query; + query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet); + query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet); + query = XIntQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet); + + + querySet->DispatchL(static_cast(impl), NULL); + + + // --------------------------------------------------------------------- + // Testing the iterators + // --------------------------------------------------------------------- + TConnectionQueryIter iter1(querySet->GetQueryIter(XConnectionQueryBase::ENotAnswered)); + TInt count = 0; + query = NULL; + query = iter1++; + while (query) + { + count++; + query = iter1++;; + } + ASSERT(count == 1); + + + TConnectionQueryIter iter2(querySet->GetQueryIter(XConnectionQueryBase::EAnswered)); + count = 0; + query = NULL; + query = iter2++; + while (query) + { + count++; + query = iter2++; + } + ASSERT(count == 4); + + + CleanupStack::PopAndDestroy(querySet); + CleanupStack::PopAndDestroy(impl); + } + + + + +void Test4L() + { + // --------------------------------------------------------------------- + // Creating the query + // --------------------------------------------------------------------- + + CQueryConnSettingsTierMgrImpl* impl = CQueryConnSettingsTierMgrImpl::NewL(1); + CleanupStack::PushL(impl); + + XConnectionQuerySet* querySet = XConnectionQuerySet::NewL(); + CleanupDeletePushL(querySet); + + XConnectionQueryBase* query; + query = XUintQuery::NewL(CommsDat::KCDTIdIAPRecord | CommsDat::KCDTIdRecordTag, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdIAPRecord | CommsDat::KCDTIdRecordName, *querySet); + query = XUintQuery::NewL(CommsDat::KCDTIdIAPLocation, *querySet); + + query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet); + query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet); + query = XIntQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet); + + + querySet->DispatchL(static_cast(impl), NULL); + + TBuf8<200> des8; + TBuf16<200> des16; + TBool b; + TInt i(0x0F0F0F0F); + TUint32 ui(0xF0F0F0F0); + + TInt count = 0; + // Option 1 - Iterate through the query results + TConnectionQueryIter iter (querySet->GetQueryIter(XConnectionQueryBase::EAnswered)); + const XConnectionQueryBase* qBase = iter++; + while (qBase) + { + count++; + // Do something with query/data + switch (qBase->Type()) + { + case XConnectionQueryBase::EInt: + { + const XIntQuery* qInt = static_cast(qBase); + i = qInt->Data(); + } + break; + + case XConnectionQueryBase::EUint: + { + const XUintQuery* qUInt = static_cast(qBase); + ui = qUInt->Data(); + } + break; + + case XConnectionQueryBase::EBool: + { + const XBoolQuery* qBool = static_cast(qBase); + b = qBool->Data(); + } + break; + + case XConnectionQueryBase::EText8: + { + const XText8Query* qText8 = static_cast(qBase); + des8 = qText8->Data(); + } + break; + + case XConnectionQueryBase::EText16: + { + const XText16Query* qText16 = static_cast(qBase); + des16 = qText16->Data(); + } + break; + } + + qBase = iter++; + } + + CleanupStack::PopAndDestroy(querySet); + CleanupStack::PopAndDestroy(impl); + } + + +/* +void Test4L() + { + // --------------------------------------------------------------------- + // Creating the query + // --------------------------------------------------------------------- + + XConnectionQuerySet* querySet = XConnectionQuerySet::NewL(); + CleanupDeletePushL(querySet); + + XConnectionQueryBase* query; + query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdTsyName, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet); + query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet); + + + // --------------------------------------------------------------------- + // Testing Find Query/Setting Data/Answered + // --------------------------------------------------------------------- + XText8Query* text8Query; + text8Query = static_cast(querySet->FindQuery(CommsDat::KCDTIdPortName)); +// text8Query->SetData(_L8("oddlength")); +// text8Query->SetQueryAnswered(); + + XText16Query* textQuery; + textQuery = static_cast(querySet->FindQuery(CommsDat::KCDTIdNifName)); +// textQuery->SetData(_L("Testing.nif")); +// textQuery->SetQueryAnswered(); + + // --------------------------------------------------------------------- + // Serialisation/Deserialisation Test 2 (with some populated data) + // --------------------------------------------------------------------- + TInt length = queryContainer->Length(); + HBufC8* buffer = HBufC8::NewLC(length); + if (!buffer) + { + User::Leave(KErrNoMemory); + } + + TInt ret; + TPtr8 storePtr(buffer->Des()); + ret = queryContainer->Store(storePtr); + User::LeaveIfError(ret); + + CParameterSetContainer* outputContainer = CParameterSetContainer::NewL(); + TPtrC8 loadPtr(buffer->Des()); + outputContainer->Load(loadPtr); + delete outputContainer; + + CleanupStack::PopAndDestroy(buffer); + CleanupStack::PopAndDestroy(queryContainer); + } +*/ + +void Test5L() + { + // --------------------------------------------------------------------- + // Creating the query + // --------------------------------------------------------------------- + + XConnectionQuerySet* querySet = XConnectionQuerySet::NewL(); + CleanupDeletePushL(querySet); + + XConnectionQueryBase* query; + query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdTsyName, *querySet); + query = XText16Query::NewL(CommsDat::KCDTIdPortName, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet); + query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet); + query = XBoolQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet); + + // --------------------------------------------------------------------- + // RConnection API additional method test + // --------------------------------------------------------------------- + TInt err; + RSocketServ ss; + err = ss.Connect(); + + RConnection con; + err = con.Open(ss); + + CConnectionQuerySet* cdo = CConnectionQuerySet::NewL(querySet); + CleanupStack::Pop(querySet); + CleanupStack::PushL(cdo); + + // This should fail with KErrNotReady since the connection hasn't been started + err = con.GetParameters(*cdo); + ASSERT(err == KErrNotReady); + + // This should succeed + err = con.Start(); + err = con.GetParameters(*cdo); + + TBuf8<200> des8; + TBuf16<200> des16; + TBool b; + TInt i(0x0F0F0F0F); + TUint32 ui(0xF0F0F0F0); + + + TInt count = 0; + if (err == KErrNone) + { + XConnectionQuerySet& outputQuerySet = cdo->DataObject(); + + // Option 1 - Iterate through the query results + TConnectionQueryIter iter (outputQuerySet.GetQueryIter(XConnectionQueryBase::EAnswered)); + const XConnectionQueryBase* qBase = iter++; + while (qBase) + { + count++; + // Do something with query/data + switch (qBase->Type()) + { + case XConnectionQueryBase::EInt: + { + const XIntQuery* qInt = static_cast(qBase); + i = qInt->Data(); + } + break; + + case XConnectionQueryBase::EUint: + { + const XUintQuery* qUInt = static_cast(qBase); + ui = qUInt->Data(); + } + break; + + case XConnectionQueryBase::EBool: + { + const XBoolQuery* qBool = static_cast(qBase); + b = qBool->Data(); + } + break; + + case XConnectionQueryBase::EText8: + { + const XText8Query* qText8 = static_cast(qBase); + des8 = qText8->Data(); + } + break; + + case XConnectionQueryBase::EText16: + { + const XText16Query* qText16 = static_cast(qBase); + des16 = qText16->Data(); + } + break; + } + + qBase = iter++; + } + + // Option 2 - Get a query response directly + const XConnectionQueryBase* directQuery; + directQuery = outputQuerySet.FindQuery(CommsDat::KCDTIdIfNetworks); // wont be found + directQuery = outputQuerySet.FindQuery(CommsDat::KCDTIdTsyName); + } + + con.Stop(); + con.Close(); + ss.Close(); + + CleanupStack::PopAndDestroy(cdo); + querySet = NULL; + } + +// Secure variants much simpler +// For EKA2, just an E32Main and a MainL() +LOCAL_C void MainL() +/** + * Secure variant + * Much simpler, uses the new Rendezvous() call to sync with the client + */ + { + _LIT(KLddName, "ECOMM"); + _LIT(KPddName, "ECDRV"); + + // Load device drivers + User::LoadPhysicalDevice(KPddName); + User::LoadLogicalDevice(KLddName); + + // self contained query set / container tests + + TInt err = KErrNone; +// TRAP(err, Test0cL()); + +// TRAP(err, Test1L()); + TRAP(err, Test3L()); + TRAP(err, Test4L()); + + // using rconnection - full end-to-end + TRAP(err, Test5L()); + + REComSession::FinalClose(); + } + + + +GLDEF_C TInt E32Main() +/** + * @return - Standard Epoc error code on process exit + * Secure variant only + * Process entry point. Called by client using RProcess API + */ + { + __UHEAP_MARK; + CTrapCleanup* cleanup = CTrapCleanup::New(); + if(cleanup == NULL) + { + return KErrNoMemory; + } + TRAPD(err,MainL()); + delete cleanup; + __UHEAP_MARKEND; + return err; + } +