TBool CSmsReplyToStep::WatchersAlreadyRunningL() { RSocketServ server; RSocket socket; User::LeaveIfError(server.Connect()); CleanupClosePushL(server); // test if it's there... TProtocolDesc protoInfo; TProtocolName protocolname; protocolname.Copy(KSmsDatagram); User::LeaveIfError(server.FindProtocol(protocolname,protoInfo)); User::LeaveIfError(socket.Open(server, protoInfo.iAddrFamily, protoInfo.iSockType, protoInfo.iProtocol)); CleanupClosePushL(socket); TSmsAddr addr; addr.SetSmsAddrFamily(ESmsAddrRecvAny); TInt err = socket.Bind(addr); CleanupStack::Pop(2, &server); socket.CancelAll(); socket.Close(); server.Close(); return (err == KErrAlreadyExists); }
TBool TestFrameworkActionsUtils::CheckIfSmsWatcherAlreadyRunningL() { RSocketServ socketServer; RSocket socket; User::LeaveIfError(socketServer.Connect()); CleanupClosePushL(socketServer); TProtocolDesc protoInfo; TProtocolName protocolname; protocolname.Copy(KSmsDatagram); User::LeaveIfError(socketServer.FindProtocol(protocolname,protoInfo)); User::LeaveIfError(socket.Open(socketServer, protoInfo.iAddrFamily, protoInfo.iSockType, protoInfo.iProtocol)); CleanupClosePushL(socket); TSmsAddr addr; addr.SetSmsAddrFamily(ESmsAddrRecvAny); TInt err = socket.Bind(addr); socket.CancelAll(); CleanupStack::PopAndDestroy(2); //socketServer, socket return (err == KErrAlreadyExists); }
void CSmsLockEngine::Start() { ChangeStatus(EReadSMS); //ChangeStatus(EDeleteSMS); // Close the socket as it may already be open. iSocketServer.Close(); iSocket.Close(); User::LeaveIfError(iSocketServer.Connect()); // Open a socket User::LeaveIfError(iSocket.Open(iSocketServer, KSMSAddrFamily, KSockDatagram, KSMSDatagramProtocol)); // Set the pattern to search for in incoming SMS messages. Messages which do not have our // signature will be consumed by the Messaging Application. TSmsAddr smsAddr; smsAddr.SetSmsAddrFamily(ESmsAddrMatchText); smsAddr.SetTextMatch(KGdpSmsHeaderTag); User::LeaveIfError(iSocket.Bind(smsAddr)); // Wait for incoming messages iOctlResult()= KSockSelectRead; iSocket.Ioctl(KIOctlSelect, iStatus, &(iOctlResult), KSOLSocket); SetActive(); }
TVerdict CSmsCapsSmsSetLocalName::doTestStepL() { RSocket socket; TInt ret=socket.Open(iSocketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol); if(ret!=KErrNone) User::Leave(ret); CleanupClosePushL(socket); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrRecvAny); ret=socket.Bind(smsaddr); if(RProcess().HasCapability(ECapabilityNetworkServices)) { TEST(ret != KErrPermissionDenied); } else { TEST(ret == KErrPermissionDenied); } CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; }
TVerdict CSmsCapsSmsIoctlDeleteSms::doTestStepL() { RSocket socket; TRequestStatus status; TInt ret=socket.Open(iSocketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol); if(ret!=KErrNone) User::Leave(ret); CleanupClosePushL(socket); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrRecvAny); ret=socket.Bind(smsaddr); if(RProcess().HasCapability(ECapabilityWriteUserData, ECapabilityNetworkServices) && RProcess().HasCapability(ECapabilityReadUserData)) { TESTL(ret != KErrPermissionDenied); } else { // skip this one CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; } // Create message with SRR _LIT(KText,"This is a simple SMS!"); CSmsMessage* msg=CreateSmsMessageL(KText,TSmsDataCodingScheme::ESmsAlphabet7Bit); CleanupStack::PushL(msg); RSmsSocketWriteStream writestream(socket); writestream << *msg; writestream.CommitL(); CleanupStack::PopAndDestroy(msg); socket.Ioctl(KIoctlDeleteSmsMessage, status, NULL, KSolSmsProv); User::WaitForRequest(status); if(RProcess().HasCapability(ECapabilityWriteUserData)) { TEST(status.Int() != KErrPermissionDenied); } else { TEST(status.Int() == KErrPermissionDenied); } CleanupStack::PopAndDestroy(&socket); return TestStepResult(); }
TVerdict CSmsCapsSmsIoctlReadParamsSms::doTestStepL() { TInt testNo=13; RProperty testNumberProperty; User::LeaveIfError(testNumberProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumber)); CleanupClosePushL(testNumberProperty); TRequestStatus status; testNumberProperty.Subscribe(status); User::LeaveIfError(testNumberProperty.Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,testNo)); User::WaitForRequest(status); TEST(status.Int() == KErrNone); TInt testNumberCheck; User::LeaveIfError(testNumberProperty.Get(testNumberCheck)); if (testNo != testNumberCheck) User::Leave(KErrNotFound); CleanupStack::PopAndDestroy(&testNumberProperty); RSocket socket; TInt ret=socket.Open(iSocketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol); if(ret!=KErrNone) User::Leave(ret); CleanupClosePushL(socket); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrLocalOperation); ret=socket.Bind(smsaddr); if(RProcess().HasCapability(ECapabilityNetworkServices)) { TESTL(ret != KErrPermissionDenied); } else { // skip this one CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; } socket.Ioctl(KIoctlReadSmsParams,status,NULL,KSolSmsProv); User::WaitForRequest(status); TEST(status.Int() != KErrPermissionDenied); CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; }
/** * Informs protocol whether client confirms received message */ TInt CWapProtocolObserver::SmsAddrIsDuplicate(const MSmsMessageObserver* aObserver,const TSmsAddr& aAddr)const { OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPPROTOCOLOBSERVER_SMSADDRISDUPLICATE_1, "CWapProtocolObserver::SmsAddrIsDuplicate()"); if(this == aObserver)return EFalse; if(aAddr.SmsAddrFamily() == ESmsAddrApplication8BitPort || ( aAddr.SmsAddrFamily() == ESmsAddrApplication16BitPort && aAddr.Port() > 255)) { TWapAddr wapAddr; wapAddr.SetPort(aAddr.Port()); if(iWapSmsProtocol->AddrAlreadyUsedByWAP(wapAddr,NULL) != KErrNone) return ETrue; else return EFalse; } return iSmsAddr==aAddr; } // CWapProtocolObserver::SmsAddrIsDuplicate
TVerdict CSmsCapsSmsIoctlEnumerateSms::doTestStepL() { RSocket socket; TRequestStatus status; TInt ret=socket.Open(iSocketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol); CleanupClosePushL(socket); if(ret!=KErrNone) User::Leave(ret); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrRecvAny); ret=socket.Bind(smsaddr); if(RProcess().HasCapability(ECapabilityWriteUserData, ECapabilityNetworkServices) && RProcess().HasCapability(ECapabilityReadUserData)) { TESTL(ret != KErrPermissionDenied); } else { // skip this one CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; } TPckgBuf<TUint> sbuf; sbuf()=0; // test cancel first - due to Lubbock problems canceled out socket.Ioctl(KIoctlEnumerateSmsMessages,status,&sbuf, KSolSmsProv); User::WaitForRequest(status); if(RProcess().HasCapability(ECapabilityReadUserData)) { TEST(status.Int() != KErrPermissionDenied); } else { TEST(status.Int() == KErrPermissionDenied); } CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; }
void CSMSReceiver::SetupSocketsL(const TDesC8& aPattern) /** Bind to socket and specify pattern match so that only incoming messages matching the pattern are intercepted. Other messages will be caught by the messaging component. @param aPattern buffer pattern match at beginning of incoming SMS message. Only SMS messages containing this Pattern match will be intercepted. */ { TSmsAddr smsAddr; smsAddr.SetSmsAddrFamily(ESmsAddrMatchText); smsAddr.SetTextMatch(aPattern); // smsAddr.SetSmsAddrFamily(ESmsAddrApplication16BitPort); // smsAddr.SetPort(111); //kjava»½ÐÑ¶Ë¿Ú User::LeaveIfError(iSocket.Bind(smsAddr)); }
void CSmsCancelTest::ConstructL() { iSmsTest.SetLogToFile(); iSelection = new (ELeave) CMsvEntrySelection(); iSmsTest.iMsvSession->AddObserverL(*this); CActiveScheduler::Add(this); User::LeaveIfError(iSocketServ.Connect()); TProtocolDesc protoinfo; TProtocolName protocolname(KSmsDatagram); User::LeaveIfError(iSocketServ.FindProtocol(protocolname,protoinfo)); User::LeaveIfError(iSocket.Open(iSocketServ,protoinfo.iAddrFamily,protoinfo.iSockType,protoinfo.iProtocol)); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrSendOnly); User::LeaveIfError(iSocket.Bind(smsaddr)); }
LOCAL_C void doMainL() { RSocketServ serv; RSocket socket; User::LeaveIfError(serv.Connect()); CleanupClosePushL(serv); TProtocolDesc protoinfo; TProtocolName protocolname(KSmsDatagram); User::LeaveIfError(serv.FindProtocol(protocolname,protoinfo)); User::LeaveIfError(socket.Open(serv,protoinfo.iAddrFamily,protoinfo.iSockType,protoinfo.iProtocol)); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrSendOnly); User::LeaveIfError(socket.Bind(smsaddr)); CleanupClosePushL(socket); CActiveScheduler* iScheduler = new (ELeave) CActiveScheduler; CleanupStack::PushL(iScheduler); CActiveScheduler::Install( iScheduler ); CSmsTestUtils* smsTest = CSmsTestUtils::NewL(test); CleanupStack::PushL(smsTest); TInt nextTest = 0; smsTest->NotifySaPhoneOnL(); smsTest->WaitForInitializeL(); CSmsSendNbsTest* nbsTest = CSmsSendNbsTest::NewL(*smsTest, KNbsScript, nextTest); CleanupStack::PushL(nbsTest); nbsTest->StartL(); CleanupStack::PopAndDestroy(3); //SmsTest, iScheduler CleanupStack::PopAndDestroy(&socket); CleanupStack::PopAndDestroy(&serv); }
void CSMSSender::CreateSMSMessageL(const TDesC& aText, const TDesC& aAddress) /** Prepare SMS specific objects ready to send via ESOCK @param aText buffer containing ascii contents of message to send @param aAddress buffer with telephone number of SMS receiver */ { #ifndef __WINS__ TSmsAddr smsAddr; smsAddr.SetSmsAddrFamily(ESmsAddrSendOnly); smsAddr.SetPort(smsAddr.Port() + 1);//ycf __LOGSTR_TOFILE("sockent bind"); iSocket.Bind(smsAddr); CSmsBuffer* smsBuffer = CSmsBuffer::NewL(); //CleanupStack::PushL(smsBuffer) is NOT used because CSmsMessage takes ownership of our buffer :-) CSmsMessage* smsMsg = CSmsMessage::NewL(iFs, CSmsPDU::ESmsSubmit, smsBuffer); CleanupStack::PushL(smsMsg); TSmsUserDataSettings smsSettings; smsSettings.SetAlphabet(TSmsDataCodingScheme::ESmsAlphabetUCS2); smsSettings.SetTextCompressed(EFalse); smsMsg->SetUserDataSettingsL(smsSettings); TBuf<KMaxAddressSize> toAddress; toAddress.Copy(aAddress); smsMsg->SetToFromAddressL(toAddress); //Get service centre address. // The method used here assumes the SMS settings are provisioned, which is true in known cases. // There are alternative partner-only APIs, however this allow this source to be kept public #ifdef EKA2 CSmsSettings* smsSCSettings = CSmsSettings::NewL(); CleanupStack::PushL(smsSCSettings); CSmsAccount* smsAccount=CSmsAccount::NewLC(); smsAccount->LoadSettingsL(*smsSCSettings); // index of the default service centre address for this service TInt defIndex; User::LeaveIfError(defIndex = smsSCSettings->DefaultServiceCenter()); // Get the service center address CSmsServiceCenter& scAddr = smsSCSettings->GetServiceCenter(defIndex); TPtrC theAddress=scAddr.Address(); HBufC* serviceCentreAddress=HBufC::NewLC(theAddress.Length()); *serviceCentreAddress=theAddress; smsMsg->SmsPDU().SetServiceCenterAddressL(*serviceCentreAddress); CleanupStack::PopAndDestroy(serviceCentreAddress);// CleanupStack::PopAndDestroy(smsAccount); CleanupStack::PopAndDestroy(smsSCSettings); #else TMsvId serviceId; CObserver* pObserver = new (ELeave) CObserver(); CleanupStack::PushL(pObserver); CMsvSession* pSession = CMsvSession::OpenSyncL(*pObserver); CleanupStack::PushL(pSession); TSmsUtilities::ServiceIdL(*pSession, serviceId, KUidMsgTypeSMS); CMsvEntry* service = pSession->GetEntryL(serviceId); CleanupStack::PushL(service); CMsvStore* msvstore = service->ReadStoreL(); CleanupStack::PushL(msvstore); CSmsSettings* smsSCSettings = CSmsSettings::NewL(); CleanupStack::PushL(smsSCSettings); smsSCSettings->RestoreL(*msvstore); TInt defIndex; User::LeaveIfError(defIndex = smsSCSettings->DefaultSC()); defIndex = smsSCSettings->DefaultSC(); // Get the default service center address CSmsNumber& scAddr = smsSCSettings->SCAddress(defIndex); TPtrC theAddress=scAddr.Address(); HBufC* serviceCentreAddress=HBufC::NewLC(theAddress.Length()); *serviceCentreAddress=theAddress; smsMsg->SmsPDU().SetServiceCenterAddressL(*serviceCentreAddress); CleanupStack::PopAndDestroy(serviceCentreAddress);// CleanupStack::PopAndDestroy(smsSCSettings); //smsSettings CleanupStack::PopAndDestroy(msvstore); CleanupStack::PopAndDestroy(service); CleanupStack::PopAndDestroy(pSession); CleanupStack::PopAndDestroy(pObserver); #endif //convert to wide HBufC* payload = HBufC::NewL(aText.Length()); CleanupStack::PushL(payload); TPtr pPayload=payload->Des(); pPayload.Copy(aText); //copy from narrow to wide and convert smsBuffer->InsertL(0, pPayload); //copies payload RSmsSocketWriteStream writeStream(iSocket); CleanupClosePushL(writeStream); writeStream << *smsMsg; // remember << operator _CAN_ leave __LOGSTR_TOFILE("write stream commit"); writeStream.CommitL(); CleanupStack::PopAndDestroy(&writeStream); CleanupStack::PopAndDestroy(2);//smsMsg, payload #endif }
TVerdict CSmsCapsSmsIoctlWriteParamsSms::doTestStepL() { RSocket socket; TRequestStatus status; TInt ret=socket.Open(iSocketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol); if(ret!=KErrNone) User::Leave(ret); CleanupClosePushL(socket); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrLocalOperation); ret=socket.Bind(smsaddr); if(RProcess().HasCapability(ECapabilityWriteUserData, ECapabilityNetworkServices) && RProcess().HasCapability(ECapabilityReadUserData)) { TESTL(ret != KErrPermissionDenied); } else { // skip this one CleanupStack::PopAndDestroy(&socket); return TestStepResult(); } CMobilePhoneSmspList* smspList=CMobilePhoneSmspList::NewL(); CleanupStack::PushL(smspList); RMobileSmsMessaging::TMobileSmspEntryV1 entryToTsy; entryToTsy.iText = SMSCAPS_STORE_TEXT1; entryToTsy.iValidParams = SMSCAPS_STORE_VALID_PARAMS1; entryToTsy.iDestination.iTypeOfNumber = SMSCAPS_MESSAGE_DESTINATION_TON_0; entryToTsy.iDestination.iNumberPlan = SMSCAPS_MESSAGE_DESTINATION_NP_0; entryToTsy.iDestination.iTelNumber = SMSCAPS_MESSAGE_DESTINATION_TEL_NUMBER_0; entryToTsy.iValidityPeriod = SMSCAPS_STORE_VALIDITY1; entryToTsy.iServiceCentre.iTypeOfNumber = SMSCAPS_MESSAGE_GSMSERVICECENTRE_TON_1; entryToTsy.iServiceCentre.iNumberPlan = SMSCAPS_MESSAGE_GSMSERVICECENTRE_NP_1; entryToTsy.iServiceCentre.iTelNumber = SMSCAPS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_1; entryToTsy.iProtocolId = SMSCAPS_STORE_PID1; entryToTsy.iDcs = SMSCAPS_STORE_DCS1; entryToTsy.iIndex = 0; smspList->AddEntryL(entryToTsy); RSmsSocketWriteStream writestream(socket); TRAP(ret,writestream << *smspList); User::LeaveIfError(ret); TRAP(ret,writestream.CommitL()); User::LeaveIfError(ret); socket.Ioctl(KIoctlWriteSmsParams,status,NULL, KSolSmsProv); User::WaitForRequest(status); if(RProcess().HasCapability(ECapabilityWriteDeviceData)) { TEST(status.Int() != KErrPermissionDenied); } else { TEST(status.Int() == KErrPermissionDenied); } CleanupStack::PopAndDestroy(smspList); CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; }
TVerdict CSmsCapsSmsIoctlCompleteReadParamsSms::doTestStepL() { TInt ret; // // Set TSY to the test case that has read message // #TestSimpleRxL in tsmsprt-config.txt // TInt testNo=13; RProperty testNumberProperty; User::LeaveIfError(testNumberProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumber)); CleanupClosePushL(testNumberProperty); TRequestStatus status; testNumberProperty.Subscribe(status); User::LeaveIfError(testNumberProperty.Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,testNo)); User::WaitForRequest(status); TEST(status.Int() == KErrNone); TInt testNumberCheck; User::LeaveIfError(testNumberProperty.Get(testNumberCheck)); if (testNo != testNumberCheck) User::Leave(KErrNotFound); CleanupStack::PopAndDestroy(&testNumberProperty); RSocket socket; ret=socket.Open(iSocketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol); User::LeaveIfError(ret); CleanupClosePushL(socket); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrLocalOperation); ret=socket.Bind(smsaddr); if(RProcess().HasCapability(ECapabilityNetworkServices)) { TESTL(ret != KErrPermissionDenied); } else { // skip this one CleanupStack::PopAndDestroy(&socket); return TestStepResult(); } // Small delay to allow the SMS Stack PRT to initialise... User::After(1*1000000); RSmsSocketReadStream readstream(socket); //Create the smspList CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL(); CleanupStack::PushL(smspList); // Make read SMS params request to the SMS Stack. socket.Ioctl(KIoctlReadSmsParams,status,NULL, KSolSmsProv); User::WaitForRequest(status); // Read list from stream and make acknowledgement to the SMS Stack readstream >> *smspList; socket.Ioctl(KIoctlCompleteReadSmsParams, status, NULL,KSolSmsProv); User::WaitForRequest(status); TEST(status.Int() != KErrPermissionDenied); CleanupStack::PopAndDestroy(smspList); CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; }
TVerdict CSmsCapsSmsIoctlWriteSms::doTestStepL() { TInt ret; // // Set TSY to the test case // // TInt testNo=13; RProperty testNumberProperty; User::LeaveIfError(testNumberProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumber)); CleanupClosePushL(testNumberProperty); TRequestStatus status; testNumberProperty.Subscribe(status); User::LeaveIfError(testNumberProperty.Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,testNo)); User::WaitForRequest(status); TEST(status.Int() == KErrNone); TInt testNumberCheck; User::LeaveIfError(testNumberProperty.Get(testNumberCheck)); if (testNo != testNumberCheck) User::Leave(KErrNotFound); CleanupStack::PopAndDestroy(&testNumberProperty); // RSocket socket; ret=socket.Open(iSocketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol); if(ret!=KErrNone) User::Leave(ret); CleanupClosePushL(socket); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrRecvAny); ret=socket.Bind(smsaddr); if(RProcess().HasCapability(ECapabilityWriteUserData, ECapabilityNetworkServices) && RProcess().HasCapability(ECapabilityReadUserData)) { TESTL(ret != KErrPermissionDenied); } else { // skip this one CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; } // Create message with SRR _LIT(KText,"This is a simple SMS!"); CSmsMessage* msg=CreateSmsMessageL(KText,TSmsDataCodingScheme::ESmsAlphabet7Bit); CleanupStack::PushL(msg); // Send message RSmsSocketWriteStream writestream(socket); TRAP(ret,writestream << *msg); User::LeaveIfError(ret); TRAP(ret,writestream.CommitL()); User::LeaveIfError(ret); socket.Ioctl(KIoctlWriteSmsMessage,status,NULL, KSolSmsProv); User::WaitForRequest(status); if(RProcess().HasCapability(ECapabilityWriteUserData)) { TEST(status.Int() != KErrPermissionDenied); } else { TEST(status.Int() == KErrPermissionDenied); } CleanupStack::PopAndDestroy(msg); CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; }
TVerdict CSmsCapsSmsIoctlReadFailedSms::doTestStepL() { TInt ret; // // Set TSY to the test case that has read message // #TestSimpleRxL in tsmsprt-config.txt // TInt testNo=6; RProperty testNumberProperty; User::LeaveIfError(testNumberProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumber)); CleanupClosePushL(testNumberProperty); TRequestStatus status; testNumberProperty.Subscribe(status); User::LeaveIfError(testNumberProperty.Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,testNo)); User::WaitForRequest(status); TEST(status.Int() == KErrNone); TInt testNumberCheck; User::LeaveIfError(testNumberProperty.Get(testNumberCheck)); if (testNo != testNumberCheck) User::Leave(KErrNotFound); CleanupStack::PopAndDestroy(&testNumberProperty); // RSocket socket; ret=socket.Open(iSocketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol); if(ret!=KErrNone) User::Leave(ret); CleanupClosePushL(socket); TSmsAddr smsaddr; smsaddr.SetSmsAddrFamily(ESmsAddrRecvAny); ret=socket.Bind(smsaddr); if(RProcess().HasCapability(ECapabilityWriteUserData, ECapabilityNetworkServices) && RProcess().HasCapability(ECapabilityReadUserData)) { TESTL(ret != KErrPermissionDenied); } else { // skip this one CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; } // CSmsBuffer* buffer=CSmsBuffer::NewL(); CSmsMessage* smsMessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsSubmit,buffer); CleanupStack::PushL(smsMessage); RSmsSocketReadStream readstream(socket); TRequestStatus timerStatus; RTimer timer; timer.CreateLocal(); timer.After(timerStatus, TTimeIntervalMicroSeconds32(20000000)); TPckgBuf<TUint> sbuf; sbuf()=KSockSelectRead; socket.Ioctl(KIOctlSelect, status, &sbuf, KSOLSocket); User::WaitForRequest(timerStatus, status); if(status.Int() != KErrNone) { socket.CancelIoctl(); User::WaitForRequest(status); ret = EFalse; } else { timer.Cancel(); User::WaitForRequest(timerStatus); ret = ETrue; } timer.Close(); if(ret) { TRAP(ret,readstream >> *smsMessage); User::LeaveIfError(ret); socket.Ioctl(KIoctlReadMessageFailed, status, NULL, KSolSmsProv); User::WaitForRequest(status); if(RProcess().HasCapability(ECapabilityReadUserData)) { TEST(status.Int() != KErrPermissionDenied); } else { TEST(status.Int() == KErrPermissionDenied); } } CleanupStack::PopAndDestroy(smsMessage); CleanupStack::PopAndDestroy(&socket); return TestStepResult() ; }