Beispiel #1
0
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;
}
Beispiel #2
0
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 ); 	
									

}