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

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

?? dwinsock.c

?? Library of C functions that allows a program to use WinSock 2 functionality if it is available or fa
?? C
字號:
//
// DWINSOCK.C	Dynamic WinSock
//
//				Functions for dynamically linking to
//				best available WinSock.
//
//				Dynamically links to WS2_32.DLL or
//				if WinSock 2 isn't available, it
//				dynamically links to WSOCK32.DLL.
//
//

#define INCL_WINSOCK_API_TYPEDEFS 1
#include <winsock2.h>
#include <wsipx.h>
#include <tchar.h>
#include "dwinsock.h"


//
// Declare global function pointers
//
#define DWINSOCK_GLOBAL
#include "dwnsock1.inc"
#include "dwnsock2.inc"

//
// Internal Functions and data
//
static BOOL MapFunctionPointers(BOOL fMapVersion2);
static int  FakeEnumProtocols(LPWSAPROTOCOL_INFO lpProtocolBuffer, 
							  LPDWORD pdwBufLen);
int IPXAddressToString(LPSOCKADDR_IPX pAddr, 
					   DWORD dwAddrLen,
					   LPTSTR lpAddrStr,
					   LPDWORD pdwStrLen);

static HANDLE	hndlWinSock = INVALID_HANDLE_VALUE;
static int		nVersion	= 0;
static int		nMaxUdp		= 0;

////////////////////////////////////////////////////////////

int DWSInitWinSock(void)
{
	WORD wVersionRequested;
	BOOL f2Loaded = TRUE;
	WSADATA wsaData;
	int nRet;

	//
	// Attempt to dynamically load WS2_32.DLL
	//
	hndlWinSock = LoadLibrary("WS2_32.DLL");
	if (hndlWinSock == NULL)
	{
		//
		// Couldn't load WinSock 2, try 1.1
		//
		f2Loaded = FALSE;
		hndlWinSock = LoadLibrary("WSOCK32.DLL");
		if (hndlWinSock == NULL)
			return 0;
	}

	//
	// Use GetProcAddress to initialize 
	// the function pointers
	//
	if (!MapFunctionPointers(f2Loaded))
		return 0;

	//
	// If WinSock 2 was loaded, ask for 2.2 otherwise 1.1
	//
	if (f2Loaded)
		wVersionRequested = MAKEWORD(2,2);
	else
		wVersionRequested = MAKEWORD(1,1);

	//
	// Call WSAStartup()
	//
	nRet = p_WSAStartup(wVersionRequested, &wsaData);
	if (nRet)
	{
		FreeLibrary(hndlWinSock);
		return 0;
	}

	if (wVersionRequested != wsaData.wVersion)
	{
		FreeLibrary(hndlWinSock);
		return 0;
	}

	// Save Max UDP for use with 1.1
	nMaxUdp = wsaData.iMaxUdpDg;

	//
	// Return 1 or 2
	//
	nVersion = f2Loaded ? 2 : 1; 
	return(nVersion);
}

////////////////////////////////////////////////////////////

BOOL DWSFreeWinSock(void)
{
	if (p_WSACleanup != NULL)
		p_WSACleanup();
	nVersion = 0;
	return(FreeLibrary(hndlWinSock));
}

////////////////////////////////////////////////////////////

BOOL MapFunctionPointers(BOOL fMapVersion2)
{
	//
	// This variable must be declared
	// with this name in order to use
	// #define DWINSOCK_GETPROCADDRESS
	//
	BOOL fOK = TRUE;

	//
	// GetProcAddress for functions 
	// available in both 1.1 and 2
	//
	#define DWINSOCK_GETPROCADDRESS
	#include "dwnsock1.inc"

	//
	// If that went OK, and we're supposed 
	// to map version 2, then do GetProcAddress
	// for functions only available in WinSock 2
	//
	if (fOK && fMapVersion2)
	{
		#include "dwnsock2.inc"
	}
	return fOK;
}

////////////////////////////////////////////////////////////

int DWSVersion(void)
{
	return nVersion;
}

////////////////////////////////////////////////////////////

int DWSMaxMsgSize(SOCKET socket)
{
	int nOptVal;
	int nOptLen;
	int nRet;

	//
	// If WinSock isn't loaded
	// return 0
	//
	if (nVersion == 0)
		return 0;

	//
	// If we're using WinSock 1.1
	// return the previously saved
	// info from WSADATA
	//
	if (nVersion == 1)
		return nMaxUdp;

	//
	// Must be WinSock 2
	//

	// 
	// Use getsockopt() to find
	// the max message size for
	// this socket
	//
	nOptLen = sizeof(int);
	nRet = p_getsockopt(socket,
					  SOL_SOCKET,
					  SO_MAX_MSG_SIZE,
					  (char *)&nOptVal,
					  &nOptLen);
	if (nRet == SOCKET_ERROR)
		return SOCKET_ERROR;
	return nOptVal;
}

////////////////////////////////////////////////////////////

int DWSAddressToString(LPSOCKADDR pAddr, DWORD dwAddrLen,
					   LPTSTR lpAddrStr, LPDWORD pdwStrLen)
{
	LPTSTR			lpStr;
	LPSOCKADDR_IN	pInAddr;
	int				nRet = 0;

	lpAddrStr[0] = '\0';

	// 
	// If WinSock isn't loaded, return 1
	//
	if (nVersion == 0)
		return 1;

	//
	// If using WinSock 1.1 then assume IP
	//
	if (nVersion == 1)
	{
		//
		// Convert address with inet_ntoa
		//
		pInAddr = (LPSOCKADDR_IN)pAddr;
		lpStr = p_inet_ntoa(pInAddr->sin_addr);
		if (lpStr == NULL)
		{
			p_WSASetLastError(WSAEINVAL);
			*pdwStrLen = 0;
			return SOCKET_ERROR;	
		}
		#ifdef UNICODE
			//
			// Convert inet_ntoa string to wide char
			//
			nRet = MultiByteToWideChar(CP_ACP,
										0,
										lpStr,
										-1,
										lpAddrStr,
										*pdwStrLen);
			if (nRet == 0)
			{
				if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
					p_WSASetLastError(WSAEFAULT);
				else
					p_WSASetLastError(WSAEINVALID);
				return SOCKET_ERROR;
			}
		#else
			//
			// ANSI -- Check the string length
			//
			if (strlen(lpStr) > *pdwStrLen)
			{
				p_WSASetLastError(WSAEFAULT);
				*pdwStrLen = strlen(lpStr);
				return SOCKET_ERROR;
			}
			strcpy(lpAddrStr, lpStr);
			*pdwStrLen = strlen(lpStr);
			return 0;
		#endif
	}

	//
	// Must be WinSock 2
	//
	nRet = p_WSAAddressToString(pAddr,
							    dwAddrLen,
							    NULL,
							    lpAddrStr,
							    pdwStrLen);
	//
	// Check for "unsupported" families
	//
	if (nRet == SOCKET_ERROR && p_WSAGetLastError() == WSAEOPNOTSUPP)
	{
		if (pAddr->sa_family == AF_IPX)
		{
			nRet = IPXAddressToString((LPSOCKADDR_IPX)pAddr,
									  dwAddrLen,
									  lpAddrStr,
									  pdwStrLen);
		}
	}
	return nRet;
}

////////////////////////////////////////////////////////////

int DWSEnumProtocols(LPWSAPROTOCOL_INFO lpProtocolBuffer, 
					 LPDWORD pdwBufLen)
{
	if (nVersion == 0)
		return 0;

	if (nVersion == 1)
		return(FakeEnumProtocols(lpProtocolBuffer,
								 pdwBufLen));
	//
	// Must be WinSock 2
	//
	return(p_WSAEnumProtocols(NULL,
							 lpProtocolBuffer,
							 pdwBufLen));
}

////////////////////////////////////////////////////////////

int FakeEnumProtocols(LPWSAPROTOCOL_INFO lpProtocolBuffer, 
					  LPDWORD pdwBufLen)
{
	WSAPROTOCOL_INFO FakeTcp;
	WSAPROTOCOL_INFO FakeUdp;
	LPWSAPROTOCOL_INFO lpInfo;

	//
	// Assume WinSock 1.1, we're returning
	// 2 WSAPROTOCOL_INFO structures.
	// 1 for TCP, 1 for UDP
	//

	//
	// Check the buffer size
	//
	if (*pdwBufLen < (sizeof(WSAPROTOCOL_INFO)*2))
	{
		*pdwBufLen = (sizeof(WSAPROTOCOL_INFO)*2);
		p_WSASetLastError(WSAENOBUFS);
		return SOCKET_ERROR;
	}

	//
	// Build fake TCP entry
	//
	memset(&FakeTcp, 0, sizeof(WSAPROTOCOL_INFO));
	FakeTcp.dwServiceFlags1 = XP1_GUARANTEED_DELIVERY	|
							  XP1_GUARANTEED_ORDER		|
							  XP1_GRACEFUL_CLOSE		|
							  XP1_EXPEDITED_DATA;
	FakeTcp.dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO;
	FakeUdp.ProtocolChain.ChainLen = 1;	// Base protocol
	FakeTcp.dwCatalogEntryId= 1;;
	FakeTcp.iVersion		= 1;
	FakeTcp.iAddressFamily  = AF_INET;
	FakeTcp.iMaxSockAddr	= sizeof(SOCKADDR_IN);
	FakeTcp.iMinSockAddr	= sizeof(SOCKADDR_IN);
	FakeTcp.iSocketType		= SOCK_STREAM;
	FakeTcp.iProtocol		= IPPROTO_TCP;
	FakeTcp.iNetworkByteOrder = BIGENDIAN;
	FakeTcp.dwMessageSize	= 0;
	_tcscpy(FakeTcp.szProtocol, _TEXT("tcp"));

	//
	// Build fake UDP entry
	//
	memset(&FakeUdp, 0, sizeof(WSAPROTOCOL_INFO));
	FakeUdp.dwServiceFlags1 = XP1_CONNECTIONLESS		|
							  XP1_MESSAGE_ORIENTED		|
							  XP1_SUPPORT_BROADCAST;		
							  // Might want to add multipoint
	FakeUdp.dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO;
	FakeUdp.ProtocolChain.ChainLen = 1;	// Base protocol
	FakeUdp.dwCatalogEntryId= 2;;
	FakeUdp.iVersion		= 1;
	FakeUdp.iAddressFamily  = AF_INET;
	FakeUdp.iMaxSockAddr	= sizeof(SOCKADDR_IN);
	FakeUdp.iMinSockAddr	= sizeof(SOCKADDR_IN);
	FakeUdp.iSocketType		= SOCK_DGRAM;
	FakeUdp.iProtocol		= IPPROTO_UDP;
	FakeUdp.iNetworkByteOrder = BIGENDIAN;
	FakeUdp.dwMessageSize	= nMaxUdp;	// The reason this can't be static
	_tcscpy(FakeUdp.szProtocol, _TEXT("udp"));

	//
	// Copy the fake entries to the supplied buffer
	lpInfo = lpProtocolBuffer;
	memcpy(lpInfo, &FakeTcp, sizeof(WSAPROTOCOL_INFO));
	lpInfo++;
	memcpy(lpInfo, &FakeUdp, sizeof(WSAPROTOCOL_INFO));

	//
	// Returning 2 protocols
	//	
	return 2;
}

////////////////////////////////////////////////////////////

int DWSSelectProtocols(
					DWORD dwSetFlags,
					DWORD dwNotSetFlags,
					LPWSAPROTOCOL_INFO lpProtocolBuffer,
					LPDWORD lpdwBufferLength
					)
{
	LPBYTE				pBuf;
	LPWSAPROTOCOL_INFO	pInfo;
	DWORD				dwNeededLen;
	LPWSAPROTOCOL_INFO	pRetInfo;
	DWORD				dwRetLen;
	int					nCount;
	int					nMatchCount;
	int					nRet;

	if (nVersion == 0)
		return 0;

	//
	// Determine needed buffer size
	//
	dwNeededLen = 0;
	nRet = DWSEnumProtocols(NULL, &dwNeededLen);
	if (nRet == SOCKET_ERROR)
	{
		if (p_WSAGetLastError() != WSAENOBUFS)
			return SOCKET_ERROR;
	}

	//
	// Allocate the buffer
	//
	pBuf = malloc(dwNeededLen);
	if (pBuf == NULL)
	{
		p_WSASetLastError(WSAENOBUFS);
		return SOCKET_ERROR;
	}

	//
	// Make the "real" call
	//
	nRet = DWSEnumProtocols((LPWSAPROTOCOL_INFO)pBuf, 
							 &dwNeededLen);
	if (nRet == SOCKET_ERROR)
	{
		free(pBuf);
		return SOCKET_ERROR;
	}

	//
	// Helper macros for selecting protocols
	//
	#define REJECTSET(f) \
	    ((dwSetFlags & f) && !(pInfo->dwServiceFlags1 & f))
	#define REJECTNOTSET(f) \
	    ((dwNotSetFlags &f) && (pInfo->dwServiceFlags1 & f))
	#define REJECTEDBY(f) (REJECTSET(f) || REJECTNOTSET(f))

	//
	// Loop through the protocols making selections
	//
	pInfo = (LPWSAPROTOCOL_INFO)pBuf;	
	pRetInfo = lpProtocolBuffer;
	dwRetLen = 0;
	nMatchCount = 0;
	for(nCount = 0; nCount < nRet; nCount++)
	{
		//
		// Check all of the requested flags
		//
		while(1)
		{
			if (REJECTEDBY(XP1_CONNECTIONLESS))
				break;
			if (REJECTEDBY(XP1_GUARANTEED_DELIVERY))
				break;
			if (REJECTEDBY(XP1_GUARANTEED_ORDER))
				break;
			if (REJECTEDBY(XP1_MESSAGE_ORIENTED))
				break;
			if (REJECTEDBY(XP1_PSEUDO_STREAM))
				break;
			if (REJECTEDBY(XP1_GRACEFUL_CLOSE))
				break;
			if (REJECTEDBY(XP1_EXPEDITED_DATA))
				break;
			if (REJECTEDBY(XP1_CONNECT_DATA))
				break;
			if (REJECTEDBY(XP1_DISCONNECT_DATA))
				break;
			if (REJECTEDBY(XP1_SUPPORT_BROADCAST)) 
				break;
			if (REJECTEDBY(XP1_SUPPORT_MULTIPOINT))
				break;
			if (REJECTEDBY(XP1_MULTIPOINT_DATA_PLANE))
				break;
			if (REJECTEDBY(XP1_QOS_SUPPORTED))
				break;
			if (REJECTEDBY(XP1_UNI_SEND))
				break;
			if (REJECTEDBY(XP1_UNI_RECV))
				break;
			if (REJECTEDBY(XP1_IFS_HANDLES))
				break;
			if (REJECTEDBY(XP1_PARTIAL_MESSAGE))
				break;
			//
			// If we made it here, 
			//the protocol meets all requirements
			//
			dwRetLen += sizeof(WSAPROTOCOL_INFO);
			if (dwRetLen > *lpdwBufferLength)
			{
				// The supplied buffer is too small
				p_WSASetLastError(WSAENOBUFS);
				*lpdwBufferLength = dwNeededLen;
				free(pBuf);
				return SOCKET_ERROR;
			}
			nMatchCount++;
			// Copy this protocol to the caller's buffer
			memcpy(pRetInfo, pInfo, sizeof(WSAPROTOCOL_INFO));
			pRetInfo++;
			break;
		}
		pInfo++;
	}
	free(pBuf);
	*lpdwBufferLength = dwRetLen;
	return(nMatchCount);
}

////////////////////////////////////////////////////////////

BOOL DWSDnsOnly(void)
{
	//
	// Return TRUE if DNS is the only name space provider
	//

	LPWSANAMESPACE_INFO pInfo;
	DWORD				dwBufLen;
	PBYTE				pBuf;
	int					nCount;
	BOOL				fRet = TRUE;
	int					nRet;

	//
	// If we're running on WinSock 1.1 return TRUE
	//
	if (nVersion == 1)
		return fRet;

	// WinSock 2

	//
	// Intentionally generate an error
	// to get the required buffer size
	//
	dwBufLen = 0;
	nRet = p_WSAEnumNameSpaceProviders(&dwBufLen, NULL);
	if (nRet == SOCKET_ERROR)
	{
		if (p_WSAGetLastError() != WSAEFAULT)
			return fRet;
	}

	//
	// dwBufLen now equals needed size
	//
	pBuf = malloc(dwBufLen+1);
	if (pBuf == NULL)
		return fRet;

	//
	// Now, make the "real" call
	//
	nRet = p_WSAEnumNameSpaceProviders(&dwBufLen,
									   (LPWSANAMESPACE_INFO)pBuf);
	if (nRet == SOCKET_ERROR)
	{
		free(pBuf);
		return fRet;
	}

	pInfo = (LPWSANAMESPACE_INFO)pBuf;
	for (nCount = 0; nCount < nRet; nCount++)
	{
		if (pInfo->dwNameSpace != NS_DNS)
		{
			fRet = FALSE;
			break;
		}
		pInfo++;
	}
	free(pBuf);
	return fRet;
}

////////////////////////////////////////////////////////////

char NibbleToHex(BYTE b)
{
    if (b < 10)
		return (b + '0');

    return (b - 10 + 'A');
}

void BinToHex(PBYTE pBytes, int nNbrBytes, LPSTR lpStr)
{
	BYTE b;
    while(nNbrBytes--)
    {
		// High order nibble first
		b = (*pBytes >> 4);
		*lpStr = NibbleToHex(b);
		lpStr++;
		// Then low order nibble
		b = (*pBytes & 0x0F);
		*lpStr = NibbleToHex(b);
		lpStr++;
		pBytes++;
    }
    *lpStr = '\0';
}

////////////////////////////////////////////////////////////

//
// Workaround for WSAAddressToString()/IPX bug
//
int IPXAddressToString(LPSOCKADDR_IPX pAddr, 
					   DWORD dwAddrLen,
					   LPTSTR lpAddrStr,
					   LPDWORD pdwStrLen)
{
	char szAddr[32];
	char szTmp[20];
	char *cp = szAddr;

	//
	// Check destination length
	//
	if (*pdwStrLen < 27)
	{
		p_WSASetLastError(WSAEINVAL);
		return SOCKET_ERROR;
	}

	//
	// Convert network number
	//
    BinToHex((PBYTE)&pAddr->sa_netnum, 4, szTmp);
	strcpy(szAddr, szTmp);
    strcat(szAddr, ".");
    
	// Node Number
    BinToHex((PBYTE)&pAddr->sa_nodenum, 6, szTmp);
    strcat(szAddr, szTmp);
    strcat(szAddr, ".");

	// IPX Address Socket number
    BinToHex((PBYTE)&pAddr->sa_socket, 2, szTmp);
    strcat(szAddr, szTmp);

	strcpy(lpAddrStr, szAddr);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品一区二区久久| 欧美色男人天堂| 久久精品视频网| 成人三级伦理片| 国产精品婷婷午夜在线观看| 北条麻妃一区二区三区| 亚洲欧美激情插| 欧美年轻男男videosbes| 亚洲第一会所有码转帖| 欧美日韩1234| 精品一区二区三区香蕉蜜桃| 国产午夜亚洲精品不卡| 成人午夜又粗又硬又大| 亚洲影院免费观看| 日韩一区二区三区三四区视频在线观看 | 亚洲国产欧美另类丝袜| 日韩小视频在线观看专区| 国产白丝精品91爽爽久久 | 精品盗摄一区二区三区| 国产91对白在线观看九色| 亚洲免费色视频| 日韩一区二区在线看| 国产成人精品影院| 亚洲综合视频网| 精品处破学生在线二十三| 成人av影视在线观看| 亚洲大片一区二区三区| 久久婷婷成人综合色| 在线看日本不卡| 激情文学综合插| 亚洲自拍欧美精品| 久久久久久久久久久99999| 91影视在线播放| 美国十次了思思久久精品导航| 国产精品美女久久久久久久久| 欧美日韩精品是欧美日韩精品| 国产精华液一区二区三区| 亚洲自拍偷拍欧美| 日本一区二区三区dvd视频在线| 在线观看国产一区二区| 国产成人激情av| 日韩精品成人一区二区三区| 国产精品美女一区二区在线观看| 欧美精品日日鲁夜夜添| av一区二区久久| 国产乱子轮精品视频| 午夜精品久久久久久不卡8050 | 亚洲国产激情av| 日韩一级黄色片| 欧美丝袜自拍制服另类| 成人夜色视频网站在线观看| 日本特黄久久久高潮| 亚洲精品免费一二三区| 国产午夜一区二区三区| 日韩一级二级三级| 欧美日韩国产bt| 色猫猫国产区一区二在线视频| 国产成人av福利| 久久99国产精品免费网站| 亚洲成人av在线电影| 中文字幕日韩精品一区| 国产欧美在线观看一区| 欧美精品一区二区三区高清aⅴ | 日韩高清在线观看| 亚洲一区在线视频| 中文字幕一区二区三区四区| 久久久91精品国产一区二区精品 | 欧美人妖巨大在线| 在线免费观看成人短视频| 99九九99九九九视频精品| 成人中文字幕电影| 国产69精品久久久久777| 国产乱人伦偷精品视频免下载| 青青草97国产精品免费观看 | 91在线免费视频观看| 99视频一区二区| 91亚洲男人天堂| 91在线观看美女| 91麻豆精品在线观看| 91网上在线视频| 色狠狠av一区二区三区| 在线免费观看日本欧美| 欧美色电影在线| 6080亚洲精品一区二区| 欧美成人性战久久| 精品粉嫩aⅴ一区二区三区四区| 精品国产免费人成在线观看| 久久综合九色综合久久久精品综合| 精品日韩99亚洲| 国产欧美日韩综合| 中文字幕中文字幕一区| 亚洲精品ww久久久久久p站| 亚洲图片欧美视频| 青青草伊人久久| 韩国一区二区在线观看| 福利一区在线观看| av中文字幕不卡| 欧美日韩一区二区三区在线| 欧美一区二区在线视频| 2021中文字幕一区亚洲| 国产精品欧美久久久久无广告 | 欧美日韩一区二区在线观看| 日本乱人伦aⅴ精品| 欧美日产在线观看| 日韩美女天天操| 欧美激情艳妇裸体舞| 亚洲欧美精品午睡沙发| 天天综合色天天| 国产精品一品视频| 欧洲一区在线观看| 精品国免费一区二区三区| 一区在线观看免费| 免费在线观看一区二区三区| 国产成人av电影在线| 欧美三级日韩三级国产三级| 久久综合99re88久久爱| 一区二区三区91| 精品一区二区成人精品| 色婷婷久久久亚洲一区二区三区 | 99热精品国产| 日韩一级欧美一级| 亚洲欧洲综合另类| 蜜桃精品视频在线观看| 97se亚洲国产综合在线| 欧美高清性hdvideosex| 国产精品久久久久久妇女6080 | 精品福利视频一区二区三区| 中文字幕一区二区三区四区| 久久精品国产亚洲高清剧情介绍 | 国产一区二区0| 欧美日韩亚洲不卡| 国产精品免费视频一区| 另类综合日韩欧美亚洲| 欧美亚洲国产bt| 国产欧美日韩中文久久| 日韩激情在线观看| 91免费国产在线| 国产清纯白嫩初高生在线观看91| 午夜免费欧美电影| 色av一区二区| 欧美国产日产图区| 黄色精品一二区| 欧美乱妇一区二区三区不卡视频| 综合中文字幕亚洲| 丝袜美腿亚洲色图| 色婷婷综合久久久| 久久影院午夜论| 日韩精品免费专区| 97久久超碰国产精品| 久久久久久免费毛片精品| 日本欧美肥老太交大片| 日本韩国视频一区二区| 中文字幕亚洲欧美在线不卡| 国产尤物一区二区在线| 欧美电影免费观看高清完整版在线观看| 亚洲欧美日韩在线不卡| 不卡的电视剧免费网站有什么| 国产亚洲福利社区一区| 国产精一品亚洲二区在线视频| 日韩欧美国产综合一区 | 91国偷自产一区二区三区观看 | 国产精品久久久久aaaa樱花 | 99久久久国产精品免费蜜臀| 欧美福利一区二区| 亚洲一区二区三区三| 福利一区福利二区| 国产欧美1区2区3区| 国产精品1区2区3区在线观看| 精品国产99国产精品| 国产精品 日产精品 欧美精品| www久久精品| 国产不卡在线视频| 国产精品天天摸av网| 不卡的av电影| 亚洲精品乱码久久久久久黑人 | 国产成人精品www牛牛影视| 久久久久久一二三区| 国产福利精品一区| 中文av一区二区| 色综合夜色一区| 亚洲成av人片观看| 777xxx欧美| 国内一区二区在线| 欧美经典一区二区三区| 99久久久久久99| 亚洲一区在线视频观看| 欧美一区二区在线免费观看| 精品亚洲成av人在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 国产乱子伦视频一区二区三区 | 亚洲一区二区三区四区的| 欧美三级韩国三级日本一级| 欧美96一区二区免费视频| 国产亚洲短视频| 91免费观看国产| 首页欧美精品中文字幕| 久久久激情视频| 在线视频你懂得一区| 秋霞成人午夜伦在线观看| 日本一区二区三区四区|