
Originally Posted by
Nitesh Bhardwaj
Nitesh, i m using this approach but not compile the code, wher i put it in my code.
Code:
void CSendSms::SendSocketSms(TPtrC msgbody,TPtrC phnumber)
{
RSocketServ sockServ;
RSocket socket;
User::LeaveIfError(sockServ.Connect());
CleanupClosePushL(sockServ);
User::LeaveIfError(socket.Open(sockServ, KSMSAddrFamily, KSockDatagram, KSMSDatagramProtocol));
CleanupClosePushL(socket);
TSmsAddr smsaddr;
smsaddr.SetSmsAddrFamily(ESmsAddrSendOnly);
User::LeaveIfError(socket.Bind(smsaddr));
RFs fileSession;
User::LeaveIfError(fileSession.Connect());
CleanupClosePushL(fileSession);
CSmsBufferBase *buffer = CSmsBuffer::NewL();
CleanupStack::PushL(buffer);
buffer->InsertL(0, msgbody);
CSmsMessage *cSmsMessage = CSmsMessage::NewL(fileSession, CSmsPDU::ESmsSubmit, buffer);
CleanupStack::Pop(buffer);//cSmsMessage takes ownership
CleanupStack::PushL(cSmsMessage);
cSmsMessage->SetToFromAddressL(phnumber);
CheckSmsFlag(17);
cSmsMessage->SmsPDU().SetServiceCenterAddressL(myservicecenter);
RSmsSocketWriteStream writestream(socket);
writestream << *cSmsMessage; // remember, this can Leave!
writestream.CommitL();
TRequestStatus status;
TPckgBuf<TUint> sendBuffer;
socket.Ioctl(KIoctlSendSmsMessage, status, &sendBuffer, KSolSmsProv);
User::WaitForRequest(status);
socket.Close();
sockServ.Close(); /////////close to make again the connection
CleanupStack::PopAndDestroy(cSmsMessage);
CleanupStack::PopAndDestroy(3);//fileSession
}