diff -r 000000000000 -r 72b543305e3a messagingappbase/obexmtms/TObexMTM/SRC/ObexParsers.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/obexmtms/TObexMTM/SRC/ObexParsers.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,403 @@ +// Copyright (c) 2002-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 "ObexParsers.h" +// System includes +#include +// User includes +#include "harness.h" // CMainTestHarness +#include "ObexHarness.h" // CObexClientTest +#include "ObexTestUtils.h" // CObexTestUtils +#include "testframeutils.h" // CTestScript +#include "SelectObexMtmTypeState.h" // CSelectObexMtmTypeState +#include "SetObexMessageRecipientStates.h" // CSetObexMessageRecipientState & BT Version +#include "CreateServiceEntryState.h" // CCreateServiceEntryState +#include "CreateObexMessageState.h" // CCreateObexMessageState +#include "SendMessageState.h" // CSendMessageState +#include "AddObexAttachmentState.h" // CAddObexAttachmentState +#include "ObexFileDebugReceiveState.h" // CObexFileDebugReceiveState +#include "ObexIgnoreSendErrorsState.h" // CObexIgnoreSendErrorsState +#include "sendasstates.h" // CObexSendAsCreateState, CObexSendAsAddRecipientState, + // CObexSendAsSetSubjectState, CObexSendAsAddAttachmentState, + // CObexSendAsAbandonState, CObexSendAsSaveState, CObexSendAsValidateState +#include "obexsetpasswordstate.h" // CObexSetPasswordState +#include "obexresetpasswordstate.h" // CObexResetPasswordState +#include "obexgetpasswordstate.h" // CObexGetPasswordState + +#include "RegisterObexMtmTypeState.h" // CRegisterObexMtmTypeState +#include "UnRegisterObexMtmTypeState.h" // CRegisterObexMtmTypeState + +#include "AddHeadersState.h" // CAddHeadersState + + +// +// SCRIPT TOKENS // +// + +// Test tokens +_LIT(KCommandObexClientTest, "obex_client_test"); +_LIT(KCommandObexSelectMtm, "obex_select_mtm"); +_LIT(KCommandObexCreateMessage, "create_message"); +_LIT(KCommandObexSetMessageAddressee, "set_recipient"); +_LIT(KCommandObexSetBTMessageAddressee, "set_bt_recipient"); +_LIT(KCommandObexSendMessage, "send_message"); +_LIT(KCommandObexSendMessageAndCancel, "send_message_and_cancel"); +_LIT(KCommandObexCreateService, "create_service"); +_LIT(KCommandObexAddAttachmentAsEntry, "add_attachment_as_entry"); +_LIT(KCommandObexAddAttachmentByName, "add_attachment_by_name"); +_LIT(KCommandObexSimulateObjectReceipt, "simulate_object_receipt"); +_LIT(KCommandObexIgnoreSendErrors, "ignore_send_errors"); + + +// Send As Commands +_LIT(KCommandObexCreateSendAs, "sendas_create"); // 0 parameters, creates a SendAs object and message +_LIT(KCommandObexAddSendAsRecipient, "sendas_add_recipient"); // 1 parameter, adds the specified recipient to the SendAs message +_LIT(KCommandObexAddSendAsBTRecipient, "sendas_add_bt_recipient"); // 1 parameter, adds the specified recipient to the SendAs message +_LIT(KCommandObexSetSendAsSubject, "sendas_set_subject"); // 1 parameter, sets the subject of a SendAs Message +_LIT(KCommandObexAddSendAsAttachment, "sendas_add_attachment"); // 1 parameter, adds the specified attachment to a SendAs Message +_LIT(KCommandObexAbandonSendAsMessage, "sendas_abandon_message"); // 0 parameters, abandons the creation of a SendAs message +_LIT(KCommandObexSaveSendAsMessage, "sendas_save_message"); // 0 parameters, saves the current SendAs message to the outbox +_LIT(KCommandObexValidateSendAsMessage, "sendas_validate_message"); // 0 parameters, validates the current SendAs message + +//password commands + +//register/unregistering commands +_LIT(KCommandObexRegisterMtm, "register_mtm"); // 1 paramter, registers either an IR or BT Mtm +_LIT(KCommandObexUnRegisterMtm, "unregister_mtm"); // 1 paramter, unregister either an IR or BT Mtm + +// commands for obex header support +_LIT(KCommandObexAddHeader, "add_header"); +_LIT(KCommandObexAddAttachmentByNameWithHeaders, "add_attachment_by_name_with_headers"); + + +// +// CObexMainSectionParser +// +CObexMainSectionParser* CObexMainSectionParser::NewL(CMainTestHarness& aMainTest, CTestScript& aScript) + { + CObexMainSectionParser* self = new (ELeave) CObexMainSectionParser(aMainTest, aScript); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +void CObexMainSectionParser::ConstructL() + { + CMainSectionParser::ConstructL(); + iCommandParsers->AppendL(CNewObexTestCommandParser::NewL(iScript, iMainTest)); + } + +CObexMainSectionParser::CObexMainSectionParser(CMainTestHarness& aMainTest, CTestScript& aScript) +: CMainSectionParser(aMainTest, aScript), + iMainTest(aMainTest) + { + } + + +// +// CNewObexTestCommandParser +// +CNewObexTestCommandParser* CNewObexTestCommandParser::NewL(CTestScript& aScript, CMainTestHarness& aMainTest) + { + CNewObexTestCommandParser* self = new (ELeave) CNewObexTestCommandParser(aScript, aMainTest); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +void CNewObexTestCommandParser::ConstructL() + { + CBaseCommandParser::ConstructL(); + AddCommandL(KCommandObexClientTest); + } + +CNewObexTestCommandParser::CNewObexTestCommandParser(CTestScript& aScript, CMainTestHarness& aMainTest) +: iMainTest(aMainTest), + iScript(aScript) + { + } + +void CNewObexTestCommandParser::ProcessL() + { + // Create an obex test utilities + CObexTestUtils* obexTestUtils = CObexTestUtils::NewL(iMainTest.TestConsole()); + CleanupStack::PushL(obexTestUtils); // PUSH + + // Create an obex test, give it the test utilities + CObexClientTest* obexTest = CObexClientTest::NewL(obexTestUtils, iMainTest.TestConsole()); // obexTest takes ownership of obexTestUtils + CleanupStack::Pop(); // obexTestUtils // POP(1) + CleanupStack::PushL(obexTest); // PUSH + + // Attach the obex test to the main test + iMainTest.AddStateL(obexTest, iDebugInfo); // iMainTest takes ownership of obexTest + CleanupStack::Pop(); // obexTest // POP(1) + + // Check that there is one argument, the obex test section name + CheckNumberOfArgumentsL(1); + + // Create an obex client section parser + CObexClientSectionParser* sectionParser = CObexClientSectionParser::NewL(*obexTest, iScript, (*iArgumentList)[0]); + CleanupStack::PushL(sectionParser); // PUSH + sectionParser->ParseL(); + CleanupStack::PopAndDestroy(); // sectionParser // POP(1) + } + + + +// +// CObexClientSectionParser +// +CObexClientSectionParser* CObexClientSectionParser::NewL(CObexClientTest& aObexClientTest, CTestScript& aScript, const TDesC& aNewSectionName) + { + CObexClientSectionParser* self = new (ELeave) CObexClientSectionParser(aObexClientTest, aScript); + CleanupStack::PushL(self); + self->ConstructL(aNewSectionName); + CleanupStack::Pop(self); + return self; + } + +void CObexClientSectionParser::ConstructL(const TDesC& aNewSectionName) + { + CBaseSectionParser::ConstructL(aNewSectionName); + + TTestDebugInfo debugInfo = iObexTest.GetDebugInfo(); + debugInfo.SetTestHarnessName(iSection->SectionPosition()); + iObexTest.SetDebugInfo(debugInfo); + + iCommandParsers->AppendL(CMsvSelectParser::NewL(iObexTest)); + iCommandParsers->AppendL(CMsvUtilitiesParser::NewL(iObexTest)); + iCommandParsers->AppendL(CMsvOperationParser::NewL(iObexTest)); + iCommandParsers->AppendL(CObexClientTestCommandParser::NewL(iScript, iObexTest)); + } + +CObexClientSectionParser::CObexClientSectionParser(CObexClientTest& aObexTest, CTestScript& aScript) +: CBaseSectionParser(aScript), + iObexTest(aObexTest), + iScript(aScript) + { + } + + +void CObexClientSectionParser::LogCommentL(const TDesC& aComment) + { + iObexTest.ObexTestUtils().WriteComment(aComment); + } + +// +// CObexClientTestCommandParser +// +void CObexClientTestCommandParser::ProcessL() + { + if ((*iCurrentCommand) == KCommandObexSelectMtm) + { + CheckNumberOfArgumentsL(1); //"BT" or "IR" + iObexTest.AddStateL(new (ELeave)CSelectObexMtmTypeState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandObexCreateService) + { + CheckNumberOfArgumentsL(0); + iObexTest.AddStateL(new (ELeave)CCreateServiceEntryState(iObexTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandObexCreateMessage) + { + CheckNumberOfArgumentsL(0); + iObexTest.AddStateL(new (ELeave)CCreateObexMessageState(iObexTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandObexSendMessage) + { + if (iArgumentList->Count() == 0) + iObexTest.AddStateL(new (ELeave)CSendMessageState(_L("succeed"), iObexTest), iDebugInfo); + else + iObexTest.AddStateL(new (ELeave)CSendMessageState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandObexSendMessageAndCancel) + { + iObexTest.SetCancelGranularity(1000); + iObexTest.AddStateL(new (ELeave)CSendMessageState(_L("succeed"), iObexTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandObexSetMessageAddressee) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave)CSetObexMessageRecipientState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandObexSetBTMessageAddressee) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave)CSetObexMessageBTRecipientState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandObexAddAttachmentByName) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave)CAddObexAttachmentByNameState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandObexAddAttachmentAsEntry) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave)CAddObexAttachmentAsEntryState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if((*iCurrentCommand) == KCommandObexSimulateObjectReceipt) + { + CheckNumberOfArgumentsL(2); + iObexTest.AddStateL(new (ELeave)CObexFileDebugReceiveState((*iArgumentList)[0], (*iArgumentList)[1], iObexTest), iDebugInfo); + } +//sendas + else if((*iCurrentCommand) == KCommandObexCreateSendAs) + { + CheckNumberOfArgumentsL(0); + iObexTest.AddStateL(new (ELeave) CObexSendAsCreateState(iObexTest), iDebugInfo); + } + else if((*iCurrentCommand) == KCommandObexAddSendAsRecipient) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave) CObexSendAsAddRecipientState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if((*iCurrentCommand) == KCommandObexAddSendAsBTRecipient) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave) CObexSendAsAddBTRecipientState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if((*iCurrentCommand) == KCommandObexSetSendAsSubject) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave) CObexSendAsSetSubjectState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if((*iCurrentCommand) == KCommandObexAddSendAsAttachment) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave) CObexSendAsAddAttachmentState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if((*iCurrentCommand) == KCommandObexAbandonSendAsMessage) + { + CheckNumberOfArgumentsL(0); + iObexTest.AddStateL(new (ELeave) CObexSendAsAbandonState(iObexTest), iDebugInfo); + } + else if((*iCurrentCommand) == KCommandObexSaveSendAsMessage) + { + CheckNumberOfArgumentsL(0); + iObexTest.AddStateL(new (ELeave) CObexSendAsSaveState(iObexTest), iDebugInfo); + } + else if((*iCurrentCommand) == KCommandObexValidateSendAsMessage) + { + CheckNumberOfArgumentsL(0); + iObexTest.AddStateL(new (ELeave) CObexSendAsValidateState(iObexTest), iDebugInfo); + } + else if((*iCurrentCommand) == KCommandObexIgnoreSendErrors) + { + CheckNumberOfArgumentsL(0); + iObexTest.AddStateL(new (ELeave) CObexIgnoreSendErrorsState(iObexTest), iDebugInfo); + } +//registering mtms + else if ((*iCurrentCommand) == KCommandObexRegisterMtm) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave) CRegisterObexMtmTypeState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + else if ((*iCurrentCommand) == KCommandObexUnRegisterMtm) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave) CUnRegisterObexMtmTypeState((*iArgumentList)[0], iObexTest), iDebugInfo); + } +// obex header + else if ((*iCurrentCommand) == KCommandObexAddHeader) + { + CheckNumberOfArgumentsL(2); + + // Determine the obex header HI value. + TUint8 headerHI = 0; + TLex lex((*iArgumentList)[0]); + + lex.Inc(2); // Jump '0x'. + User::LeaveIfError(lex.Val(headerHI, EHex)); + + // Determine the obex header type from the HI value. + CObexHeader::THeaderType headerType; + + // Mask the top 2 bits, and shift the result down. + headerType = (CObexHeader::THeaderType)((0xC0 & headerHI) >> 6); + + iObexTest.AddStateL(new (ELeave) CAddHeadersState(headerType, headerHI, (*iArgumentList)[1], iObexTest), iDebugInfo); + } + + else if ((*iCurrentCommand) == KCommandObexAddAttachmentByNameWithHeaders) + { + CheckNumberOfArgumentsL(1); + iObexTest.AddStateL(new (ELeave) CAddObexAttachmentByNameWithHeadersState((*iArgumentList)[0], iObexTest), iDebugInfo); + } + + else + User::Leave(KErrNotSupported); + } + +CObexClientTestCommandParser* CObexClientTestCommandParser::NewL(CTestScript& aScript, CObexClientTest& aObexTest) + { + CObexClientTestCommandParser* self = new (ELeave) CObexClientTestCommandParser(aScript, aObexTest); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +void CObexClientTestCommandParser::ConstructL() + { + CBaseCommandParser::ConstructL(); + AddCommandL(KCommandObexSelectMtm); + AddCommandL(KCommandObexCreateMessage); + AddCommandL(KCommandObexSendMessage); + AddCommandL(KCommandObexSendMessageAndCancel); + AddCommandL(KCommandObexSetMessageAddressee); + AddCommandL(KCommandObexSetBTMessageAddressee); + AddCommandL(KCommandObexCreateService); + AddCommandL(KCommandObexAddAttachmentByName); + AddCommandL(KCommandObexAddAttachmentAsEntry); + AddCommandL(KCommandObexSimulateObjectReceipt); + AddCommandL(KCommandObexIgnoreSendErrors); + +//sendas + AddCommandL(KCommandObexCreateSendAs); + AddCommandL(KCommandObexAddSendAsRecipient); + AddCommandL(KCommandObexAddSendAsBTRecipient); + AddCommandL(KCommandObexSetSendAsSubject); + AddCommandL(KCommandObexAddSendAsAttachment); + AddCommandL(KCommandObexAbandonSendAsMessage); + AddCommandL(KCommandObexSaveSendAsMessage); + AddCommandL(KCommandObexValidateSendAsMessage); + +#ifdef __SUPPORT_MESSAGING_API_V2__ +//password + AddCommandL(KCommandObexSetPassword); + AddCommandL(KCommandObexResetPassword); + AddCommandL(KCommandObexGetPassword); +#endif //__SUPPORT_MESSAGING_API_V2__ + +//registering mtm types + AddCommandL(KCommandObexRegisterMtm); + AddCommandL(KCommandObexUnRegisterMtm); + +// obex header + AddCommandL(KCommandObexAddHeader); + AddCommandL(KCommandObexAddAttachmentByNameWithHeaders); + } + +CObexClientTestCommandParser::CObexClientTestCommandParser(CTestScript& aScript, CObexClientTest& aObexTest) +: iScript(aScript), + iObexTest(aObexTest) + { + + } + +