QString ImapMessageAttachmentItem::tooltip() const { Imap::Mailbox::TreeItemMessage *msg = messagePtr(); if (!msg || !model) return QString(); return MessageComposer::tr("IMAP message %1").arg(QString::fromUtf8(imapUrl())); }
bool ImapMessageAttachmentItem::isAvailableLocally() const { Imap::Mailbox::TreeItemMessage *msg = messagePtr(); if (!msg) return false; return fullMessageCombiner->loaded(); }
QString ImapMessageAttachmentItem::caption() const { Imap::Mailbox::TreeItemMessage *msg = messagePtr(); if (!msg || !model) return MessageComposer::tr("Message not available: /%1;UIDVALIDITY=%2;UID=%3") .arg(mailbox, QString::number(uidValidity), QString::number(uid)); return msg->envelope(model).subject; }
ImapMessageAttachmentItem::ImapMessageAttachmentItem(Imap::Mailbox::Model *model, const QString &mailbox, const uint uidValidity, const uint uid): fullMessageCombiner(0), model(model), mailbox(mailbox), uidValidity(uidValidity), uid(uid) { Q_ASSERT(model); Imap::Mailbox::TreeItemMessage *msg = messagePtr(); Q_ASSERT(msg); fullMessageCombiner = new Imap::Mailbox::FullMessageCombiner(msg->toIndex(model)); }
QByteArray ImapMessageAttachmentItem::contentDispositionHeader() const { Imap::Mailbox::TreeItemMessage *msg = messagePtr(); if (!msg || !model) return QByteArray(); // FIXME: this header "sanitization" is so crude, ugly, buggy and non-compliant that I shall feel deeply ashamed return "Content-Disposition: attachment;\r\n\tfilename=\"" + msg->envelope(model).subject.toUtf8().replace("\"", "'") + ".eml\"\r\n"; }
QSharedPointer<QIODevice> ImapMessageAttachmentItem::rawData() const { Imap::Mailbox::TreeItemMessage *msg = messagePtr(); if (!msg) return QSharedPointer<QIODevice>(); QSharedPointer<QIODevice> io(new QBuffer()); // This can probably be optimized to allow zero-copy operation through a pair of two QIODevices static_cast<QBuffer*>(io.data())->setData(fullMessageCombiner->data()); io->open(QIODevice::ReadOnly); return io; }
/** Perform Cmtlr14Step test step. This test verifies that the SUPL Protocol Module correctly handles a SUPL INIT with notification element == Privacy Override (Stealth mode) Expected behaviour is for the message to be silently dropped. @return TVerdict test result code */ TVerdict Cmtlr14Step::doTestStepL() { INFO_PRINTF1(_L("\t********************************************************************")); INFO_PRINTF1(_L("\tMTLR - notification = privacyOverride ")); INFO_PRINTF1(_L("\t********************************************************************")); INFO_PRINTF1(_L("- START -")); // Initiate MT-LR // Generate received SUPL INIT message (test message content #9) TPtr8 messagePtr(iReceiveBuffer.Des()); TInt err = iSuplInitGenerator->GenerateSuplInitL(9, messagePtr); if (err != KErrNone) { SetTestStepResult(EFail); return TestStepResult(); } // Inject SUPL INIT using the SUPL Push API INFO_PRINTF1(_L("\tLBS (SuplPush) -> OnSuplInit()")); TLbsSuplPushRequestId reqId = 12345; TPtrC8 message(messagePtr); iSuplPush->SuplInit(reqId, message, 0); // Check if more observer activity takes place if (iGatewayObserver->IsMoreObserverActivity() || iNetworkObserver->IsMoreObserverActivity()) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("- END -")); SetTestStepResult(EPass); return TestStepResult(); }
/** Perform Cmtlr5Step test step. This test checks that the Protocol Module handles the case in which LBS requests further assistance data. 2 data items are requested - one is included in the rrlp assistance data message, and one is included in the rrlp measure position request. @return TVerdict test result code */ TVerdict Cmtlr5Step::doTestStepL() { INFO_PRINTF1(_L("\t********************************************************************")); INFO_PRINTF1(_L("\tMTLR basic procedure - not all requested assistance data delivered...")); INFO_PRINTF1(_L("\t********************************************************************")); INFO_PRINTF1(_L("- START -")); // Initiate MT-LR // Generate received SUPL INIT message (test message content #0) TPtr8 messagePtr(iReceiveBuffer.Des()); TInt err = iSuplInitGenerator->GenerateSuplInitL(0, messagePtr); if (err != KErrNone) { SetTestStepResult(EFail); return TestStepResult(); } // Inject SUPL INIT using the SUPL Push API INFO_PRINTF1(_L("\tLBS (SuplPush) -> OnSuplInit()")); TLbsSuplPushRequestId reqId = 12345; TPtrC8 message(messagePtr); iSuplPush->SuplInit(reqId, message, 0); // Check Gateway receives a Privacy request and Location Request INFO_PRINTF1(_L("\tLBS <- ProcessLocationRequest()")); if (EFail == CheckGatewayCallbackL(CSuplGatewayObserver::EProcessLocationRequest) || !iGatewayObserver->IsPrivReqReceived() || MLbsNetworkProtocolObserver::EServiceMobileTerminated != iGatewayObserver->LocType() ) { SetTestStepResult(EFail); return TestStepResult(); } // LBS delivers privacy response INFO_PRINTF1(_L("\tLBS -> RespondPrivacyRequest ()")); CLbsNetworkProtocolBase::TLbsPrivacyResponse privacyResponse = CLbsNetworkProtocolBase::EPrivacyResponseAccepted; iModule->RespondPrivacyRequest(iGatewayObserver->SessionIdValue(), privacyResponse, 0); // Check Connection Manager receives a request for connecting if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::EConnectReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t ConnectionRequest -> NET")); // Simulate the connection is up (inject that event) INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t Connected <- NET")); iNetworkObserver->InjectConnectedIndication(iNetworkObserver->SessionId()); // LBS Requests assistance data INFO_PRINTF1(_L("\tLBS -> RequestAssistanceData ()")); // Request both sets of assitance data. // They'll be delivered in different SUPL POS messages later on in the test. TLbsAsistanceDataGroup dataRequestMask1 = EAssistanceDataBadSatList; TLbsAsistanceDataGroup dataRequestMask2 = EAssistanceDataIonosphericModel; TLbsAsistanceDataGroup dataRequestMask = dataRequestMask1|dataRequestMask2; TLbsNetSessionIdArray dummyIdArray; iModule->RequestAssistanceData(dataRequestMask, dummyIdArray); // Check Connection Manager receives a request to send a SUPL POS INIT // with the assistance data mask requested by the gateway if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::ESendSuplPosInitSendReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL POS INIT -> NET")); // Inject a SUPL POS with some of the Assistance data requested INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL POS - RRLP Assitance Data <- NET")); CSuplMessageBase* suplPos = BuildSuplPosAssitDataL(dataRequestMask1, EFalse); iNetworkObserver->InjectSuplMessage(iNetworkObserver->SessionId(), suplPos); // Check gateway receives the assistance data types requested. INFO_PRINTF1(_L("\tLBS <- ProcessAssistanceData()")); if (EFail == CheckGatewayCallbackL( CSuplGatewayObserver::EProcessAssistanceData) || (dataRequestMask1 & iGatewayObserver->AssistanceDataSetMask() != dataRequestMask1)) { SetTestStepResult(EFail); return TestStepResult(); } // Check the Connection Manager receives a request to send a SUPL POS (ack to assistance data) if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::ESendSuplPosSendReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL POS - RRLP Assistance Data Ack -> NET")); // Inject a SUPL POS (RRLP Measure Position Request) - does not contains missing assistance data INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL POS - RRLP Measure Position Request <- NET")); suplPos = BuildSuplPosRequestL(TPositionModuleInfo::ETechnologyTerminal | TPositionModuleInfo::ETechnologyAssisted, dataRequestMask2); iNetworkObserver->InjectSuplMessage(iNetworkObserver->SessionId(), suplPos); // Check gateway receives the assistance data types requested. INFO_PRINTF1(_L("\tLBS <- ProcessAssistanceData()")); if (EFail == CheckGatewayCallbackL( CSuplGatewayObserver::EProcessAssistanceData) || (dataRequestMask2 & iGatewayObserver->AssistanceDataSetMask() != dataRequestMask2)) { SetTestStepResult(EFail); return TestStepResult(); } // Check gateway receives a location request (due to the RRLP Measure Position Request) INFO_PRINTF1(_L("\tLBS <- ProcessLocationRequest()")); if (EFail == CheckGatewayCallbackL( CSuplGatewayObserver::EProcessLocationRequest) || MLbsNetworkProtocolObserver::EServiceMobileTerminated != iGatewayObserver->LocType()) { SetTestStepResult(EFail); return TestStepResult(); } // Fake LBS sending results (position) to SPM INFO_PRINTF1(_L("\tLBS -> RespondLocationRequest")); TReal64 latitude = 10; TReal64 longitude = 0; TReal32 HorAccuracy = 10; TPositionInfo mobilePosInfo; TTime utcTime; utcTime.UniversalTime(); TCoordinate coor(latitude,longitude); TPosition mobilePos(TLocality(coor,HorAccuracy),utcTime); mobilePosInfo.SetPosition(mobilePos); iModule->RespondLocationRequest(iGatewayObserver->SessionIdValue(),KErrNone,mobilePosInfo); // Check the Connection Manager receives a request to send a SUPL POS (RRLP Measure Position Response) if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::ESendSuplPosSendReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL POS - RRLP Measure Position Response -> NET")); // Inject a SUPL END (without position) INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL END <- NET")); CSuplMessageBase* suplEnd = BuildSuplEndL(EFalse); iNetworkObserver->InjectSuplMessage(iNetworkObserver->SessionId(), suplEnd); // Check gateway session completed if (EFail == CheckGatewayCallbackL( CSuplGatewayObserver::EProcessSessionComplete)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\tLBS <- ProcessSessionComplete")); // Check Connection Manager receives a disconnection request if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::EDisconnectReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t DisconnectRequest -> NET")); // Check if more observer activity takes place if (iGatewayObserver->IsMoreObserverActivity() || iNetworkObserver->IsMoreObserverActivity()) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("- END -")); SetTestStepResult(EPass); return TestStepResult(); }
/** Perform Cmtlr24Step test step. This test verifies that the SUPL Protocol Module correctly handles an MT-LR Network requested Locate Terminal Based sequence (assistance data delivered via an RRLP payload). @return TVerdict test result code */ TVerdict Cmtlr24Step::doTestStepL() { INFO_PRINTF1(_L("\t********************************************************************")); INFO_PRINTF1(_L("\tMTLR - LBS sends response before connection is established)")); INFO_PRINTF1(_L("\t********************************************************************")); INFO_PRINTF1(_L("- START -")); // Initiate MT-LR // Generate received SUPL INIT message (test message content #0) TPtr8 messagePtr(iReceiveBuffer.Des()); TInt err = iSuplInitGenerator->GenerateSuplInitL(0, messagePtr); if (err != KErrNone) { SetTestStepResult(EFail); return TestStepResult(); } // Inject SUPL INIT using the SUPL Push API INFO_PRINTF1(_L("\tLBS (SuplPush) -> OnSuplInit()")); TLbsSuplPushRequestId reqId = 12445; TPtrC8 message(messagePtr); iSuplPush->SuplInit(reqId, message, 0); // Check Gateway receives a Privacy request and Location Request INFO_PRINTF1(_L("\tLBS <- ProcessLocationRequest()")); if (EFail == CheckGatewayCallbackL(CSuplGatewayObserver::EProcessLocationRequest) || !iGatewayObserver->IsPrivReqReceived() || MLbsNetworkProtocolObserver::EServiceMobileTerminated != iGatewayObserver->LocType() ) { SetTestStepResult(EFail); return TestStepResult(); } // Wait a couple of seconds for user instructions INFO_PRINTF1(_L("...user taking a couple of seconds for privacy response")); if (iGatewayObserver->IsMoreObserverActivity() || iNetworkObserver->IsMoreObserverActivity()) { SetTestStepResult(EFail); return TestStepResult(); } // LBS delivers privacy response INFO_PRINTF1(_L("\tLBS -> PrivacyResponse (EPrivacyResponseAccepted)")); CLbsNetworkProtocolBase::TLbsPrivacyResponse privacyResponse = CLbsNetworkProtocolBase::EPrivacyResponseAccepted; iModule->RespondPrivacyRequest(iGatewayObserver->SessionIdValue(), privacyResponse, 0); // Check Connection Manager receives a request for connecting if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::EConnectReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t ConnectionRequest -> NET")); // **************** Location Response is sent by LBS before the connection is up ***************** // ************************************************************************************************** // Fake LBS sending results (position) to SPM INFO_PRINTF1(_L("\tLBS -> RespondLocationRequest")); TReal64 latitude = 10; TReal64 longitude = 0; TReal32 HorAccuracy = 10; TPositionInfo mobilePosInfo; TTime utcTime; utcTime.UniversalTime(); TCoordinate coor(latitude,longitude); TPosition mobilePos(TLocality(coor,HorAccuracy),utcTime); mobilePosInfo.SetPosition(mobilePos); iModule->RespondLocationRequest(iGatewayObserver->SessionIdValue(),KErrNone,mobilePosInfo); // Wait a couple of seconds for connection activation INFO_PRINTF1(_L("...connection taking a couple of seconds to activate")); if (iGatewayObserver->IsMoreObserverActivity() || iNetworkObserver->IsMoreObserverActivity()) { SetTestStepResult(EFail); return TestStepResult(); } // Simulate the connection is up (inject that event) INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t Connected <- NET")); iNetworkObserver->InjectConnectedIndication(iNetworkObserver->SessionId()); // Check Connection Manager receives a request to send a SUPL POS INIT // with the assistance data mask requested by the gateway if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::ESendSuplPosInitSendReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL POS INIT -> NET")); // Inject a SUPL END (without position) INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL END <- NET")); CSuplMessageBase* suplEnd = BuildSuplEndL(EFalse); iNetworkObserver->InjectSuplMessage(iNetworkObserver->SessionId(), suplEnd); // Check gateway session completed if (EFail == CheckGatewayCallbackL( CSuplGatewayObserver::EProcessSessionComplete)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\tLBS <- ProcessSessionComplete")); // Check Connection Manager receives a disconnection request if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::EDisconnectReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t DisconnectRequest -> NET")); // Check if more observer activity takes place if (iGatewayObserver->IsMoreObserverActivity() || iNetworkObserver->IsMoreObserverActivity()) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("- END -")); SetTestStepResult(EPass); return TestStepResult(); }
/** Perform Cmtlr9Step test step. This test verifies that the SUPL Protocol Module correctly handles an MT-LR Network requested Locate Terminal Based sequence (assistance data delivered via an RRLP payload). @return TVerdict test result code */ TVerdict Cmtlr9Step::doTestStepL() { INFO_PRINTF1(_L("\t********************************************************************")); INFO_PRINTF1(_L("\tMTLR basic procedure followed - position method == NO POSITION")); INFO_PRINTF1(_L("\t********************************************************************")); INFO_PRINTF1(_L("- START -")); // Initiate MT-LR // Generate received SUPL INIT message (test message content #5) TPtr8 messagePtr(iReceiveBuffer.Des()); TInt err = iSuplInitGenerator->GenerateSuplInitL(5, messagePtr); if (err != KErrNone) { SetTestStepResult(EFail); return TestStepResult(); } // Inject SUPL INIT using the SUPL Push API INFO_PRINTF1(_L("\tLBS (SuplPush) -> OnSuplInit()")); TLbsSuplPushRequestId reqId = 12345; TPtrC8 message(messagePtr); iSuplPush->SuplInit(reqId, message, 0); // Check Gateway receives a Privacy request INFO_PRINTF1(_L("\tLBS <- ProcessPrivacyRequest()")); if (EFail == CheckGatewayCallbackL(CSuplGatewayObserver::EProcessPrivacyRequest)) { SetTestStepResult(EFail); return TestStepResult(); } // LBS delivers privacy response INFO_PRINTF1(_L("\tLBS -> RespondPrivacyRequest ()")); CLbsNetworkProtocolBase::TLbsPrivacyResponse privacyResponse = CLbsNetworkProtocolBase::EPrivacyResponseAccepted; iModule->RespondPrivacyRequest(iGatewayObserver->SessionIdValue(), privacyResponse, 0); // Check Connection Manager receives a request for connecting if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::EConnectReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t ConnectionRequest -> NET")); // Simulate the connection is up (inject that event) INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t Connected <- NET")); iNetworkObserver->InjectConnectedIndication(iNetworkObserver->SessionId()); // Check Connection Manager receives a request to send a SUPL END with status code "User Accepted" // with the assistance data mask requested by the gateway if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::ESendSuplEndSendReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL END -> NET")); // Check gateway session completed if (EFail == CheckGatewayCallbackL( CSuplGatewayObserver::EProcessSessionComplete)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\tLBS <- ProcessSessionComplete")); // Check Connection Manager receives a disconnection request if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::EDisconnectReq)) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t DisconnectRequest -> NET")); // Check if more observer activity takes place if (iGatewayObserver->IsMoreObserverActivity() || iNetworkObserver->IsMoreObserverActivity()) { SetTestStepResult(EFail); return TestStepResult(); } INFO_PRINTF1(_L("- END -")); SetTestStepResult(EPass); return TestStepResult(); }