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

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

?? rtpudpv6transmitter.cpp

?? jrtp庫(kù)
?? CPP
?? 第 1 頁 / 共 3 頁
字號(hào):
/*  This file is a part of JRTPLIB  Copyright (c) 1999-2007 Jori Liesenborgs  Contact: jori.liesenborgs@gmail.com  This library was developed at the "Expertisecentrum Digitale Media"  (http://www.edm.uhasselt.be), a research center of the Hasselt University  (http://www.uhasselt.be). The library is based upon work done for   my thesis at the School for Knowledge Technology (Belgium/The Netherlands).  Permission is hereby granted, free of charge, to any person obtaining a  copy of this software and associated documentation files (the "Software"),  to deal in the Software without restriction, including without limitation  the rights to use, copy, modify, merge, publish, distribute, sublicense,  and/or sell copies of the Software, and to permit persons to whom the  Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included  in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS  IN THE SOFTWARE.*/#include "rtpudpv6transmitter.h"#ifdef RTP_SUPPORT_IPV6#include "rtprawpacket.h"#include "rtpipv6address.h"#include "rtptimeutilities.h"#include "rtpdefines.h"#include <stdio.h>#if (defined(WIN32) || defined(_WIN32_WCE))	#define RTPSOCKERR								INVALID_SOCKET	#define RTPCLOSE(x)								closesocket(x)	#define RTPSOCKLENTYPE								int	#define RTPIOCTL								ioctlsocket#else // not Win32	#include <sys/socket.h>	#include <netinet/in.h>	#include <arpa/inet.h>	#include <sys/ioctl.h>	#include <net/if.h>	#include <string.h>	#include <netdb.h>	#include <unistd.h>	#ifdef RTP_HAVE_SYS_FILIO		#include <sys/filio.h>	#endif // RTP_HAVE_SYS_FILIO	#ifdef RTP_HAVE_SYS_SOCKIO		#include <sys/sockio.h>	#endif // RTP_HAVE_SYS_SOCKIO	#ifdef RTP_SUPPORT_IFADDRS		#include <ifaddrs.h>	#endif // RTP_SUPPORT_IFADDRS	#define RTPSOCKERR								-1	#define RTPCLOSE(x)								close(x)	#ifdef RTP_SOCKLENTYPE_UINT		#define RTPSOCKLENTYPE							unsigned int	#else		#define RTPSOCKLENTYPE							int	#endif // RTP_SOCKLENTYPE_UINT	#define RTPIOCTL								ioctl#endif // WIN32#include "rtpdebug.h"#define RTPUDPV6TRANS_MAXPACKSIZE							65535#define RTPUDPV6TRANS_IFREQBUFSIZE							8192#define RTPUDPV6TRANS_IS_MCASTADDR(x)							(x.s6_addr[0] == 0xFF)#define RTPUDPV6TRANS_MCASTMEMBERSHIP(socket,type,mcastip,status)	{\										struct ipv6_mreq mreq;\										\										mreq.ipv6mr_multiaddr = mcastip;\										mreq.ipv6mr_interface = mcastifidx;\										status = setsockopt(socket,IPPROTO_IPV6,type,(const char *)&mreq,sizeof(struct ipv6_mreq));\									}#ifdef RTP_SUPPORT_THREAD	#define MAINMUTEX_LOCK 		{ if (threadsafe) mainmutex.Lock(); }	#define MAINMUTEX_UNLOCK	{ if (threadsafe) mainmutex.Unlock(); }	#define WAITMUTEX_LOCK		{ if (threadsafe) waitmutex.Lock(); }	#define WAITMUTEX_UNLOCK	{ if (threadsafe) waitmutex.Unlock(); }#else	#define MAINMUTEX_LOCK	#define MAINMUTEX_UNLOCK	#define WAITMUTEX_LOCK	#define WAITMUTEX_UNLOCK#endif // RTP_SUPPORT_THREAD	inline bool operator==(const in6_addr &ip1,const in6_addr &ip2){	if (memcmp(&ip1,&ip2,sizeof(in6_addr)) == 0)		return true;	return false;}RTPUDPv6Transmitter::RTPUDPv6Transmitter(RTPMemoryManager *mgr) : RTPTransmitter(mgr),								  destinations(GetMemoryManager(),RTPMEM_TYPE_CLASS_DESTINATIONLISTHASHELEMENT),								  multicastgroups(GetMemoryManager(),RTPMEM_TYPE_CLASS_MULTICASTHASHELEMENT),								  acceptignoreinfo(GetMemoryManager(),RTPMEM_TYPE_CLASS_ACCEPTIGNOREHASHELEMENT){	created = false;	init = false;#if (defined(WIN32) || defined(_WIN32_WCE))	timeinit.Dummy();#endif // WIN32 || _WIN32_WCE}RTPUDPv6Transmitter::~RTPUDPv6Transmitter(){	Destroy();}int RTPUDPv6Transmitter::Init(bool tsafe){	if (init)		return ERR_RTP_UDPV6TRANS_ALREADYINIT;	#ifdef RTP_SUPPORT_THREAD	threadsafe = tsafe;	if (threadsafe)	{		int status;				status = mainmutex.Init();		if (status < 0)			return ERR_RTP_UDPV6TRANS_CANTINITMUTEX;		status = waitmutex.Init();		if (status < 0)			return ERR_RTP_UDPV6TRANS_CANTINITMUTEX;	}#else	if (tsafe)		return ERR_RTP_NOTHREADSUPPORT;#endif // RTP_SUPPORT_THREAD	init = true;	return 0;}int RTPUDPv6Transmitter::Create(size_t maximumpacketsize,const RTPTransmissionParams *transparams){	const RTPUDPv6TransmissionParams *params,defaultparams;	struct sockaddr_in6 addr;	RTPSOCKLENTYPE size;	int status;	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK	if (created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_ALREADYCREATED;	}		// Obtain transmission parameters		if (transparams == 0)		params = &defaultparams;	else	{		if (transparams->GetTransmissionProtocol() != RTPTransmitter::IPv6UDPProto)		{			MAINMUTEX_UNLOCK			return ERR_RTP_UDPV6TRANS_ILLEGALPARAMETERS;		}		params = (const RTPUDPv6TransmissionParams *)transparams;	}	// Check if portbase is even	if (params->GetPortbase()%2 != 0)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_PORTBASENOTEVEN;	}	// create sockets		rtpsock = socket(PF_INET6,SOCK_DGRAM,0);	if (rtpsock == RTPSOCKERR)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_CANTCREATESOCKET;	}	rtcpsock = socket(PF_INET6,SOCK_DGRAM,0);	if (rtcpsock == RTPSOCKERR)	{		RTPCLOSE(rtpsock);		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_CANTCREATESOCKET;	}		// set socket buffer sizes		size = params->GetRTPReceiveBuffer();	if (setsockopt(rtpsock,SOL_SOCKET,SO_RCVBUF,(const char *)&size,sizeof(int)) != 0)	{		RTPCLOSE(rtpsock);		RTPCLOSE(rtcpsock);		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_CANTSETRTPRECEIVEBUF;	}	size = params->GetRTPSendBuffer();	if (setsockopt(rtpsock,SOL_SOCKET,SO_SNDBUF,(const char *)&size,sizeof(int)) != 0)	{		RTPCLOSE(rtpsock);		RTPCLOSE(rtcpsock);		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_CANTSETRTPTRANSMITBUF;	}	size = params->GetRTCPReceiveBuffer();	if (setsockopt(rtcpsock,SOL_SOCKET,SO_RCVBUF,(const char *)&size,sizeof(int)) != 0)	{		RTPCLOSE(rtpsock);		RTPCLOSE(rtcpsock);		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_CANTSETRTCPRECEIVEBUF;	}	size = params->GetRTCPSendBuffer();	if (setsockopt(rtcpsock,SOL_SOCKET,SO_SNDBUF,(const char *)&size,sizeof(int)) != 0)	{		RTPCLOSE(rtpsock);		RTPCLOSE(rtcpsock);		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_CANTSETRTCPTRANSMITBUF;	}		// bind sockets	bindIP = params->GetBindIP();	mcastifidx = params->GetMulticastInterfaceIndex();		memset(&addr,0,sizeof(struct sockaddr_in6));	addr.sin6_family = AF_INET6;	addr.sin6_port = htons(params->GetPortbase());	addr.sin6_addr = bindIP;	if (bind(rtpsock,(struct sockaddr *)&addr,sizeof(struct sockaddr_in6)) != 0)	{		RTPCLOSE(rtpsock);		RTPCLOSE(rtcpsock);		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_CANTBINDRTPSOCKET;	}	memset(&addr,0,sizeof(struct sockaddr_in6));	addr.sin6_family = AF_INET6;	addr.sin6_port = htons(params->GetPortbase()+1);	addr.sin6_addr = bindIP;	if (bind(rtcpsock,(struct sockaddr *)&addr,sizeof(struct sockaddr_in6)) != 0)	{		RTPCLOSE(rtpsock);		RTPCLOSE(rtcpsock);		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_CANTBINDRTCPSOCKET;	}	// Try to obtain local IP addresses	localIPs = params->GetLocalIPList();	if (localIPs.empty()) // User did not provide list of local IP addresses, calculate them	{		int status;				if ((status = CreateLocalIPList()) < 0)		{			RTPCLOSE(rtpsock);			RTPCLOSE(rtcpsock);			MAINMUTEX_UNLOCK			return status;		}#ifdef RTPDEBUG		std::cout << "Found these local IP addresses:" << std::endl;				std::list<in6_addr>::const_iterator it;		for (it = localIPs.begin() ; it != localIPs.end() ; it++)		{			RTPIPv6Address a(*it);			std::cout << a.GetAddressString() << std::endl;		}#endif // RTPDEBUG	}#ifdef RTP_SUPPORT_IPV6MULTICAST	if (SetMulticastTTL(params->GetMulticastTTL()))		supportsmulticasting = true;	else		supportsmulticasting = false;#else // no multicast support enabled	supportsmulticasting = false;#endif // RTP_SUPPORT_IPV6MULTICAST	if ((status = CreateAbortDescriptors()) < 0)	{		RTPCLOSE(rtpsock);		RTPCLOSE(rtcpsock);		MAINMUTEX_UNLOCK		return status;	}		if (maximumpacketsize > RTPUDPV6TRANS_MAXPACKSIZE)	{		RTPCLOSE(rtpsock);		RTPCLOSE(rtcpsock);		DestroyAbortDescriptors();		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_SPECIFIEDSIZETOOBIG;	}		maxpacksize = maximumpacketsize;	portbase = params->GetPortbase();	multicastTTL = params->GetMulticastTTL();	receivemode = RTPTransmitter::AcceptAll;	localhostname = 0;	localhostnamelength = 0;	waitingfordata = false;	created = true;	MAINMUTEX_UNLOCK	return 0;}void RTPUDPv6Transmitter::Destroy(){	if (!init)		return;	MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK;		return;	}	if (localhostname)	{		RTPDeleteByteArray(localhostname,GetMemoryManager());		localhostname = 0;		localhostnamelength = 0;	}		RTPCLOSE(rtpsock);	RTPCLOSE(rtcpsock);	destinations.Clear();#ifdef RTP_SUPPORT_IPV6MULTICAST	multicastgroups.Clear();#endif // RTP_SUPPORT_IPV6MULTICAST	FlushPackets();	ClearAcceptIgnoreInfo();	localIPs.clear();	created = false;		if (waitingfordata)	{		AbortWaitInternal();		DestroyAbortDescriptors();		MAINMUTEX_UNLOCK		WAITMUTEX_LOCK // to make sure that the WaitForIncomingData function ended		WAITMUTEX_UNLOCK	}	else		DestroyAbortDescriptors();	MAINMUTEX_UNLOCK}RTPTransmissionInfo *RTPUDPv6Transmitter::GetTransmissionInfo(){	if (!init)		return 0;	MAINMUTEX_LOCK	RTPTransmissionInfo *tinf = RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTPTRANSMISSIONINFO) RTPUDPv6TransmissionInfo(localIPs,rtpsock,rtcpsock);	MAINMUTEX_UNLOCK	return tinf;}int RTPUDPv6Transmitter::GetLocalHostName(uint8_t *buffer,size_t *bufferlength){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;	MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (localhostname == 0)	{		if (localIPs.empty())		{			MAINMUTEX_UNLOCK			return ERR_RTP_UDPV6TRANS_NOLOCALIPS;		}				std::list<in6_addr>::const_iterator it;		std::list<std::string> hostnames;			for (it = localIPs.begin() ; it != localIPs.end() ; it++)		{			bool founddouble = false;			bool foundentry = true;			while (!founddouble && foundentry)			{				struct hostent *he;				in6_addr ip = (*it);								he = gethostbyaddr((char *)&ip,sizeof(in6_addr),AF_INET6);				if (he != 0)				{					std::string hname = std::string(he->h_name);					std::list<std::string>::const_iterator it;					for (it = hostnames.begin() ; !founddouble && it != hostnames.end() ; it++)						if ((*it) == hname)							founddouble = true;					if (!founddouble)						hostnames.push_back(hname);					int i = 0;					while (!founddouble && he->h_aliases[i] != 0)					{						std::string hname = std::string(he->h_aliases[i]);												for (it = hostnames.begin() ; !founddouble && it != hostnames.end() ; it++)							if ((*it) == hname)								founddouble = true;						if (!founddouble)						{							hostnames.push_back(hname);							i++;						}					}				}				else					foundentry = false;			}		}			bool found  = false;				if (!hostnames.empty())	// try to select the most appropriate hostname		{			std::list<std::string>::const_iterator it;						hostnames.sort();			for (it = hostnames.begin() ; !found && it != hostnames.end() ; it++)			{				if ((*it).find('.') != std::string::npos)				{					found = true;					localhostnamelength = (*it).length();					localhostname = RTPNew(GetMemoryManager(),RTPMEM_TYPE_OTHER) uint8_t [localhostnamelength+1];					if (localhostname == 0)					{						MAINMUTEX_UNLOCK						return ERR_RTP_OUTOFMEM;					}					memcpy(localhostname,(*it).c_str(),localhostnamelength);					localhostname[localhostnamelength] = 0;				}			}		}			if (!found) // use an IP address		{			in6_addr ip;			int len;			char str[48];			uint16_t ip16[8];			int i,j;							it = localIPs.begin();			ip = (*it);						for (i = 0,j = 0 ; j < 8 ; j++,i += 2)			{				ip16[j] = (((uint16_t)ip.s6_addr[i])<<8);				ip16[j] |= ((uint16_t)ip.s6_addr[i+1]);			}									RTP_SNPRINTF(str,48,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);			len = strlen(str);				localhostnamelength = len;			localhostname = RTPNew(GetMemoryManager(),RTPMEM_TYPE_OTHER) uint8_t [localhostnamelength+1];			if (localhostname == 0)			{				MAINMUTEX_UNLOCK				return ERR_RTP_OUTOFMEM;			}			memcpy(localhostname,str,localhostnamelength);			localhostname[localhostnamelength] = 0;		}	}		if ((*bufferlength) < localhostnamelength)	{		*bufferlength = localhostnamelength; // tell the application the required size of the buffer		MAINMUTEX_UNLOCK		return ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL;	}	memcpy(buffer,localhostname,localhostnamelength);	*bufferlength = localhostnamelength;		MAINMUTEX_UNLOCK	return 0;}bool RTPUDPv6Transmitter::ComesFromThisTransmitter(const RTPAddress *addr){	if (!init)		return false;	if (addr == 0)		return false;		MAINMUTEX_LOCK		bool v;			if (created && addr->GetAddressType() == RTPAddress::IPv6Address)	{			const RTPIPv6Address *addr2 = (const RTPIPv6Address *)addr;		bool found = false;		std::list<in6_addr>::const_iterator it;			it = localIPs.begin();		while (!found && it != localIPs.end())		{			in6_addr itip = *it;			in6_addr addrip = addr2->GetIP();			if (memcmp(&addrip,&itip,sizeof(in6_addr)) == 0)				found = true;			else				++it;		}			if (!found)			v = false;		else		{			if (addr2->GetPort() == portbase) // check for RTP port				v = true;			else if (addr2->GetPort() == (portbase+1)) // check for RTCP port				v = true;			else 				v = false;		}	}	else		v = false;	MAINMUTEX_UNLOCK	return v;}int RTPUDPv6Transmitter::Poll(){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;	int status;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	status = PollSocket(true); // poll RTP socket	if (status >= 0)		status = PollSocket(false); // poll RTCP socket	MAINMUTEX_UNLOCK	return status;}int RTPUDPv6Transmitter::WaitForIncomingData(const RTPTime &delay,bool *dataavailable){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK		fd_set fdset;	struct timeval tv;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (waitingfordata)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_ALREADYWAITING;	}		FD_ZERO(&fdset);	FD_SET(rtpsock,&fdset);	FD_SET(rtcpsock,&fdset);	FD_SET(abortdesc[0],&fdset);	tv.tv_sec = delay.GetSeconds();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
自拍偷拍国产精品| 91精品福利视频| 国产69精品一区二区亚洲孕妇| 国产乱码精品一区二区三| 国产精品综合在线视频| 91丝袜美腿高跟国产极品老师 | 欧日韩精品视频| 欧美一区二区网站| 久久久精品国产免大香伊| 亚洲欧洲一区二区在线播放| 亚洲综合在线免费观看| 石原莉奈在线亚洲三区| 国产精品白丝av| 91国在线观看| 久久亚洲春色中文字幕久久久| 亚洲欧洲无码一区二区三区| 亚洲国产精品一区二区久久| 国产美女娇喘av呻吟久久| 99久久精品国产一区二区三区| 国产精品色哟哟| 亚洲一区在线视频| 国产精品一区二区三区四区| 欧美亚男人的天堂| 久久精品水蜜桃av综合天堂| 亚洲一区在线观看免费 | 7777精品伊人久久久大香线蕉经典版下载 | 欧美精品三级在线观看| 欧美精品一区二区三区蜜桃视频| 国产精品第13页| 极品少妇xxxx精品少妇偷拍| 一本到不卡免费一区二区| 日韩天堂在线观看| 一区二区三区精品| 国产成a人无v码亚洲福利| 欧美酷刑日本凌虐凌虐| 中文字幕高清不卡| 麻豆精品视频在线观看| 91色九色蝌蚪| 欧美国产日本韩| 久久精品国产一区二区三| 欧美亚洲愉拍一区二区| 国产精品青草久久| 国精产品一区一区三区mba桃花| 精品视频免费在线| 最新久久zyz资源站| 激情亚洲综合在线| 欧美猛男超大videosgay| 中文字幕欧美一| 国产成人av福利| 欧美大片顶级少妇| 日本欧美在线看| 欧美精品三级日韩久久| 一区二区三区av电影| 丁香啪啪综合成人亚洲小说| 精品电影一区二区| 日韩国产一区二| 欧美午夜片在线观看| 亚洲人成网站色在线观看| 国产成人精品免费网站| 精品福利视频一区二区三区| 日本欧美一区二区| 欧美日韩激情在线| 一区二区三区在线播放| 91尤物视频在线观看| 国产精品色噜噜| 国产麻豆成人传媒免费观看| 日韩你懂的在线播放| 人人爽香蕉精品| 欧美精品在欧美一区二区少妇| 亚洲精品伦理在线| a级精品国产片在线观看| 久久久久久久综合色一本| 国产精品中文欧美| 久久在线免费观看| 国产在线不卡视频| 国产人成一区二区三区影院| 韩国女主播成人在线| 久久蜜桃香蕉精品一区二区三区| 久久精品国产99久久6| 日韩视频永久免费| 激情综合色丁香一区二区| 精品国产一区二区三区不卡| 久久99久久精品| 欧美精品一区二区不卡| 国产一区999| 中文字幕免费在线观看视频一区| 国产成人免费视频精品含羞草妖精| 精品国精品国产| 国产盗摄一区二区| 亚洲国产精品99久久久久久久久| 成人免费毛片aaaaa**| 国产精品不卡一区| 在线一区二区三区四区五区 | 国产成人精品亚洲日本在线桃色 | 成人黄动漫网站免费app| 中文字幕日本乱码精品影院| 色综合久久中文字幕综合网| 亚洲无人区一区| 欧美一区二区三区四区久久| 精品一二线国产| 国产欧美精品一区二区色综合朱莉| 成人在线视频首页| 亚洲另类中文字| 欧美日韩精品免费观看视频| 美国三级日本三级久久99| 国产午夜精品久久久久久久| 成人h版在线观看| 一区二区三区在线视频观看58| 欧美精品久久99| 国产在线精品一区二区不卡了| 国产精品家庭影院| 欧美日韩一区在线观看| 激情欧美一区二区三区在线观看| 欧美精品一区在线观看| 不卡高清视频专区| 视频在线观看一区二区三区| 久久综合九色欧美综合狠狠| av午夜精品一区二区三区| 亚洲午夜三级在线| 久久婷婷国产综合精品青草| av不卡免费在线观看| 日韩成人免费电影| 国产清纯白嫩初高生在线观看91| 色嗨嗨av一区二区三区| 热久久国产精品| 国产精品乱码一区二三区小蝌蚪| 欧美最新大片在线看| 国产一区二区三区| 一区二区三区四区av| 欧美精品一区二区三区视频| 色综合久久66| 国产精品综合视频| 午夜免费欧美电影| 国产精品国产三级国产| 日韩一区二区三区av| 91麻豆视频网站| 国产在线播放一区| 亚洲电影中文字幕在线观看| 国产视频一区二区在线| 欧美日韩综合在线| 成人性生交大片| 日产精品久久久久久久性色| 国产精品区一区二区三区| 日韩视频一区在线观看| 在线中文字幕一区| 国产不卡在线视频| 美腿丝袜亚洲色图| 亚洲午夜久久久久久久久久久| 久久麻豆一区二区| 欧美日本韩国一区二区三区视频| 高清shemale亚洲人妖| 麻豆91精品视频| 亚洲一区二区三区四区中文字幕| 久久精品欧美日韩| 日韩精品一区二区三区老鸭窝| 在线视频亚洲一区| av在线一区二区| 国产一区二区免费在线| 人禽交欧美网站| 亚洲第一福利一区| 亚洲精品日日夜夜| 中文字幕av在线一区二区三区| 亚洲欧美中日韩| 久久色成人在线| 日韩一二三区视频| 欧美视频一区二区| 色视频成人在线观看免| 99久久免费国产| 成人精品视频一区二区三区尤物| 国模娜娜一区二区三区| 日韩成人午夜精品| 天堂久久一区二区三区| 一区二区三区四区视频精品免费| 国产精品卡一卡二| 久久精品亚洲乱码伦伦中文| 欧美成人精品二区三区99精品| 欧美日本一道本| 欧美精品少妇一区二区三区| 欧美撒尿777hd撒尿| 日本韩国欧美在线| 一本到不卡精品视频在线观看| 99久久久无码国产精品| 成人高清视频在线观看| 国产成人av影院| 国产成人综合自拍| 国产丶欧美丶日本不卡视频| 国产精品88av| 国产成人亚洲综合a∨婷婷| 国产成人av电影在线| 国产成人亚洲综合色影视| 国产成人在线视频网站| 国产酒店精品激情| 大白屁股一区二区视频| 不卡的av网站| 99精品视频中文字幕| 一本高清dvd不卡在线观看| 色美美综合视频| 欧美日韩美少妇| 欧美一卡二卡在线| 久久综合九色综合欧美98|