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

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

?? netsocket.c

?? b Rew book for brew phone design
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*!
 *	Example program.
 *  Copyright (c) 2004 by BREW Development Team, Zhejiang University.
 *  All Rights Reserved.
 */

/*!-----------------------------------

	@file		netsocket.c
	@author		TYB
	@brief		程序主文件

  -----------------------------------*/  


#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEShell.h" 
#include "AEEFile.h"
#include "AEENet.h"
#include "netsocket.bid"
#include "AEEStdlib.h"
#include "AEEMenu.h"


typedef struct _CNetSocket {

	AEEApplet		a;

	INetMgr			*pINetMgr;
	ISocket			*pISocket;
	IMenuCtl		*pIMenuCtl;

	AEEDNSResult	dnsresult;
	AEECallback		cbkLookup;
	INAddr			addrsLookup[8];
	
	uint16			APIFnType;


}CNetSocket;


#define USAGE_BASIC_USAGE           100

#define USAGE_NET_GETHOSTBYNAME     101
#define USAGE_NET_GETLASTERROR      102
#define USAGE_NET_OPENSOCKET        103
#define USAGE_NET_SETLINGER         104
#define USAGE_NET_NETSTATUS         105
#define USAGE_NET_GETMYIPADDRESS    106

#define USAGE_SOCKET_GETPEERNAME    107
#define USAGE_SOCKET_GETLASTERROR   108
#define USAGE_SOCKET_CONNECT        109
#define USAGE_SOCKET_BIND           110
#define USAGE_SOCKET_WRITE          111
#define USAGE_SOCKET_WRITEV         112
#define USAGE_SOCKET_READ           113
#define USAGE_SOCKET_READV          114
#define USAGE_SOCKET_SENDTO         115
#define USAGE_SOCKET_RECVFROM       116
#define USAGE_SOCKET_READBALE       117
#define USAGE_SOCKET_WRITEABLE      118
#define USAGE_SOCKET_CANCEL         119
#define USAGE_SOCKET_SHUTDOWN       120

#define USAGE_ERASE_SCREEN          121


#define TIMESERVER_PORT      23
#define TIMESERVER_HOST      "10.214.52.108"

#define USAGE_TEST_HOST      "10.214.52.108"
#define USAGE_TEST_PORT      22

#define ISDIGIT(c)  ( (unsigned) ((c) - '0') < 10)
#define ISALPHA(c)  ( (unsigned) ( ((c)|32) - 'a') < 26 )
#define ISALNUM(c)  ( ISDIGIT(c) || ISALPHA(c) )
#define min(a,b)  ((a) < (b) ? (a) : (b))
#define ARRAYSIZE(a)   (sizeof(a) / sizeof((a)[0]))


/*!
	Function Prototypes
 */
static boolean	HandleEvent(IApplet * pi,AEEEvent eCode,uint16 wParam,uint32 dwParam);

static boolean	InitData(CNetSocket *pme);
static void		FreeData(CNetSocket *pme);
static void		ConnectCBFun(CNetSocket *pme , int wParam);

void			BuildMainMenu(CNetSocket *pMe);
boolean			INetSocketUsage (CNetSocket * pme, uint16 wParam);
void			DisplayOutput(CNetSocket * pi,  int line , char *pszStr);

INAddr			ConvertToINAddr(char *psz);
void			ConvertToIPAddr(INAddr inaddr, char *psz);
void			GetHostByNameCB(void * pUser);
void			CommonReadCB(void *pUser);
void			CommonWriteCB(void *pUser);


/*!
	Function Defintions
 */
 
 
//----------------------------------------------------------------------------------


/*!
 *		@brief:		小程序初始化函數(shù)
 *		@para:		ClsId小程序的ClassID
 *		@para:		pIShell底層傳遞來的指向IShell接口的指針
 *		@para:		po指向IModule接口的指針
 *		@para:		ppObj用于初始化以后返回AEEApplet結(jié)構(gòu)的指針
 *		@return:	AEE_SUCCESS表示成功,EFAILED表示失敗
 */
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
	*ppObj = NULL;
	
	if(ClsId != AEECLSID_NETSOCKET)
		return (EFAILED);

	if(TRUE != AEEApplet_New(sizeof(CNetSocket), 
								ClsId, 
								pIShell,
								po,
								(IApplet**)ppObj,
								(AEEHANDLER)HandleEvent,
								(PFNFREEAPPDATA)FreeData))
		return (EFAILED);

	if(!InitData((CNetSocket*)*ppObj))
		return (EFAILED);
		
	return AEE_SUCCESS;
}

/*!
 *		@brief:		消息處理函數(shù)
 *		@para:		pi指向IApplet接口的指針
 *		@para:		eCode消息代碼
 *		@para:		wParam是16位的參數(shù)
 *		@para:		dwParam是32位的參數(shù)
 *		@return:	TRUE表示處理過,F(xiàn)ALSE沒有處理
 */
static boolean HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	CNetSocket *pme = (CNetSocket*)pi;

	switch (eCode) 
	{

	case EVT_APP_START:
		ISHELL_CreateInstance(pme->a.m_pIShell,	AEECLSID_MENUCTL, (void**)&pme->pIMenuCtl);
		ISHELL_CreateInstance(pme->a.m_pIShell,	AEECLSID_NET, (void **)&pme->pINetMgr);
		if(pme->pINetMgr)
			//如果這里出現(xiàn)錯誤,又沒有辦法注冊回調(diào)函數(shù),所以錯誤是在ISocket接口中的
			//ISOCKET_GetLastError()函數(shù)取得
			pme->pISocket = INETMGR_OpenSocket (pme->pINetMgr, AEE_SOCK_STREAM);
		if(pme->pIMenuCtl)
			BuildMainMenu(pme);
   		return TRUE;

	case EVT_APP_STOP:
		return TRUE;

	case EVT_KEY:
		if(pme->pIMenuCtl != NULL && (IMENUCTL_IsActive(pme->pIMenuCtl) == TRUE))
			return IMENUCTL_HandleEvent(pme->pIMenuCtl, EVT_KEY, wParam, 0);
		else if(pme->pIMenuCtl != NULL && (IMENUCTL_IsActive(pme->pIMenuCtl) == FALSE)) {
			if(wParam == AVK_CLR) {
				IMENUCTL_SetActive(pme->pIMenuCtl, TRUE);
				return TRUE;
			}
		}
		break;

	case EVT_COMMAND:
		IDISPLAY_ClearScreen(pme->a.m_pIDisplay);
		INetSocketUsage(pme, wParam);
		break;

	default:
		break;
	}
	return FALSE;
}

/*!
 *		@brief:		初始化函數(shù)
 *		@para:		pme指向CNetSocket結(jié)構(gòu)的指針
 *		@return:	TRUE表示成功,F(xiàn)ALSE表示失敗
 */
boolean InitData(CNetSocket *pme)
{
	pme->pINetMgr = NULL;
	pme->pISocket = NULL;
	pme->pIMenuCtl= NULL;

	return TRUE;
}

/*!
 *		@brief:		資源釋放函數(shù)
 *		@para:		pme指向CNetSocket結(jié)構(gòu)的指針
 */ 
static void	FreeData(CNetSocket *pme)
{
	if(pme->pIMenuCtl) {
		IMENUCTL_Release(pme->pIMenuCtl);
		pme->pIMenuCtl = NULL;
	}

	if(pme->pINetMgr) {
		INETMGR_Release(pme->pINetMgr);
		pme->pINetMgr = NULL;
	}

	if(pme->pISocket) {
		ISOCKET_Release(pme->pISocket);
		pme->pISocket = NULL;
	}
}

/*!
 *		@brief:		程序的主要功能模塊
 *		@para:		pme指向CNetSocket結(jié)構(gòu)的指針
 *		@para:		wParam傳遞到該函數(shù)的命令參數(shù)
 *		@retval:	TRUE表示成功,F(xiàn)ALSE表示失敗
 */ 
boolean INetSocketUsage (CNetSocket * pme, uint16 wParam)
{
	INAddr nodeINAddr;
	uint16 nPort;
	char psz[50] = {0};
	const char hostName [] = "www.sina.com";
	int invalidSockType = 0xff;
	int lastError = 0;
	char lTime[100] = {0};
	uint16 lingerTime1 = 20;
	uint16 prevLingerTime = 0;
	NetState netState = NET_INVALID_STATE;
	AEENetStats netStats;
	int iRetValue = AEE_NET_EBADF;
	uint32 readVal;

	IMENUCTL_SetActive(pme->pIMenuCtl, FALSE);
	IDISPLAY_ClearScreen(pme->a.m_pIDisplay);

	if(pme->pINetMgr && pme->pISocket) 
	{

		switch(pme->APIFnType = wParam) {
		
		//基礎(chǔ)用法,先見識一下回調(diào)的工作方式
		case USAGE_BASIC_USAGE:
			nodeINAddr = ConvertToINAddr(USAGE_TEST_HOST);
			nPort = HTONS(USAGE_TEST_PORT);
			ISOCKET_Connect(pme->pISocket, nodeINAddr ,nPort, ConnectCBFun ,pme);
			DisplayOutput (pme,  1, "Connecting...");
			break;

		//注意,這里必須注冊回調(diào)函數(shù)來進(jìn)行函數(shù)調(diào)用結(jié)果分析
		case USAGE_NET_GETHOSTBYNAME:
			CALLBACK_Init(&pme->cbkLookup, GetHostByNameCB, pme);
			//注意必須保證在回調(diào)函數(shù)處理完成之前,pme->dnsresult一直存在
			//還要注意,在調(diào)用INETMGR_Release()函數(shù)之前保證回調(diào)被清除,防止內(nèi)存錯誤
			INETMGR_GetHostByName(pme->pINetMgr,&pme->dnsresult, hostName, &pme->cbkLookup);
			break;

		//返回錯誤代碼
		case USAGE_NET_GETLASTERROR:
			{
				ISocket *pISocket = NULL;
				if(pme->pINetMgr)
					//此處用一個非法的socket類型來打開socket連接
					pISocket = INETMGR_OpenSocket(pme->pINetMgr, invalidSockType);
				if(!pISocket)
					lastError = INETMGR_GetLastError(pme->pINetMgr);
				if(lastError != AEE_NET_SUCCESS) {
					//打印出錯誤號碼
					SPRINTF(psz, "Error Id: %u", lastError);
					DisplayOutput(pme, 1, psz);
				}
				else
					DisplayOutput (pme, 1, "GetLastError: failed");
				if(pISocket)
					ISOCKET_Release(pISocket);
			}
			break;

		//設(shè)置網(wǎng)絡(luò)延遲時間,返回值是以前的延遲時間,不能注冊回調(diào)函數(shù)
		case USAGE_NET_SETLINGER:
               prevLingerTime = INETMGR_SetLinger (pme->pINetMgr, lingerTime1);
               SPRINTF (lTime, "Linger Time 1 = %u", prevLingerTime);
               DisplayOutput (pme, 1, lTime);

               prevLingerTime = INETMGR_SetLinger (pme->pINetMgr, lingerTime1);
               SPRINTF (lTime, "Linger Time 2 = %u", prevLingerTime);
               DisplayOutput (pme, 2, lTime);
			   break;

		//取得自己的IP地址,返回值是一個IP地址,不能注冊回調(diào)函數(shù)
		//由于返回值的IP不是字符串,所以要想顯示先得轉(zhuǎn)換
		case USAGE_NET_GETMYIPADDRESS:
			nodeINAddr = INETMGR_GetMyIPAddr(pme->pINetMgr);
			ConvertToIPAddr(nodeINAddr, psz);
			DisplayOutput(pme , 1, psz);
			break;

		//取得網(wǎng)絡(luò)狀態(tài),網(wǎng)絡(luò)的狀態(tài)通過返回值取得,網(wǎng)絡(luò)參數(shù)通過傳入一個指針參數(shù)來獲取
		//這個函數(shù)也是不需要也不能注冊回調(diào)函數(shù)
		case USAGE_NET_NETSTATUS:
			netState = INETMGR_NetStatus (pme->pINetMgr, &netStats);
			switch (netState)
			{
			case NET_INVALID_STATE:
				DisplayOutput (pme, 1, "Status: Invalid");
				break;
			case NET_PPP_OPENING:
				DisplayOutput (pme, 1, "Status: Opening");
				break;
			case NET_PPP_OPEN:
				DisplayOutput (pme,  1, "Status: Open");
				break;
			case NET_PPP_CLOSING:
				DisplayOutput (pme,  1, "Status: Closing");
				break;
			case NET_PPP_CLOSED:
				DisplayOutput (pme, 1, "Status: Closed");
				break;
			}
			break;

		//注意,INetMgr接口除了INETMGR_GetHonstByName()函數(shù)以外,還有一個比較特殊的函數(shù)
		//這個函數(shù)可以將INetMgr接口產(chǎn)生的所有事件都全部截獲,并在事件發(fā)生時調(diào)用一個
		//回調(diào)函數(shù)來進(jìn)行處理



		//用于套接字和本地地址和端口相關(guān)聯(lián),只能用于未連接的套接字,通常是用于
		//數(shù)據(jù)報(bào)套接字,第二個參數(shù)必須是AEE_INADDR_ANY,原因見API文檔。此函數(shù)
		//不能注冊回調(diào),執(zhí)行情況通過返回值取得,如果阻塞,用ISOCKET_Writeable()
		//注冊一個回調(diào)函數(shù)等待可以傳輸時進(jìn)行相應(yīng)的處理,在回調(diào)函數(shù)中可以再次調(diào)
		//用以取得最終結(jié)果,是成功還是失敗,ISOCKET_Writeable() 可以獲取再次調(diào)
		//用Bind() 的時間通知。請注意,和Write()一樣, ISOCKET_Writeable() 回調(diào)
		//無法確保完成后續(xù)的Bind() 調(diào)用,因此調(diào)用程序必須準(zhǔn)備再次接收
		//AEE_NET_WOULDBLOCK,一旦綁定成功,可以進(jìn)行讀寫操作了
		case USAGE_SOCKET_BIND:
			if ((iRetValue = ISOCKET_Bind (pme->pISocket, AEE_INADDR_ANY, 1240))
				== AEE_NET_WOULDBLOCK)
				ISOCKET_Writeable(pme->pISocket, CommonWriteCB, (void *)pme);
			else
				if (iRetValue != AEE_NET_SUCCESS)
					DisplayOutput (pme, 1, "Bind Failed.");
				else
					DisplayOutput (pme, 1, "Bind Succeeded.");
			break;

		//ISocket接口中比較簡單的一個函數(shù),不需要注冊回調(diào)函數(shù),直接返回結(jié)果
		case USAGE_SOCKET_GETLASTERROR:
			//此處還沒有連接,所以調(diào)用Read函數(shù)會出錯
			if (AEE_NET_SUCCESS != (iRetValue = ISOCKET_Read(pme->pISocket, (byte*)&readVal, sizeof(uint32))))
				if ((lastError = ISOCKET_GetLastError(pme->pISocket))== AEE_NET_ENOTCONN)
					DisplayOutput (pme, 1, "Err: Not Connected");
			break;

		//以下這些功能的調(diào)用都沒有直接在這里進(jìn)行演示,而是都放在
		//ConnectCBFun()函數(shù)中進(jìn)行處理,原因很簡單,這些操作都必
		//須在網(wǎng)絡(luò)接通的情況下進(jìn)行,而網(wǎng)絡(luò)連接的ISOCKET_Connect()
		//函數(shù)是異步執(zhí)行,需要注冊一個回調(diào)函數(shù),不管執(zhí)行是否成功
		//即:連接是否成功,都會調(diào)用回調(diào)函數(shù),正確和錯誤的處理都
		//必須在回調(diào)函數(shù)中進(jìn)行,所以這些功能都必須在回調(diào)中處理
		case USAGE_SOCKET_GETPEERNAME:
		case USAGE_SOCKET_WRITE:
		case USAGE_SOCKET_WRITEV:
		case USAGE_SOCKET_READ:
		case USAGE_SOCKET_READV:
		case USAGE_SOCKET_READBALE:
		case USAGE_SOCKET_WRITEABLE:

			nodeINAddr = ConvertToINAddr(USAGE_TEST_HOST);
			//此函數(shù)用于將無符號短整型值從主機(jī)轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序。
			nPort = HTONS(USAGE_TEST_PORT);

			//這里的ISOCKET_Connect()其實(shí)有兩個作用,一個是網(wǎng)絡(luò)連接
			//另一個是進(jìn)行回調(diào)的注冊
			if ((iRetValue = ISOCKET_Connect (pme->pISocket, nodeINAddr, nPort, 
				ConnectCBFun, (void *)pme))  != AEE_NET_SUCCESS)
				if (iRetValue != AEE_NET_WOULDBLOCK) {
					//函數(shù)ISOCKET_GetLastError不能注冊回調(diào),直接返回值
					lastError = ISOCKET_GetLastError(pme->pISocket);
					SPRINTF(psz, "ERROR Number : %u",lastError);
					DisplayOutput(pme, 2, psz);
				}
			DisplayOutput (pme, 1, "Connecting...");
			break;

		case USAGE_SOCKET_CANCEL:
			if(pme->pISocket) {
				ISOCKET_Cancel (pme->pISocket, 0, 0);
				DisplayOutput (pme, 1, "Socket Canceled");
			}
			else
				DisplayOutput(pme,1,"The Net Is Not Open!");
			break;

		case USAGE_SOCKET_SENDTO:
		case USAGE_SOCKET_RECVFROM:
			{
				int32 iRetValue = 0;
				INAddr nodeINAddr;
				uint16 nPort;
				int  rv;
				char pszSendData[100] = "UDP packet sent to and received from echo-port of remote host...";
				char pszRecvData[100] = {0};
				
				if(pme->pISocket)
					ISOCKET_Release(pme->pISocket);
				pme->pISocket = INETMGR_OpenSocket(pme->pINetMgr,AEE_SOCK_DGRAM);
				if(!pme->pISocket) {
					DisplayOutput(pme,2,"Socket can't open!");
					return TRUE;
				}
				nodeINAddr = ConvertToINAddr(TIMESERVER_HOST);
				nPort = HTONS(TIMESERVER_PORT);
				//ISOCKET_Connect(pme->pISocket,nodeINAddr,nPort,ConnectCBFun,pme);
				ISOCKET_Writeable(pme->pISocket,CommonWriteCB,pme);
				iRetValue = ISOCKET_SendTo(pme->pISocket,(byte*)pszSendData,
					(uint16)STRLEN(pszSendData),0,nodeINAddr,nPort);
				if(iRetValue == AEE_NET_ERROR){
					DisplayOutput(pme,3,"Send Error!");
					return FALSE;
				}
				else if(iRetValue > 0) {
					ISOCKET_Readable(pme->pISocket,CommonReadCB,pme);
					rv = ISOCKET_RecvFrom(pme->pISocket,(byte*)pszRecvData,sizeof(pszRecvData),
						0,&nodeINAddr,&nPort);
					if(rv == AEE_NET_WOULDBLOCK)
						return TRUE;
					else if(rv > 0) {
						ISOCKET_Cancel(pme->pISocket,CommonReadCB,pme);
						DisplayOutput(pme,3,pszRecvData);
					}
						
				}
				break;
			}

		default:
			break;
		}
		return TRUE;
	}
	return FALSE;
}

/*!
 *		@brief:		讀回調(diào)函數(shù)
 *		@para:		pUser指向用戶的指針
 */
void CommonReadCB(void *pUser)
{
	CNetSocket * pMe = (CNetSocket*)pUser;
	ISocket *piSock = pMe->pISocket;
	
	switch (pMe->APIFnType) {
	case USAGE_BASIC_USAGE:
		{
            int32 rv;
            char szBuf[100] = {0};
            rv = ISOCKET_Read(piSock, (byte *)szBuf, sizeof(szBuf));
			//由于ISOCKET_Read函數(shù)是立即返回,所以這里直接可以從其返回值
			//rv來判定執(zhí)行狀況,如果是AEE_NET_WOULDBLOCK說明沒有可用數(shù)據(jù)
			//但是連接仍然有效,即,仍然處于接受數(shù)據(jù)的有效狀態(tài)
            if (rv == AEE_NET_WOULDBLOCK) {
				ISOCKET_Readable(piSock, CommonReadCB, (void*)pMe); 
				return;
            } 
			//如果套接字未處于接收數(shù)據(jù)的有效狀態(tài),則返回AEE_NET_ERROR錯誤
            else if (rv == AEE_NET_ERROR) 
				DisplayOutput (pMe, 1, "Read Error!");
			//如果“rv > 0”則表示讀取成功,rv大小表示讀取的字節(jié)數(shù)目
            else if (rv > 0)
				DisplayOutput (pMe, 4, szBuf);
			//如果不再有需要接受的數(shù)據(jù),且對等端已經(jīng)斷開連接,則返回0
            else
				DisplayOutput (pMe, 1, "No Data!");
		}
		break;
	case USAGE_SOCKET_WRITE:
	case USAGE_SOCKET_WRITEABLE:
		{
            int32 rv;
            char szBuf[100] = {0};
            rv = ISOCKET_Read(piSock, (byte*)szBuf, sizeof(szBuf));
            if (rv == AEE_NET_WOULDBLOCK) {
				ISOCKET_Readable(piSock, CommonReadCB, (void*)pMe); 
				return;
            } 
            else if (rv == AEE_NET_ERROR) 
				DisplayOutput (pMe, 1, "Read Error!");
            else if (rv > 0)
				DisplayOutput (pMe, 1, szBuf);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av福利| 色综合久久中文字幕综合网| 中文字幕欧美区| 91电影在线观看| 国产麻豆一精品一av一免费| 亚洲精品第一国产综合野| 久久久久久免费网| 欧美三级日韩三级| 99精品国产99久久久久久白柏| 亚洲va天堂va国产va久| 欧美高清在线视频| 精品国产一区二区精华| 欧美色电影在线| 色综合色狠狠天天综合色| 狠狠色丁香婷婷综合| 亚洲大片精品永久免费| 亚洲视频免费观看| 日本一区二区三区电影| 日韩精品在线看片z| 欧美日韩亚洲另类| 色综合色狠狠综合色| 成人激情电影免费在线观看| 狠狠狠色丁香婷婷综合激情| 偷窥少妇高潮呻吟av久久免费| 最新成人av在线| 国产精品色婷婷久久58| 久久久久久日产精品| 久久网站最新地址| 亚洲精品在线免费观看视频| 日韩视频一区二区| 8v天堂国产在线一区二区| 日本电影欧美片| 一本大道久久a久久综合| av一区二区不卡| 成人免费观看视频| 成人av免费在线观看| 大白屁股一区二区视频| 国产乱码精品1区2区3区| 精品一区二区在线观看| 久久av老司机精品网站导航| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲高清不卡在线观看| 亚洲成人一区二区| 亚洲aaa精品| 日韩和欧美的一区| 日本成人在线网站| 久久av老司机精品网站导航| 黄色资源网久久资源365| 国产自产v一区二区三区c| 国产精品正在播放| 成人国产免费视频| 成人av网址在线观看| 一本大道av一区二区在线播放| 91香蕉视频在线| 91福利区一区二区三区| 91精品国产色综合久久不卡电影| 91麻豆精品国产91久久久久久久久| 91精品在线观看入口| 欧美电影免费观看高清完整版在线观看 | 国产精品自产自拍| 国产精品传媒入口麻豆| 日韩一区中文字幕| 亚洲成a人在线观看| 五月婷婷激情综合网| 石原莉奈在线亚洲三区| 日韩国产精品久久久久久亚洲| 亚洲6080在线| 激情综合网天天干| 国产91在线|亚洲| 成人app在线| 色999日韩国产欧美一区二区| 欧洲一区二区三区免费视频| 欧美精品一卡两卡| 精品日产卡一卡二卡麻豆| 中文字幕免费观看一区| 一区二区三区国产精华| 爽爽淫人综合网网站| 韩国一区二区视频| 99久久久久久99| 在线播放欧美女士性生活| 日韩欧美二区三区| 亚洲精品日韩综合观看成人91| 日韩精品高清不卡| 成人在线视频一区| 欧美挠脚心视频网站| 欧美国产一区视频在线观看| 又紧又大又爽精品一区二区| 久久丁香综合五月国产三级网站 | 国产一区二区看久久| 99国产精品国产精品久久| 3d动漫精品啪啪| 国产情人综合久久777777| 亚洲午夜久久久久久久久久久 | 美女mm1313爽爽久久久蜜臀| 99免费精品视频| 欧美大片国产精品| 一区二区久久久| 国产麻豆成人传媒免费观看| 在线日韩一区二区| 国产日韩欧美精品综合| 视频精品一区二区| 91久久线看在观草草青青| 久久精品视频网| 日韩在线播放一区二区| 一本一道久久a久久精品 | 国产精品短视频| 国内外成人在线视频| 欧美浪妇xxxx高跟鞋交| 中文字幕亚洲欧美在线不卡| 激情综合亚洲精品| 欧美日韩国产在线观看| 亚洲欧美偷拍另类a∨色屁股| 精品在线观看视频| 日韩一区二区三区在线观看| 亚洲影视在线播放| www.欧美亚洲| 国产亚洲成av人在线观看导航| 麻豆国产精品视频| 欧美日韩精品三区| 一区二区三区日韩欧美| 粉嫩久久99精品久久久久久夜| 日韩一区二区电影网| 亚洲国产sm捆绑调教视频| 色狠狠一区二区| 亚洲美女免费视频| 99久久99久久精品国产片果冻| 国产清纯白嫩初高生在线观看91| 卡一卡二国产精品| 欧美一区二区大片| 视频一区欧美日韩| 欧美精选午夜久久久乱码6080| 一区二区三区欧美| 色欧美日韩亚洲| 夜夜亚洲天天久久| 欧美最新大片在线看| 一区二区三区中文免费| 欧美性受极品xxxx喷水| 亚洲国产成人av| 欧美男男青年gay1069videost| 午夜日韩在线观看| 欧美高清你懂得| 午夜精品在线看| 欧美一区二区三区免费在线看| 日韩电影在线观看网站| 制服丝袜在线91| 麻豆一区二区三区| 久久久久久久久久电影| 岛国一区二区三区| 亚洲精品伦理在线| 在线精品视频小说1| 午夜久久久影院| 欧美一区二区在线看| 免费日韩伦理电影| 精品88久久久久88久久久| 国产河南妇女毛片精品久久久 | 国产嫩草影院久久久久| 成人小视频免费观看| 自拍视频在线观看一区二区| 不卡的av中国片| 亚洲私人黄色宅男| 欧美视频完全免费看| 免费高清在线一区| 国产欧美一二三区| 色悠悠久久综合| 日韩高清不卡一区| 久久久精品综合| 色综合久久综合网97色综合| 亚洲电影一级黄| 欧美精品一区二区三区蜜臀| 丁香激情综合五月| 午夜电影一区二区三区| 久久久美女艺术照精彩视频福利播放| 不卡欧美aaaaa| 日本成人在线不卡视频| 欧美激情中文不卡| 欧美日免费三级在线| 激情综合网av| 亚洲精品中文字幕乱码三区| 91精品啪在线观看国产60岁| 粉嫩av亚洲一区二区图片| 午夜久久久久久久久久一区二区| 久久久影视传媒| 欧美亚洲国产一卡| 国产激情视频一区二区在线观看| 亚洲在线视频网站| 欧美激情一区二区三区在线| 欧美日韩视频在线观看一区二区三区| 久久精品国产成人一区二区三区| 国产精品国产三级国产aⅴ无密码| 欧美日本高清视频在线观看| 国产suv精品一区二区三区| 亚洲一线二线三线久久久| 久久久久9999亚洲精品| 欧美日韩激情一区二区| 不卡电影一区二区三区| 经典三级一区二区| 亚洲国产精品精华液网站| 国产精品美女久久久久久久网站| 欧美一区二区国产| 欧美吞精做爰啪啪高潮|