亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? messagetransport.cpp

?? Symbian OS C++ for Mobile Phones v3 Example Code
?? CPP
字號:
// Copyright (c) 2004 - 2007, Symbian Software Ltd. All rights reserved.

#include "messagetransport.h"


// -------- (de)allocation --------

CMessageTransport::CMessageTransport(MTransportObserver& aObserver)
/**
	This c'tor is defined to pass the supplied observer to the superclass.

	@param	aObserver		Observer to notify about transport events.
							This is managed by the CTransport superclass.
 */
:	CTransport(aObserver)
	{
	// empty.
	}

void CMessageTransport::ConstructL(const TDesC& aAddress, TBool aInitListen, TBool aObserverSession)
/**
	Second-phase constructor allocates resources required by this transport.
	Specifically, opens a session with the message server to listen for incoming
	messages.
	
	@param	aAddress		Remote device's address.  The format depends
							on the type of MTM.  E.g., it could be an email
							address or a string containing a telephone number.
	@param	aInitListen		If true, this object should start by listening
							for an incoming payload.  Otherwise, it should
							wait for its owner to send a payload to the remote
							device.
	@param	aObserverSession If true this transport should open a read-only session
							with the message server because it does not need to modify
							message entries directly.  Transports which use the sendas
							server can open a read-only session, whereas those which
							modify the message store directly should not.
 */
	{
	CTransport::ConstructL(aInitListen);

	iRemoteAddress = aAddress.AllocL();
	
	if (aObserverSession)
		iMsvSession = CMsvSession::OpenAsObserverL(*this);
	else
		iMsvSession = CMsvSession::OpenSyncL(*this);
	}

CMessageTransport::~CMessageTransport()
/**
	Closes session with message server and deletes own
	copy of remote device's address.
 */
	{
	delete iMsvSession;
	delete iRemoteAddress;
	}


// -------- implement CTransport --------

void CMessageTransport::DoSendPayloadL()
/**
	Implement CTransport by sending the payload in iPayload.
	The actual sending is delegated to a subclass.  This layer
	inserts a prefix so the payload can be identified by
	the receiving device.  This is required because transports
	can add content to the payload.  E.g., an ISP may append
	an advertisement or a disclaimer to an email.
*/
	{
	TRAN_LOG0(">CMessageTransport::DoSendPayloadL");
	TBuf<KMtPylPrefixLen + KPayloadLen> nativeBuf(KMtPylPrefix);
	nativeBuf.Append(iPayload);
	
	BuildAndSendMessageL(nativeBuf);
	TRAN_LOG0("<CMessageTransport::DoSendPayloadL");
	}

void CMessageTransport::DoLaunchRead()
/**
	Implement CTransport by waiting for an incoming message.
 */
	{
	// If iListening is set then HandleSessionEventL wil accept
	// incoming messages and complete this AO if the payload is found.

	iStatus = KRequestPending;
	// CTransport calls CActive::SetActive
	}


// -------- implement MMsvSessionObserver --------

void CMessageTransport::HandleSessionEventL(
	MMsvSessionObserver::TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3)
/**
	Implement MMsvSessionObserver by interpreting an incoming message as
	a move from the remote device.

	@param	aEvent			Type of messaging event.  This implementation is
							only interested in messages which are created (EMsvEntriesCreated)
							and changed (EMsvEntriesChanged).
	@param	aArg1			In this context, points to a CMsvEntrySelection object
							that describes the added or changed entries.
	@param	aArg2			In this contents, points to a TMsvId value that identifies
							the parent entry.
	@param	aArg3			Not used.
 */
	{
	(void) aArg3;
	TRAN_LOG2(">CMessageTransport::HandleSessionEventL,evt=%d,lst=%d", aEvent, iListening);
	
	// if not listening for response, then ignore this message
	if (! iListening)
		return;
	
	// ignore messages which are being sent or created
	TMsvId parentEntry = *reinterpret_cast<TMsvId*>(aArg2);
	if (parentEntry == KMsvGlobalOutBoxIndexEntryId || parentEntry == KMsvSentEntryId || parentEntry == KMsvDraftEntryId)
		return;
	
	// the messaging server issues a created event when it finds out about
	// an incoming message, and change events as it constructs it.
	if (!(aEvent == EMsvEntriesCreated || aEvent == EMsvEntriesChanged))
		return;

	const CMsvEntrySelection& entries = *reinterpret_cast<const CMsvEntrySelection*>(aArg1);
	TRAPD(r, HandleReceivedMessageL(entries));
	TRAN_LOG1("<CMessageTransport::HandleSessionEventL,hmr=%d", r);
	CompleteSelfIfError(r);
	}

void CMessageTransport::HandleReceivedMessageL(const CMsvEntrySelection& aEntries)
/**
	Helper function for HandleSessionEventL processes messages which has
	arrived in the inbox, looking for a response to the previous move.

	@param	aEntries		Entries which have been created or changed.
 */ 
	{
	TInt entryCount = aEntries.Count();
	for (TInt i = 0; i < entryCount; ++i)
		{
		TMsvId id = aEntries[i];

		TRAPD(r, HandleReceivedMessage2L(id));

		// if the current message is not the response then skip it
		if (r == KErrOandXMessageNotFound || r == KErrNotFound)
			continue;

		// leave if a real error such as OOM occured
		User::LeaveIfError(r);

		// found message so return immediately
		return;
		}

	// could not find message in selection.  This is not actually an error,
	// it just means the message has not been received yet.  Just wait for
	// HandleSessionEventL to be called again.
	}

void CMessageTransport::HandleReceivedMessage2L(TMsvId aEntryId)
/**
	Helper function for HandleReceivedMessageL.
	
	This function can "fail" if it detects an incorrect type of
	message, e.g. an email was received when looking for an SMS,
	or if there is a system-level failure, such as OOM.
	
	If the former case, this leaves with KErrOandXMessageNotFound
	which tells HandleReceivedMessageL to continue iterating through
	the messages.

	If the message is the right type but does not contain the payload
	this function leaves with KErrOandXMessageNotFound.

	If this function does find the payload then it completes this AO
	with KErrNone.

	@param	aEntryId		Identifier of created or changed message.
	@leave	KErrOandXMessageNotFound The supplied message was not
							the expected reply.
 */
	{
	TRAN_LOG1(">CMessageTransport::HandleReceivedMessage2L,entry=0x%x", aEntryId);
	CMsvEntry* msve = iMsvSession->GetEntryL(aEntryId);
	CleanupStack::PushL(msve);

	// the message must have an associated store which contains the
	// body text (SMS and email) or attachment (MMS.)
	const TMsvEntry& e = msve->Entry();
	if (!(e.Complete() && ShouldUseReceivedMtmUid(e.iMtm) && msve->HasStoreL()))
		User::Leave(KErrOandXMessageNotFound);
	
	CMsvStore* msvs = msve->ReadStoreL();
	CleanupStack::PushL(msvs);
	
	// extract the payload from body text or an attachment
	TRAN_LOG0("-CMessageTransport::HandleReceivedMessage2L,extracting");
	HBufC* plainText = ExtractPlainTextLC(*msvs);
	
	// search the body text for the payload prefix
	TInt prefixPos = plainText->Find(KMtPylPrefix);
	TRAN_LOG3("-CMessageTransport::HandleReceivedMessage2L,pfx=%d,plaintext=\"%S\"(%d)", prefixPos, plainText, plainText->Length());
	if ((prefixPos == KErrNotFound) || (prefixPos + KMtPylPrefixLen + KPayloadLen > plainText->Length()))
		User::Leave(KErrOandXMessageNotFound);
	
	// found the payload, so extract it into iPayload
	iPayload.Copy(plainText->Mid(prefixPos + KMtPylPrefixLen, KPayloadLen));
	CleanupStack::PopAndDestroy(3, msve);
	
	// complete this AO to notify the observer from CTransport::RunL
	CompleteSelf(KErrNone);
	}


// -------- partially implement CActive --------

void CMessageTransport::DoCancel()
/**
	Cancel any outstanding read.  Outstanding writes are queued from
	the subclass and so they have to be cancelled there.
 */
	{
	__MT_ASSERT(iListening, EMtDcNotListening);
	iListening = EFalse;
	
	CompleteSelf(KErrCancel);
	}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91综合一区在线观看| 日韩精品一二三| 成人综合在线网站| 国产精品欧美精品| 91看片淫黄大片一级| 一区二区三区日韩欧美| 欧美性生活大片视频| 日韩黄色免费电影| 久久精品视频免费观看| 色婷婷综合激情| 亚洲h在线观看| 亚洲精品在线三区| 99久久久精品免费观看国产蜜| 亚洲欧美电影院| 欧美日韩国产电影| 韩国毛片一区二区三区| 国产精品对白交换视频 | 在线观看av不卡| 午夜精品久久久久影视| 日韩精品一区二区三区视频在线观看 | 亚洲免费电影在线| 欧美日韩国产经典色站一区二区三区| 美女一区二区在线观看| 欧美激情综合在线| 欧美特级限制片免费在线观看| 看电视剧不卡顿的网站| 亚洲人一二三区| 日韩一区二区免费在线电影| 国产麻豆视频一区| 亚洲亚洲精品在线观看| 亚洲精品一线二线三线| 91黄色小视频| 国产suv一区二区三区88区| 亚洲国产精品久久人人爱| 2021国产精品久久精品| 欧美色视频一区| 成人一区二区三区视频在线观看| 亚洲国产wwwccc36天堂| 2022国产精品视频| 欧美精品日韩一本| 波多野结衣精品在线| 日本不卡免费在线视频| 夜夜亚洲天天久久| 欧美经典一区二区| 精品久久久久一区| 欧美日韩精品高清| 色婷婷综合在线| 成人av高清在线| 精品一区二区在线视频| 婷婷成人综合网| 亚洲你懂的在线视频| 久久噜噜亚洲综合| 精品嫩草影院久久| 欧美军同video69gay| 色先锋资源久久综合| 国产91高潮流白浆在线麻豆| 蜜桃av一区二区三区| 午夜视黄欧洲亚洲| 一区二区三区四区激情| 亚洲欧美日韩综合aⅴ视频| 欧美成人video| 欧美日韩成人一区二区| 在线影视一区二区三区| 99re8在线精品视频免费播放| 狠狠网亚洲精品| 麻豆免费精品视频| 午夜精品影院在线观看| 亚洲a一区二区| 午夜伦理一区二区| 中文字幕一区二区三区av| 国产精品免费观看视频| 国产亚洲综合在线| 国产日韩欧美不卡| 欧美经典三级视频一区二区三区| 久久天天做天天爱综合色| 欧美成人精品福利| 久久综合久久鬼色| 国产亚洲欧美在线| 国产精品日产欧美久久久久| 国产色综合一区| 欧美国产欧美亚州国产日韩mv天天看完整 | 国产盗摄精品一区二区三区在线| 九九九精品视频| 久久精品99国产精品| 精品一区精品二区高清| 国产精品中文欧美| 成人免费av在线| 成人黄色国产精品网站大全在线免费观看| 高清不卡在线观看av| 成人黄色大片在线观看| 色噜噜狠狠成人中文综合| 在线一区二区视频| 日韩欧美美女一区二区三区| 国产亚洲污的网站| 国产精品美女视频| 一区二区三区91| 美国一区二区三区在线播放| 寂寞少妇一区二区三区| 成人深夜福利app| 欧美主播一区二区三区| 51精品国自产在线| 久久综合国产精品| 中文字幕在线免费不卡| 亚洲第一av色| 久久精品国产一区二区三区免费看 | 精品国产免费久久 | 日本高清成人免费播放| 91精品国产一区二区三区蜜臀| 精品区一区二区| 日韩理论片网站| 视频一区视频二区中文| 成人午夜在线视频| 日本二三区不卡| 欧美精品一区二区三区在线| 亚洲人精品午夜| 美女脱光内衣内裤视频久久影院| 成人亚洲精品久久久久软件| 欧美在线999| 亚洲精品在线免费播放| 亚洲一区二区三区在线| 精品一区二区久久久| 色视频一区二区| 久久久久国产一区二区三区四区| 一区二区三区四区高清精品免费观看 | 9人人澡人人爽人人精品| 欧美三级韩国三级日本三斤| 久久众筹精品私拍模特| 一区二区高清免费观看影视大全| 激情综合色播五月| 欧美系列在线观看| 日本一二三不卡| 美国一区二区三区在线播放| 91电影在线观看| 国产精品视频一区二区三区不卡| 香蕉加勒比综合久久| 91亚洲午夜精品久久久久久| 久久看人人爽人人| 日本亚洲最大的色成网站www| 99视频精品全部免费在线| 精品国产91乱码一区二区三区| 亚洲一区二区三区自拍| 99精品桃花视频在线观看| 欧美成人女星排名| 日本免费在线视频不卡一不卡二 | 欧美日本一道本在线视频| 国产精品污网站| 国产乱码精品一品二品| 日韩一级欧美一级| 亚洲国产一区二区在线播放| 成人精品国产免费网站| 久久久久久久久岛国免费| 老司机午夜精品| 欧美日韩成人高清| 一区二区三区在线视频观看58| 成人手机电影网| 国产亚洲va综合人人澡精品| 老司机免费视频一区二区三区| 777奇米四色成人影色区| 亚洲第一精品在线| 色噜噜偷拍精品综合在线| 亚洲欧洲www| 97久久精品人人做人人爽| 亚洲三级在线免费观看| hitomi一区二区三区精品| 国产精品久久久久久久久免费丝袜| 国产精品一区在线观看你懂的| 精品国产三级电影在线观看| 久久er精品视频| 精品少妇一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 欧美电影精品一区二区| 精品影视av免费| 国产欧美日韩精品一区| 成人黄色大片在线观看| 亚洲图片激情小说| 在线免费一区三区| 午夜精品久久久久久久99樱桃| 欧美人与z0zoxxxx视频| 午夜视频一区二区| 精品日本一线二线三线不卡| 韩国欧美国产1区| 国产精品夫妻自拍| 欧美性色综合网| 蜜臀精品一区二区三区在线观看| 日韩欧美123| 粉嫩久久99精品久久久久久夜| 一区二区中文视频| 欧美日本乱大交xxxxx| 蜜臀av一区二区| 国产欧美一区二区三区网站 | 久久九九久久九九| 成人av在线影院| 一区二区三区在线影院| 欧美一区二区视频在线观看2020| 六月丁香婷婷色狠狠久久| 日本一区二区免费在线| 欧美亚洲动漫精品| 美国十次综合导航| 亚洲国产成人私人影院tom| 欧美色精品天天在线观看视频|