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

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

?? rtpudpv6transmitter.cpp

?? jrtp庫
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*  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();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲国产日韩| 中文一区二区在线观看| 日韩精品一二三四| 制服视频三区第一页精品| 日韩电影一区二区三区四区| 日韩一区国产二区欧美三区| 久久99九九99精品| 亚洲国产高清不卡| 在线观看www91| 蜜臀久久99精品久久久久久9| 91精品国产欧美一区二区成人 | 在线亚洲人成电影网站色www| 自拍视频在线观看一区二区| 欧美日韩精品免费观看视频| 麻豆国产精品视频| 国产精品美女久久久久久2018 | 日韩欧美国产麻豆| 国产精品一区二区三区网站| 成人欧美一区二区三区1314| 欧美日韩一区二区三区不卡| 久久69国产一区二区蜜臀| 亚洲国产精品ⅴa在线观看| 一本色道亚洲精品aⅴ| 日韩精品亚洲一区| 国产日韩欧美精品一区| 欧美丝袜丝交足nylons图片| 国产综合一区二区| 一区二区激情视频| 26uuu精品一区二区在线观看| 99天天综合性| 日本欧美在线看| 国产精品久久久久久久久搜平片| 欧美日免费三级在线| 国产麻豆欧美日韩一区| 亚洲一区视频在线观看视频| 久久影音资源网| 欧美亚洲动漫精品| 成人一区二区三区| 精品夜夜嗨av一区二区三区| 亚洲综合男人的天堂| 久久伊人中文字幕| 欧美日韩mp4| 99精品热视频| 国产精品一区二区三区99| 日韩主播视频在线| 亚洲欧美日韩小说| 国产精品免费久久久久| 亚洲精品在线免费观看视频| 欧美影院一区二区| www.在线成人| 国产精品一区二区三区四区| 青青国产91久久久久久 | 日韩欧美一区二区在线视频| eeuss鲁片一区二区三区在线看| 奇米影视在线99精品| 亚洲高清中文字幕| 1000精品久久久久久久久| 久久精品在这里| 日韩精品一区二区三区视频| 91精品国产乱| 欧美日韩激情一区二区三区| 色综合咪咪久久| av在线综合网| 波多野结衣精品在线| 丁香六月久久综合狠狠色| 国产精品一区在线| 国产在线精品一区二区不卡了 | 精品国产伦一区二区三区观看方式 | 国产精品热久久久久夜色精品三区| 337p亚洲精品色噜噜噜| 欧美日韩国产高清一区| 欧美无砖专区一中文字| 91福利精品视频| 日本黄色一区二区| 一本色道**综合亚洲精品蜜桃冫| jvid福利写真一区二区三区| 国产91清纯白嫩初高中在线观看| 国产精品资源网| 成人午夜av电影| av在线不卡网| 欧美综合天天夜夜久久| 91久久久免费一区二区| 欧美日韩免费视频| 欧美精品一二三| 欧美大片一区二区| 久久九九99视频| 亚洲人成在线播放网站岛国| 一区二区三区蜜桃| 亚洲超碰97人人做人人爱| 日韩电影免费在线观看网站| 久久成人久久爱| 国产夫妻精品视频| 91在线国产福利| 欧美久久一二区| 久久综合色综合88| 国产精品国产馆在线真实露脸 | 丝袜诱惑亚洲看片| 蜜臀99久久精品久久久久久软件| 国内精品久久久久影院薰衣草| 丰满白嫩尤物一区二区| 一本大道久久a久久综合婷婷| 欧美性高清videossexo| 欧美变态tickle挠乳网站| 国产欧美日韩在线看| 一区二区三区四区在线播放| 婷婷开心激情综合| 国产精品一区一区三区| 91久久国产最好的精华液| 欧美一区二区国产| 国产精品国产三级国产aⅴ无密码| 亚洲午夜私人影院| 国模娜娜一区二区三区| 99精品久久只有精品| 4438x成人网最大色成网站| 国产校园另类小说区| 亚洲亚洲精品在线观看| 极品美女销魂一区二区三区免费| 波多野洁衣一区| 日韩一级片在线播放| 1024成人网| 精彩视频一区二区| 欧美午夜一区二区三区| 久久欧美一区二区| 亚洲h动漫在线| 成人av影院在线| 91精品国产综合久久久久久久| 中文字幕制服丝袜成人av| 麻豆精品蜜桃视频网站| 高清不卡在线观看av| 欧美一区二区人人喊爽| 亚洲精品一二三| 高清成人免费视频| 欧美成人激情免费网| 一个色妞综合视频在线观看| 国产91露脸合集magnet| 日韩一级免费观看| 亚洲国产欧美日韩另类综合| 丁香婷婷综合激情五月色| 日韩三级中文字幕| 亚洲国产成人91porn| 91麻豆.com| 欧美高清在线一区| 激情小说亚洲一区| 777色狠狠一区二区三区| 亚洲欧洲精品一区二区精品久久久| 极品尤物av久久免费看| 欧美午夜精品免费| 亚洲男同性恋视频| 成人av资源网站| 国产亚洲婷婷免费| 精品一区免费av| 91麻豆精品91久久久久久清纯 | 91福利视频在线| 成人免费一区二区三区在线观看| 国产精品自产自拍| 久久综合九色综合97_久久久| 肉色丝袜一区二区| 欧美日韩国产精选| 亚洲国产另类精品专区| 91福利精品视频| 亚洲在线免费播放| 在线一区二区三区| 一区二区三区中文字幕精品精品 | 亚洲一区二区三区国产| 色婷婷久久综合| 亚洲欧洲综合另类在线 | 欧美美女直播网站| 香蕉久久夜色精品国产使用方法| 91九色02白丝porn| 亚洲电影在线播放| 在线欧美日韩国产| 亚洲电影中文字幕在线观看| 欧美日韩免费电影| 五月激情六月综合| 欧美一区二区在线视频| 蜜桃视频在线一区| 精品国产免费一区二区三区四区 | 国产日产亚洲精品系列| 国产精品综合一区二区| 欧美国产97人人爽人人喊| 波波电影院一区二区三区| 亚洲精品国产第一综合99久久 | 久久国产剧场电影| 精品少妇一区二区三区视频免付费| 狠狠色丁香婷婷综合久久片| 国产欧美精品一区| 91成人看片片| 蜜臀av性久久久久蜜臀aⅴ四虎 | 91久久国产最好的精华液| 亚洲va天堂va国产va久| 日韩精品中午字幕| 成人亚洲一区二区一| 亚洲蜜臀av乱码久久精品蜜桃| 欧美日韩你懂得| 国产精品99久久久| 一区二区三区四区在线播放| 日韩欧美自拍偷拍| 91美女在线看| 久久国产尿小便嘘嘘尿| 亚洲欧美欧美一区二区三区|