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

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

?? gdpsms.cpp

?? 《SymbianOSC手機應用開發》源碼
?? CPP
字號:
// gdpsms.cpp
//
// Copyright (c) 2002 Symbian Ltd.  All rights reserved.
//

#include "gdpsms.h"
#include <ImplementationProxy.h>
#include <ecom.h>

CGdpSmsComms::CGdpSmsComms()
	{
	}

CGdpSmsComms::~CGdpSmsComms()
	{
	REComSession::DestroyedImplementation(iDtor_ID_Key);
	delete iSender;
	delete iReceiver;
	delete iResMan;
	}

CGdpSession* CGdpSmsComms::NewL()
	{
	return new (ELeave) CGdpSmsComms();
	}

void CGdpSmsComms::OpenL(MGdpPacketHandler* aHandler)
	{
	RDebug::Print(_L("CGdpSmsComms::OpenL() Called"));
	iResMan = new(ELeave) CGdpSmsResourceManager();
	iResMan->OpenL();
	iSender = new(ELeave) CGdpSmsSender(*iResMan);
	iSender->OpenL(*aHandler);	// Inform handler of successful send
	iReceiver = new(ELeave) CGdpSmsReceiver(*iResMan);
	iReceiver->OpenL(*aHandler);	// route packets up to the handler passed to us
	}


void CGdpSmsComms::SendL(const TDesC8& aAddress, const TDesC8& aData)
	{
	RDebug::Print(_L("CGdpSmsComms::SendL() Called."));
	__ASSERT_ALWAYS(iSender != NULL, GdpUtil::Fault(GdpUtil::EProtocolNotOpen));
	iSender->SendL(aAddress, aData);
	}

TInt CGdpSmsComms::ReceiveAll()
	{
	RDebug::Print(_L("CGdpSmsComms::ReceiveAllL() Called"));
	__ASSERT_ALWAYS(iReceiver != NULL, GdpUtil::Fault(GdpUtil::EProtocolNotOpen));
	iReceiver->ReceiveAllL();
	return KErrNone;
	}

TInt CGdpSmsComms::GetMaxPacketLength() const
	{
	RDebug::Print(_L("CGdpSmsComms::GetMaxPacketLength() Called"));
	return KGdpSmsSduMaxSize;
	}

TBool CGdpSmsComms::IsNetworked() const
	{
	return ETrue;
	}


CGdpSmsStateMachine::CGdpSmsStateMachine(CGdpSmsResourceManager& aResMan)
: CGdpStateMachine(EPriorityStandard), iResMan(aResMan)
	{
	}

#pragma warning(disable:4355) // Disable "C4355: 'this' used in member initialization". 

CGdpSmsSender::CGdpSmsSender(CGdpSmsResourceManager& aResMan)
: CGdpSmsStateMachine(aResMan), 
  iSendMsgState(*this)
	{
	RDebug::Print(_L("CGdpSmsSender::CGdpSmsSender"));
	}
#pragma warning(default:4355) // Turn it back on.



CGdpSmsSender::~CGdpSmsSender()
	{
	Close();
	}
	
void CGdpSmsSender::OpenL(MGdpPacketHandler& aHandler)
	{
	iHandler = &aHandler;
	Reset();
	}
	
void CGdpSmsSender::Close()
	{
	Cancel();
	}
	
void CGdpSmsSender::SendL(const TDesC8& aAddress, const TDesC8& aData)
	{
	RDebug::Print(_L("CGdpSmsSender::SendL() Called."));
	if (IsActive())
		return;	// Don't leave -- just quietly drop the overflow packet

	// Create the SMS message
	CSmsBuffer* smsBuffer = CSmsBuffer::NewL();
	iSmsMsg = CSmsMessage::NewL(iResMan.iFs, CSmsPDU::ESmsSubmit, smsBuffer);

    TSmsUserDataSettings smsSettings;
	smsSettings.SetAlphabet(TSmsDataCodingScheme::ESmsAlphabet8Bit);
	smsSettings.SetTextCompressed(EFalse);
	
	// Convert address to unicode string required by CSmsMessage
	__ASSERT_ALWAYS(aAddress.Length() <= KGdpMaxAddressLen, GdpUtil::Fault(GdpUtil::EBadSendAddress));

	TBuf<KGdpMaxAddressLen> bufAddress;
	bufAddress.Copy(aAddress);
	
	iSmsMsg->SetUserDataSettingsL(smsSettings);
	iSmsMsg->SetToFromAddressL(bufAddress);
	iSmsMsg->SmsPDU().SetServiceCenterAddressL(KServiceCenterNumber); 

	// Insert our SMS pattern header so that our receiver is able to detect
	// the incoming message, and then append the data.
	smsBuffer->InsertL(0, KGdpSmsHeaderTag);

	CSmsPDU& pdu = iSmsMsg->SmsPDU();
	CSmsUserData& userData = pdu.UserData();
	userData.AddInformationElementL(CSmsInformationElement::ESmsIEIReserved, aData);
	
	iRetries = KGdpSmsSendRetries;
	Reset();
	ReEnterCurrentState();	// Kick us off again.
	}
	
void CGdpSmsSender::Reset()
	{
	SetNextState(static_cast<TState*>(&iSendMsgState));
	}
	
CGdpStateMachine::TState* CGdpSmsSender::ErrorOnStateEntry(TInt /*aError*/)
	{
	return NULL;	// Give up!
	}
	
CGdpStateMachine::TState* CGdpSmsSender::ErrorOnStateExit(TInt /*aError*/)
	{
	Reset();
	if (--iRetries < 0)
		return NULL;
	return CurrentState(); // Force re-entry to initial state
	}

CGdpSmsSender::TSenderState::TSenderState(CGdpSmsSender& aSmsSender)
: iSender(aSmsSender)
	{
	}


CGdpSmsSender::TSendMsgState::TSendMsgState(CGdpSmsSender& aSmsSender)
: TSenderState(aSmsSender)
	{
	}


void CGdpSmsSender::TSendMsgState::EnterL()
	{
	// Close the socket as it may already be open.
	iSender.iSocket.Close();

	// Open a socket
	User::LeaveIfError(iSender.iSocket.Open(iSender.iResMan.iSocketServer, KSMSAddrFamily, KSockDatagram, KSMSDatagramProtocol));

	// Bind to SMS port
    TSmsAddr smsAddr;
    smsAddr.SetSmsAddrFamily(ESmsAddrSendOnly);
	iSender.iSocket.Bind(smsAddr);

	// Open a write stream on the socket and stream our message. 
	RSmsSocketWriteStream writeStream(iSender.iSocket);
	writeStream << *(iSender.iSmsMsg);

	// message has not been sent at this point
	writeStream.CommitL();

	// Send the message
	iSender.iSocket.Ioctl(KIoctlSendSmsMessage, iSender.iStatus, &iSender.iOctlResult, KSolSmsProv);
	iSender.SetActive();
	}

CGdpStateMachine::TState* CGdpSmsSender::TSendMsgState::CompleteL()
	{
	RDebug::Print(_L("Message sent!!"));
	iSender.iHandler->SendComplete(KErrNone);
	delete iSender.iSmsMsg;
	iSender.iSocket.Close();
	return NULL;	// Last state so return NULL
	}

CGdpStateMachine::TState* CGdpSmsSender::TSendMsgState::ErrorL(TInt aCode)
	{
	User::Leave(aCode);
	return NULL;
	}

void CGdpSmsSender::TSendMsgState::Cancel()
	{
	if (iSender.iSocket.SubSessionHandle())
		iSender.iSocket.CancelIoctl();
	}

/************** Receiver ***************/

#pragma warning(disable:4355) // Disable "C4355: 'this' used in member initialization". 

CGdpSmsReceiver::CGdpSmsReceiver(CGdpSmsResourceManager& aResMan)
: CGdpSmsStateMachine(aResMan),
  iWaitState(*this),
  iReadMsgState(*this)
	{
	}

#pragma warning(default:4355) // Turn it back on.


CGdpSmsReceiver::~CGdpSmsReceiver()
	{
	Close();
	}
	
void CGdpSmsReceiver::OpenL(MGdpPacketHandler& aHandler)
	{
	iHandler = &aHandler;
	Reset();
	}
	
void CGdpSmsReceiver::Close()
	{
	Cancel();
	}
	
void CGdpSmsReceiver::ReceiveAllL()
	{
	__ASSERT_ALWAYS(iHandler != NULL, GdpUtil::Fault(GdpUtil::EProtocolNotOpen));
	if (IsActive())
		return;
	iRetries = KGdpSmsReceiveRetries;
	ReEnterCurrentState();
	}

void CGdpSmsReceiver::Reset()
	{// Called on start-up and if an error occurs
	SetNextState(&iWaitState);
	}


CGdpStateMachine::TState* CGdpSmsReceiver::ErrorOnStateEntry(TInt /*aError*/)
	{
	return NULL;
	}

CGdpStateMachine::TState* CGdpSmsReceiver::ErrorOnStateExit(TInt /*aError*/)
	{
	Reset();
	if (--iRetries<0)
		return NULL;
	return CurrentState();
	}

CGdpSmsReceiver::TReceiverState::TReceiverState(CGdpSmsReceiver& aSmsReceiver)
: iReceiver(aSmsReceiver)
	{
	}

/* ---------- Receiver States ------------ */


CGdpSmsReceiver::TWaitState::TWaitState(CGdpSmsReceiver& aSmsReceiver)
: TReceiverState(aSmsReceiver)
	{
	}

CGdpSmsReceiver::TReadMsgState::TReadMsgState(CGdpSmsReceiver& aSmsReceiver)
: TReceiverState(aSmsReceiver)
	{
	}


void CGdpSmsReceiver::TWaitState::EnterL()
	{
	// Close the socket as it may already be open.
	iReceiver.iSocket.Close();

	// Open a socket
	User::LeaveIfError(iReceiver.iSocket.Open(iReceiver.iResMan.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(KGdpSmsHeaderTag8());
	
	User::LeaveIfError(iReceiver.iSocket.Bind(smsAddr));

	// Wait for incoming messages	
    iReceiver.iOctlResult()= KSockSelectRead;
    iReceiver.iSocket.Ioctl(KIOctlSelect, iReceiver.iStatus, &(iReceiver.iOctlResult), KSOLSocket);
	iReceiver.SetActive();
	}

CGdpStateMachine::TState* CGdpSmsReceiver::TWaitState::CompleteL()
	{
	// Received a message so move to read state.
	return static_cast<TState*> (&iReceiver.iReadMsgState);
	}

CGdpStateMachine::TState* CGdpSmsReceiver::TWaitState::ErrorL(TInt aCode)
	{
	User::Leave(aCode);
	return NULL;
	}

void CGdpSmsReceiver::TWaitState::Cancel()
	{
	iReceiver.iSocket.CancelIoctl();
	}


void CGdpSmsReceiver::TReadMsgState::EnterL()
	{
	// Create an empty message and buffer for our incoming message.
	CSmsBuffer* buffer=NULL;
	buffer=CSmsBuffer::NewL();
	iReceiver.iSmsMsg = CSmsMessage::NewL(iReceiver.iResMan.iFs, CSmsPDU::ESmsSubmit, buffer);

	// Read the message.
	RSmsSocketReadStream readstream(iReceiver.iSocket);
	readstream >> *(iReceiver.iSmsMsg);

	// Let the socket know that we have read the message and it can be removed from the message
	// store.
	iReceiver.iSocket.Ioctl(KIoctlReadMessageSucceeded, iReceiver.iStatus, NULL, KSolSmsProv);
	iReceiver.SetActive();
	}

CGdpStateMachine::TState* CGdpSmsReceiver::TReadMsgState::CompleteL()
	{
	// Extract the message contents
	CSmsPDU& pdu = iReceiver.iSmsMsg->SmsPDU();
	CSmsUserData& userData = pdu.UserData();
	CSmsInformationElement& recvElement = userData.InformationElement(0);

	// Convert from address from uncode and send to handler
	TPtrC ptrFrom = iReceiver.iSmsMsg->ToFromAddress();
	HBufC8* hFromAddress = HBufC8::NewLC(ptrFrom.Length());
	TPtr8 p = hFromAddress->Des();
	p.Copy(ptrFrom);

	iReceiver.iHandler->GdpHandleL(*hFromAddress, recvElement.Data());
	
	// Cleanup
	CleanupStack::PopAndDestroy(); // hbuf, hFromAddress;
	delete iReceiver.iSmsMsg;
	iReceiver.iSocket.Close();
	
	// Return to wait state for next message.
	return static_cast<TState*> (&iReceiver.iWaitState);
	}

CGdpStateMachine::TState* CGdpSmsReceiver::TReadMsgState::ErrorL(TInt aCode)
	{
	User::Leave(aCode);
	return NULL;
	}

void CGdpSmsReceiver::TReadMsgState::Cancel()
	{
	iReceiver.iSocket.CancelIoctl();
	}


CGdpSmsResourceManager::~CGdpSmsResourceManager()
	{
	Close();
	}

void CGdpSmsResourceManager::OpenL()
	{
	User::LeaveIfError(iSocketServer.Connect());
	User::LeaveIfError(iFs.Connect());
	}

void CGdpSmsResourceManager::Close()
	{
	iFs.Close();
	iSocketServer.Close();
	}


// Define the interface UIDs
const TImplementationProxy ImplementationTable[] =
    {
    {{0x101f8b5e}, CGdpSmsComms::NewL},
    };


EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
    {
    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);

    return ImplementationTable;
    }

TInt E32Dll(TDllReason)
	{
	return KErrNone;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲成av人在线观看导航| 成人av网在线| 久久草av在线| 成人午夜电影久久影院| 成人91在线观看| 制服丝袜一区二区三区| 欧美一区二区三区不卡| 2023国产精品自拍| 国产精品不卡视频| 日日夜夜免费精品| 粉嫩绯色av一区二区在线观看| 成人avav在线| 欧美一区二区三区影视| 久久九九全国免费| 亚洲第一主播视频| 国产aⅴ综合色| 欧美日韩黄视频| 国产精品美女久久久久aⅴ| 伊人婷婷欧美激情| 国产高清不卡一区| 日韩精品一区国产麻豆| 亚洲激情在线激情| 福利视频网站一区二区三区| 波多野结衣一区二区三区| 欧美精品aⅴ在线视频| 亚洲欧美日韩综合aⅴ视频| 国内精品伊人久久久久av一坑| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩欧美国产精品一区| 亚洲第一在线综合网站| 91久久精品午夜一区二区| 国产精品久久久久久亚洲伦| 韩国成人福利片在线播放| 4hu四虎永久在线影院成人| 亚洲一区二区综合| 欧美主播一区二区三区| 亚洲精品国产品国语在线app| 成人激情午夜影院| 亚洲视频一区在线观看| 91极品美女在线| 亚洲www啪成人一区二区麻豆| 91精品蜜臀在线一区尤物| 蜜臀99久久精品久久久久久软件| 欧美精选一区二区| 蜜臀久久久久久久| 2023国产精品自拍| 色婷婷综合在线| 老汉av免费一区二区三区| 欧美sm美女调教| 国内成人精品2018免费看| 国产精品国产三级国产aⅴ中文 | 色综合一个色综合亚洲| 国产亚洲欧美日韩在线一区| 成人免费黄色在线| 日本亚洲一区二区| 亚洲视频免费在线| 国产精品视频你懂的| 欧美视频一区在线| 国产美女主播视频一区| 亚洲国产一区在线观看| 久久精品欧美一区二区三区麻豆| 色呦呦网站一区| 国产高清亚洲一区| 蜜臀91精品一区二区三区| 亚洲精品伦理在线| 久久精品日产第一区二区三区高清版 | 国产精品三级久久久久三级| 久久影院午夜片一区| 国产偷国产偷亚洲高清人白洁| 国产日韩高清在线| 精品国产精品一区二区夜夜嗨| 欧美探花视频资源| 岛国精品一区二区| 欧美aaa在线| 亚洲成人免费视| 亚洲日本在线观看| 国产精品久久福利| 精品日韩一区二区三区| 欧美剧情片在线观看| 色婷婷激情一区二区三区| 波多野结衣在线一区| 国产成人av资源| 粉嫩欧美一区二区三区高清影视| 老鸭窝一区二区久久精品| 天天综合网天天综合色| 亚洲综合在线五月| 亚洲第一激情av| 午夜视频在线观看一区二区| 亚洲成av人片在www色猫咪| 一区二区三区四区视频精品免费 | 日韩中文欧美在线| 国内欧美视频一区二区| av在线免费不卡| 3751色影院一区二区三区| 久久综合久久综合亚洲| 亚洲视频一二区| 亚洲第一福利一区| 韩国一区二区视频| 在线观看一区不卡| 久久久久久久精| 亚洲精品视频在线观看网站| 韩国欧美国产一区| 91福利社在线观看| 国产视频不卡一区| 视频一区视频二区中文| 成人一级片在线观看| 777欧美精品| 亚洲国产毛片aaaaa无费看| 成人小视频在线| 久久色.com| 蜜桃av一区二区| 欧美喷潮久久久xxxxx| 欧美国产日韩一二三区| 国产精品一区二区久久不卡| 欧美日韩一区二区三区在线看| 亚洲欧美在线另类| 成人午夜免费电影| 国产日韩欧美精品电影三级在线| 亚洲国产你懂的| 91精品国产日韩91久久久久久| 亚洲一区中文日韩| 91麻豆精品国产| 欧美一个色资源| 欧美午夜理伦三级在线观看| 久久精品国内一区二区三区| 国产精品国产精品国产专区不片| 欧美日韩综合不卡| 国产suv一区二区三区88区| 日本v片在线高清不卡在线观看| 欧美国产一区二区在线观看| 91精品午夜视频| 国产成人免费xxxxxxxx| 亚洲视频电影在线| 欧美一区二区免费| 成人黄色国产精品网站大全在线免费观看| 日本一区二区三区高清不卡 | 国产女主播视频一区二区| 成人免费毛片app| 亚洲va欧美va人人爽| 2020日本不卡一区二区视频| 色婷婷精品久久二区二区蜜臀av| 男男成人高潮片免费网站| 国产精品污www在线观看| 国产成人av一区二区三区在线| 亚洲卡通欧美制服中文| 日韩精品最新网址| 日本韩国视频一区二区| 国产一区二区毛片| 日本在线播放一区二区三区| 亚洲欧洲成人自拍| 欧美国产日韩在线观看| 久久久五月婷婷| 欧美一级艳片视频免费观看| 色成人在线视频| 99久久亚洲一区二区三区青草| 美脚の诱脚舐め脚责91 | 国产精品女人毛片| 久久这里只有精品首页| 精品视频在线看| 成人午夜精品在线| 高清国产一区二区| 成人午夜在线播放| 97精品视频在线观看自产线路二| 豆国产96在线|亚洲| 国产成人av一区| 91女厕偷拍女厕偷拍高清| 成人黄色片在线观看| 9l国产精品久久久久麻豆| 成人精品免费视频| 99久久99久久精品国产片果冻| 成人永久免费视频| eeuss鲁一区二区三区| 国产精品99久久久久久久vr| 国产一区二区三区免费看| 成熟亚洲日本毛茸茸凸凹| 一本大道久久精品懂色aⅴ| 欧美日韩在线直播| 欧美精品一区二区三区四区| 国产欧美日韩亚州综合| 日本一区二区三区高清不卡| 亚洲伦理在线精品| 日韩精品一二三区| 成人av电影在线观看| 欧美高清性hdvideosex| 久久精品夜色噜噜亚洲aⅴ| 一区二区三区在线免费| 国产一区二区精品久久91| 一本一本大道香蕉久在线精品| 777a∨成人精品桃花网| 国产精品另类一区| 欧美aaaaaa午夜精品| 欧美日韩中文字幕精品| 国产精品色一区二区三区| 国产一区二区在线观看视频| 欧美在线一区二区三区| 欧美国产综合色视频| 国产在线麻豆精品观看| 日韩一区二区在线观看视频播放| 亚洲乱码国产乱码精品精的特点| 国产ts人妖一区二区|