bool OutPacket::fill(unsigned char *buf, int *len) { int headerLen = 0, bodyLen=0, encryptedLen = 0; unsigned char *bodyBuf; unsigned char *encrypted; bodyBuf = (unsigned char *)malloc(MAX_PACKET_SIZE* sizeof(unsigned char)); encrypted = (unsigned char *)malloc(MAX_PACKET_SIZE * sizeof(unsigned char)); headerLen = putHead(buf); bodyLen = putBody(bodyBuf); encryptedLen = bodyLen; encryptBody(bodyBuf, bodyLen, encrypted, &encryptedLen); memcpy(buf+headerLen, encrypted, encryptedLen); buf[ headerLen + encryptedLen ] = QQ_PACKET_TAIL; (*len) = headerLen + encryptedLen + 1; if(!isUDP()) { short tmp2 = htons(*len); memcpy(buf, &tmp2, 2); } free(bodyBuf); free(encrypted); return true; }
void CSAEXAppUi::CmdEncryptDrafts() { TMsvSelectionOrdering order( KMsvNoGrouping, EMsvSortByDate, ETrue ); CMsvEntry* folderEntry = CMsvEntry::NewL( *iSession,KMsvDraftEntryId, order ); CleanupStack::PushL( folderEntry ); CMsvEntrySelection* folderSelection = folderEntry->ChildrenWithTypeL( KUidMsvMessageEntry ); CleanupStack::PushL( folderSelection ); CMsvEntry *msgEntry; const TInt count( folderSelection->Count() ); TMsvId msgEntryId = ( *folderSelection )[ count-1 ]; msgEntry=iSession->GetEntryL( msgEntryId); if( msgEntry!= KErrNone ) { CleanupStack::PushL(msgEntry); //1 CParaFormatLayer* paraLayer = CParaFormatLayer::NewL(); CleanupStack::PushL(paraLayer); //2 CCharFormatLayer* charLayer = CCharFormatLayer::NewL(); CleanupStack::PushL(charLayer); //3 CRichText* cipherBody = CRichText::NewL(paraLayer, charLayer); CRichText * plainBody=CRichText::NewL(paraLayer, charLayer); CleanupStack::PushL(cipherBody); //4 CleanupStack::PushL(plainBody); //5 CMsvStore* store= msgEntry->ReadStoreL(); CleanupStack::PushL(store); //6 store->RestoreBodyTextL(*plainBody); CSendAs* iSendAs=NULL; iSendAs = CSendAs::NewL(*this); if(iSendAs) { CleanupStack::PushL(iSendAs); iSendAs->SetMtmL(KUidMsgTypeSMS); if(iSendAs->AvailableServices().Count()<1) { CEikonEnv::Static()->InfoMsg(_L("No SMS services available.")); User::Leave(KErrNotFound); } iSendAs->SetService(0); User::LeaveIfError(iSendAs->QueryMessageCapability(KUidMtmQueryCanSendMsg, EFalse)); User::LeaveIfError(iSendAs->QueryMessageCapability(KUidMtmQueryMaxBodySize, ETrue)); iSendAs->CreateMessageL(); iSendAs->AddRecipientL( iRecipient->Des() ); encryptBody(plainBody,cipherBody); iSendAs->SetBodyL(*cipherBody); User::LeaveIfError(iSendAs->ValidateMessage()); iSendAs->SaveMessageL(ETrue); // message is saved into Outbox(drafts) CleanupStack::PopAndDestroy(1,iSendAs);//iSendAs } CleanupStack::PopAndDestroy(6, msgEntry); //~6 } CleanupStack::PopAndDestroy( 2 ); }