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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gdpbt.cpp

?? 《SymbianOSC手機(jī)應(yīng)用開發(fā)》源碼
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):

CGdpStateMachine::TState* CGdpBTSender::TWriteState::CompleteL()
	{
	// Hey! We're done! Stop going through the state machine
	iSender.iHandler->SendComplete(KErrNone);
	return NULL;
	}

void CGdpBTSender::TWriteState::Cancel()
	{
	// Cancel any writes on the socket
	iSender.iWriteSocket.CancelWrite();
	}

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

CGdpBTReceiver::CGdpBTReceiver(CGdpBTResourceManager& aResMan)
	: CGdpBTStateMachine(aResMan),
	// Initialise the two member states so they know who they're owned by
	iAcceptState(*this),
	iReadState(*this)
	{
	}

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

/// Just close what we opened previously
CGdpBTReceiver::~CGdpBTReceiver()
	{
DEBUG_PRINT(_L("Entering CGdpBTReceiver::~CGDBTReceiever"));
	Close();
DEBUG_PRINT(_L("Leaving CGdpBTReceiver::~CGDBTReceiever"));
	}

void CGdpBTReceiver::DoSecurityParams()
	{
	RBTSecuritySettings secset;
	RBTMan btman;
	TBTServiceSecurity service;
	TUid uid;
	uid.iUid = 0x1234;
	service.SetUid(uid);
	service.SetChannelID(11);
	service.SetProtocolID(KSolBtL2CAP);

	service.SetAuthentication(EFalse);
	service.SetAuthorisation(EFalse);
	service.SetEncryption(EFalse);
	User::LeaveIfError(btman.Connect());
	User::LeaveIfError(secset.Open(btman));
	TRequestStatus requestStatus;
	secset.RegisterService(service, requestStatus);
	User::WaitForRequest(requestStatus);
	User::LeaveIfError(requestStatus.Int());
	}

void CGdpBTReceiver::OpenL(MGdpPacketHandler& aHandler)
	{
	DEBUG_PRINT(_L("Entering CGdpBTReceiver::OpenL"));
	
	// Make sure the current iHandler is NULL - if it isn't then
	// we've already got a handler so Panic
	__ASSERT_DEBUG(iHandler == NULL, GdpUtil::Panic(GdpUtil::EReceiverInUse));

	iHandler = &aHandler;

	// Get the descriptor for protocol we are using. Better be Bluetooth...
	TProtocolDesc& desc = iResMan.ProtocolDesc();

	// Open the Listen Socket
	User::LeaveIfError(iListenSocket.Open(iResMan.SocketServer(),
	                       desc.iAddrFamily, 
						   desc.iSockType,
						   desc.iProtocol));

	// Set up the port to listen on
	TInt port = 0x0b; // Port 11 for GDP
	
	iAddr.SetPort(port);

	// Now set the socket to listen on the right port
	TInt ret = iListenSocket.Bind(iAddr);

	// If the Bind() didn't succeed we're outta here!

	if (ret != KErrNone)
		User::Leave(KErrInUse);		// Port is in use

	// Listen with a queue size of 4 (random) to allow more than 
	// one connection
	User::LeaveIfError(iListenSocket.Listen(4));

	DoSecurityParams(); 

	// Now start the state machine off to wait for an incoming connection
	ChangeState(&iAcceptState);
	}

void CGdpBTReceiver::Close()
	{
DEBUG_PRINT(_L("Entering CGdpBTReceiver::Close"));
	// If theres's no handler, it's closed already so 
	// we don't need to do anything
	if (iHandler == NULL)
		return;

	// Make sure there's no outstanding requests by cancelling them
	Cancel();

	// Close the Read and Listen sockets
	iReadSocket.Close();
	iListenSocket.Close();

	// Set the handler to NULL so we know not to close 
	// anything if we come in here again
	iHandler = NULL;
DEBUG_PRINT(_L("Leaving CGdpBTReceiver::Close"));
	}

CGdpStateMachine::TState* CGdpBTReceiver::ErrorOnStateEntry(TInt /*aError*/)
//
// This should really try to wait a little first!!!
//
	{
	// But in the mean time, just go back to the start again!
	return &iAcceptState;
	}

CGdpStateMachine::TState* CGdpBTReceiver::ErrorOnStateExit(TInt /*aError*/)
//
// Some Async request failed. Start again.
// Individual states will probably do this themselves anyway...
//
	{
	return &iAcceptState;
	}

/**************** GdpBTReceiver State transitions ****************/

CGdpBTReceiver::TReceiverState::TReceiverState(CGdpBTReceiver& aReceiver)
: iReceiver(aReceiver)
	{
	}

//--------------- Receiver Accept State ---------------//

CGdpBTReceiver::TAcceptState::TAcceptState(CGdpBTReceiver& aReceiver)
: TReceiverState(aReceiver)
	{
	}

void CGdpBTReceiver::TAcceptState::EnterL()
	{
	RSocket& readSock = iReceiver.iReadSocket;

	readSock.Close(); // Why close it? Leave it open???
    User::LeaveIfError(
		readSock.Open(iReceiver.iResMan.SocketServer()));

	// Tell socket we'll accept an incoming connection...
	iReceiver.iListenSocket.Accept(readSock, iReceiver.iStatus);
	// ...and wait
	iReceiver.SetActive();
	}

CGdpStateMachine::TState* CGdpBTReceiver::TAcceptState::CompleteL()
	{
	// Got an incoming connection! 

	// Where'd it come from?
	TL2CAPSockAddr sockAddr;
	iReceiver.iReadSocket.RemoteName(sockAddr);
	
	// Convert and store as hex in the remote address descriptor
	TBTDevAddr remAddr = sockAddr.BTAddr();
	iReceiver.iRemAddr.Zero(); // Set length to zero
	for (TInt i=0; i<KBTMaxDevAddrSize; ++i)
		{
		// 00 d0 b7 03 0e c5
		TUint16 num = remAddr[i];
		// Hack to pre-pend with a 0 if single digit hex
		if(num < 0x10)
			iReceiver.iRemAddr.AppendNum(0, EHex);

		iReceiver.iRemAddr.AppendNum(remAddr[i], EHex);
		}

	// Now read some data
	return &(iReceiver.iReadState);
	}

CGdpStateMachine::TState* CGdpBTReceiver::TAcceptState::ErrorL(TInt /*aCode*/)
	{
	return this; // Retry this state
	}

void CGdpBTReceiver::TAcceptState::Cancel()
	{
	iReceiver.iListenSocket.CancelAccept();
	}

//--------------- Receiver Read State ---------------//

CGdpBTReceiver::TReadState::TReadState(CGdpBTReceiver& aReceiver)
: TReceiverState(aReceiver)
	{
	}

void CGdpBTReceiver::TReadState::EnterL()
	{
	iReceiver.iReadSocket.Read(iReceiver.iPacket, iReceiver.iStatus);
	iReceiver.SetActive();
	}

CGdpStateMachine::TState* CGdpBTReceiver::TReadState::CompleteL()
	{
	// _LIT(KNullAddress,"");
	// Complete read by telling handler where the packet came from
	// and what was in it
	iReceiver.iHandler->GdpHandleL(iReceiver.iRemAddr, iReceiver.iPacket);
	return this;	// Queue another read, while the channel is open
	}

CGdpStateMachine::TState* CGdpBTReceiver::TReadState::ErrorL(TInt /*aCode*/)
//
// Go back to accept to pick up the next connection
//
	{
	return &(iReceiver.iAcceptState);
	}

void CGdpBTReceiver::TReadState::Cancel()
	{
	iReceiver.iReadSocket.CancelRead();
	}

/**************** GdpBTResourceManager ****************/

CGdpBTResourceManager::CGdpBTResourceManager()
	{
	}

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

void CGdpBTResourceManager::OpenL()
//
// Allocate shared resources
//
	{
	// Connect to the Socket Server
	User::LeaveIfError(iSocketServer.Connect());
	// Find something in there that will give us a protocol called
	// 'L2CAP' (hopefully, Bluetooth :) )
	// This fills in the Protocol Descriptor, iProtocolDesc
	User::LeaveIfError(iSocketServer.FindProtocol(_L("L2CAP"), iProtocolDesc));
	}

void CGdpBTResourceManager::Close()
//
// Release shared resources
//
	{
	iSocketServer.Close();
	}
	

	

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

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

    return ImplementationTable;
    }

TInt E32Dll(TDllReason)
	{
	return KErrNone;
	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
18欧美亚洲精品| 久久99精品国产| 日韩欧美中文字幕精品| 国产精品一区免费视频| 一区二区在线电影| 久久久美女毛片| 91.com视频| 91电影在线观看| 粉嫩av一区二区三区| 麻豆高清免费国产一区| 亚洲综合精品久久| 国产精品免费视频网站| 精品国产亚洲在线| 欧美精品黑人性xxxx| 91蜜桃免费观看视频| 国产精品一级在线| 蜜臀国产一区二区三区在线播放| 亚洲免费观看高清完整版在线观看熊| 久久综合成人精品亚洲另类欧美| 欧美日韩国产电影| 在线观看av不卡| 色婷婷久久综合| 成人av影院在线| 成人美女在线视频| 国产福利91精品一区| 狠狠色丁香婷婷综合久久片| 日韩av在线免费观看不卡| 亚洲bt欧美bt精品| 亚洲午夜电影网| 亚洲午夜在线观看视频在线| 亚洲精品视频在线看| 亚洲欧洲成人自拍| 国产精品久久久久久久久动漫| 欧美激情一区二区三区四区| 国产日韩欧美亚洲| 中文字幕av一区二区三区高| 久久久久国产精品麻豆ai换脸| 26uuu亚洲| 久久精品人人做| 国产午夜精品一区二区三区视频 | 六月婷婷色综合| 日本午夜一本久久久综合| 日韩精品乱码av一区二区| 水野朝阳av一区二区三区| 丝袜美腿亚洲综合| 免费在线看一区| 精品在线视频一区| 国产伦理精品不卡| 成人午夜视频福利| 成人一区在线看| 99国产精品视频免费观看| 91国内精品野花午夜精品| 在线免费亚洲电影| 欧美喷水一区二区| 日韩欧美一卡二卡| 久久久久国产成人精品亚洲午夜 | 亚洲女与黑人做爰| 夜夜夜精品看看| 天天色图综合网| 麻豆视频观看网址久久| 韩国成人精品a∨在线观看| 国产精品91一区二区| 丁香桃色午夜亚洲一区二区三区| av在线不卡免费看| 欧美三级资源在线| 制服视频三区第一页精品| 精品国产91久久久久久久妲己| 久久美女高清视频| 亚洲色图欧美偷拍| 日韩高清在线观看| 国产成人h网站| 色中色一区二区| 在线电影院国产精品| 久久综合色婷婷| 亚洲精品老司机| 欧美aa在线视频| 9i在线看片成人免费| 7777精品伊人久久久大香线蕉完整版| 久久久影视传媒| 一区二区三区av电影| 九一久久久久久| 色综合天天综合网天天狠天天| 日韩一区二区三区观看| 国产精品色婷婷久久58| 日韩精品一级中文字幕精品视频免费观看| 国产一区二区三区免费| 欧美日韩一区二区在线观看| 精品国产人成亚洲区| 一区二区在线观看免费视频播放| 久久精品噜噜噜成人88aⅴ | 久久中文字幕电影| 亚洲另类在线视频| 国产一区二区免费在线| 欧美色精品在线视频| 精品女同一区二区| 亚洲色图20p| 国产一区二区三区在线观看免费视频 | 欧美一区二区视频网站| 亚洲天堂久久久久久久| 紧缚奴在线一区二区三区| 色妞www精品视频| 久久中文字幕电影| 天堂va蜜桃一区二区三区漫画版| 成人av中文字幕| 久久奇米777| 蜜臀av国产精品久久久久 | 久久免费电影网| 日韩成人一级片| 欧美在线不卡一区| 国产精品污污网站在线观看| 久99久精品视频免费观看| 欧美日本一区二区三区四区| 中文字幕亚洲一区二区av在线| 国产自产高清不卡| 日韩欧美一区在线| 亚洲超碰97人人做人人爱| 色婷婷久久久综合中文字幕 | 日本伊人色综合网| 欧美亚洲禁片免费| 亚洲精品视频在线观看网站| 成人a区在线观看| 国产午夜久久久久| 国模套图日韩精品一区二区| 欧美大片拔萝卜| 日韩高清一区二区| 在线综合+亚洲+欧美中文字幕| 一区二区三区免费网站| 色综合天天综合网天天狠天天| 国产精品人妖ts系列视频| 国产成人在线视频播放| 精品国产一区二区精华| 蜜桃在线一区二区三区| 日韩一区二区免费电影| 天天做天天摸天天爽国产一区| 欧美日韩一区 二区 三区 久久精品 | 精品久久久久久无| 日本欧美一区二区| 欧美一级黄色大片| 麻豆国产精品视频| 久久色在线视频| 国产成人免费xxxxxxxx| 国产人成亚洲第一网站在线播放| 国产91清纯白嫩初高中在线观看| 国产视频一区二区三区在线观看| 国产风韵犹存在线视精品| 国产精品三级av| 91蜜桃传媒精品久久久一区二区| 伊人性伊人情综合网| 欧美日韩亚洲综合在线| 日韩高清一区在线| 久久久久久久久久久99999| 国产精品综合一区二区三区| 国产清纯白嫩初高生在线观看91| 粉嫩13p一区二区三区| 亚洲日本在线天堂| 欧美群妇大交群的观看方式| 久久精品国产99国产| 国产女同互慰高潮91漫画| 91老师国产黑色丝袜在线| 亚洲电影在线播放| 欧美xfplay| 成人网在线免费视频| 一区二区不卡在线播放 | 97成人超碰视| 亚洲成在线观看| 日韩免费视频线观看| 国产69精品久久久久777| 亚洲丝袜美腿综合| 在线成人小视频| 成人激情开心网| 亚洲午夜成aⅴ人片| 亚洲精品一线二线三线| 一本高清dvd不卡在线观看| 人人爽香蕉精品| 中文字幕一区二区三| 日韩三级精品电影久久久 | 色狠狠色狠狠综合| 青青草国产成人av片免费| 国产网红主播福利一区二区| 色偷偷久久人人79超碰人人澡| 日韩精品亚洲一区| 国产精品视频你懂的| 欧美精品丝袜中出| 成人av电影在线观看| 日韩精品一二区| 亚洲欧美怡红院| 日韩久久久久久| 在线观看欧美日本| 国产一区二区在线免费观看| 亚洲午夜久久久久| 国产精品人人做人人爽人人添| 欧美妇女性影城| 91一区二区三区在线观看| 国模无码大尺度一区二区三区| 亚洲激情一二三区| 中文字幕+乱码+中文字幕一区| 日韩欧美亚洲国产精品字幕久久久| 91在线观看视频| 国产又黄又大久久| 免费在线看成人av|