messagingappbase/obexmtms/TObexMTM/SRC/ObexParsers.cpp
changeset 0 72b543305e3a
--- /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 <obexheaders.h>
+// 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)
+    {
+
+    }
+
+