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

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

?? rtpudpv6transmitter.cpp

?? jrtp庫
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
	tv.tv_usec = delay.GetMicroSeconds();		waitingfordata = true;		WAITMUTEX_LOCK	MAINMUTEX_UNLOCK	if (select(FD_SETSIZE,&fdset,0,0,&tv) < 0)	{		MAINMUTEX_LOCK		waitingfordata = false;		MAINMUTEX_UNLOCK		WAITMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_ERRORINSELECT;	}		MAINMUTEX_LOCK	waitingfordata = false;	if (!created) // destroy called	{		MAINMUTEX_UNLOCK;		WAITMUTEX_UNLOCK		return 0;	}			// if aborted, read from abort buffer	if (FD_ISSET(abortdesc[0],&fdset))	{#if (defined(WIN32) || defined(_WIN32_WCE))		char buf[1];				recv(abortdesc[0],buf,1,0);#else 		unsigned char buf[1];		read(abortdesc[0],buf,1);#endif // WIN32	}		if (dataavailable != 0)	{		if (FD_ISSET(rtpsock,&fdset) || FD_ISSET(rtcpsock,&fdset))			*dataavailable = true;		else			*dataavailable = false;	}		MAINMUTEX_UNLOCK	WAITMUTEX_UNLOCK	return 0;}int RTPUDPv6Transmitter::AbortWait(){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (!waitingfordata)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTWAITING;	}	AbortWaitInternal();		MAINMUTEX_UNLOCK	return 0;}int RTPUDPv6Transmitter::SendRTPData(const void *data,size_t len)	{	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;	MAINMUTEX_LOCK		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (len > maxpacksize)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_SPECIFIEDSIZETOOBIG;	}		destinations.GotoFirstElement();	while (destinations.HasCurrentElement())	{		sendto(rtpsock,(const char *)data,len,0,(const struct sockaddr *)destinations.GetCurrentElement().GetRTPSockAddr(),sizeof(struct sockaddr_in6));		destinations.GotoNextElement();	}		MAINMUTEX_UNLOCK	return 0;}int RTPUDPv6Transmitter::SendRTCPData(const void *data,size_t len){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;	MAINMUTEX_LOCK		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (len > maxpacksize)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_SPECIFIEDSIZETOOBIG;	}		destinations.GotoFirstElement();	while (destinations.HasCurrentElement())	{		sendto(rtcpsock,(const char *)data,len,0,(const struct sockaddr *)destinations.GetCurrentElement().GetRTCPSockAddr(),sizeof(struct sockaddr_in6));		destinations.GotoNextElement();	}		MAINMUTEX_UNLOCK	return 0;}int RTPUDPv6Transmitter::AddDestination(const RTPAddress &addr){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv6Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE;	}		RTPIPv6Address &address = (RTPIPv6Address &)addr;	RTPIPv6Destination dest(address.GetIP(),address.GetPort());	int status = destinations.AddElement(dest);	MAINMUTEX_UNLOCK	return status;}int RTPUDPv6Transmitter::DeleteDestination(const RTPAddress &addr){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv6Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE;	}		RTPIPv6Address &address = (RTPIPv6Address &)addr;		RTPIPv6Destination dest(address.GetIP(),address.GetPort());	int status = destinations.DeleteElement(dest);		MAINMUTEX_UNLOCK	return status;}void RTPUDPv6Transmitter::ClearDestinations(){	if (!init)		return;		MAINMUTEX_LOCK	if (created)		destinations.Clear();	MAINMUTEX_UNLOCK}bool RTPUDPv6Transmitter::SupportsMulticasting(){	if (!init)		return false;		MAINMUTEX_LOCK		bool v;			if (!created)		v = false;	else		v = supportsmulticasting;	MAINMUTEX_UNLOCK	return v;}#ifdef RTP_SUPPORT_IPV6MULTICASTint RTPUDPv6Transmitter::JoinMulticastGroup(const RTPAddress &addr){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;	MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv6Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE;	}		const RTPIPv6Address &address = (const RTPIPv6Address &)addr;	in6_addr mcastIP = address.GetIP();		if (!RTPUDPV6TRANS_IS_MCASTADDR(mcastIP))	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTAMULTICASTADDRESS;	}		status = multicastgroups.AddElement(mcastIP);	if (status >= 0)	{		RTPUDPV6TRANS_MCASTMEMBERSHIP(rtpsock,IPV6_JOIN_GROUP,mcastIP,status);		if (status != 0)		{			multicastgroups.DeleteElement(mcastIP);			MAINMUTEX_UNLOCK			return ERR_RTP_UDPV6TRANS_COULDNTJOINMULTICASTGROUP;		}		RTPUDPV6TRANS_MCASTMEMBERSHIP(rtcpsock,IPV6_JOIN_GROUP,mcastIP,status);		if (status != 0)		{			RTPUDPV6TRANS_MCASTMEMBERSHIP(rtpsock,IPV6_LEAVE_GROUP,mcastIP,status);			multicastgroups.DeleteElement(mcastIP);			MAINMUTEX_UNLOCK			return ERR_RTP_UDPV6TRANS_COULDNTJOINMULTICASTGROUP;		}	}	MAINMUTEX_UNLOCK		return status;}int RTPUDPv6Transmitter::LeaveMulticastGroup(const RTPAddress &addr){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;	MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv6Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE;	}		const RTPIPv6Address &address = (const RTPIPv6Address &)addr;	in6_addr mcastIP = address.GetIP();		if (!RTPUDPV6TRANS_IS_MCASTADDR(mcastIP))	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTAMULTICASTADDRESS;	}		status = multicastgroups.DeleteElement(mcastIP);	if (status >= 0)	{			RTPUDPV6TRANS_MCASTMEMBERSHIP(rtpsock,IPV6_LEAVE_GROUP,mcastIP,status);		RTPUDPV6TRANS_MCASTMEMBERSHIP(rtcpsock,IPV6_LEAVE_GROUP,mcastIP,status);		status = 0;	}		MAINMUTEX_UNLOCK	return status;}void RTPUDPv6Transmitter::LeaveAllMulticastGroups(){	if (!init)		return;		MAINMUTEX_LOCK	if (created)	{		multicastgroups.GotoFirstElement();		while (multicastgroups.HasCurrentElement())		{			in6_addr mcastIP;			int status = 0;			mcastIP = multicastgroups.GetCurrentElement();			RTPUDPV6TRANS_MCASTMEMBERSHIP(rtpsock,IPV6_LEAVE_GROUP,mcastIP,status);			RTPUDPV6TRANS_MCASTMEMBERSHIP(rtcpsock,IPV6_LEAVE_GROUP,mcastIP,status);			multicastgroups.GotoNextElement();		}		multicastgroups.Clear();	}	MAINMUTEX_UNLOCK}#else // no multicast supportint RTPUDPv6Transmitter::JoinMulticastGroup(const RTPAddress &addr){	return ERR_RTP_UDPV6TRANS_NOMULTICASTSUPPORT;}int RTPUDPv6Transmitter::LeaveMulticastGroup(const RTPAddress &addr){	return ERR_RTP_UDPV6TRANS_NOMULTICASTSUPPORT;}void RTPUDPv6Transmitter::LeaveAllMulticastGroups(){}#endif // RTP_SUPPORT_IPV6MULTICASTint RTPUDPv6Transmitter::SetReceiveMode(RTPTransmitter::ReceiveMode m){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (m != receivemode)	{		receivemode = m;		acceptignoreinfo.Clear();	}	MAINMUTEX_UNLOCK	return 0;}int RTPUDPv6Transmitter::AddToIgnoreList(const RTPAddress &addr){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;	MAINMUTEX_LOCK		int status;	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv6Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE;	}	if (receivemode != RTPTransmitter::IgnoreSome)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_DIFFERENTRECEIVEMODE;	}		const RTPIPv6Address &address = (const RTPIPv6Address &)addr;	status = ProcessAddAcceptIgnoreEntry(address.GetIP(),address.GetPort());		MAINMUTEX_UNLOCK	return status;}int RTPUDPv6Transmitter::DeleteFromIgnoreList(const RTPAddress &addr){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv6Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE;	}	if (receivemode != RTPTransmitter::IgnoreSome)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_DIFFERENTRECEIVEMODE;	}		const RTPIPv6Address &address = (const RTPIPv6Address &)addr;		status = ProcessDeleteAcceptIgnoreEntry(address.GetIP(),address.GetPort());	MAINMUTEX_UNLOCK	return status;}void RTPUDPv6Transmitter::ClearIgnoreList(){	if (!init)		return;		MAINMUTEX_LOCK	if (created && receivemode == RTPTransmitter::IgnoreSome)		ClearAcceptIgnoreInfo();	MAINMUTEX_UNLOCK}int RTPUDPv6Transmitter::AddToAcceptList(const RTPAddress &addr){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv6Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE;	}	if (receivemode != RTPTransmitter::AcceptSome)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_DIFFERENTRECEIVEMODE;	}		const RTPIPv6Address &address = (const RTPIPv6Address &)addr;	status = ProcessAddAcceptIgnoreEntry(address.GetIP(),address.GetPort());	MAINMUTEX_UNLOCK	return status;}int RTPUDPv6Transmitter::DeleteFromAcceptList(const RTPAddress &addr){	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv6Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE;	}	if (receivemode != RTPTransmitter::AcceptSome)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_DIFFERENTRECEIVEMODE;	}		const RTPIPv6Address &address = (const RTPIPv6Address &)addr;	status = ProcessDeleteAcceptIgnoreEntry(address.GetIP(),address.GetPort());	MAINMUTEX_UNLOCK	return status;}void RTPUDPv6Transmitter::ClearAcceptList(){	if (!init)		return;		MAINMUTEX_LOCK	if (created && receivemode == RTPTransmitter::AcceptSome)		ClearAcceptIgnoreInfo();	MAINMUTEX_UNLOCK}int RTPUDPv6Transmitter::SetMaximumPacketSize(size_t s)	{	if (!init)		return ERR_RTP_UDPV6TRANS_NOTINIT;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_NOTCREATED;	}	if (s > RTPUDPV6TRANS_MAXPACKSIZE)	{		MAINMUTEX_UNLOCK		return ERR_RTP_UDPV6TRANS_SPECIFIEDSIZETOOBIG;	}	maxpacksize = s;	MAINMUTEX_UNLOCK	return 0;}bool RTPUDPv6Transmitter::NewDataAvailable(){	if (!init)		return false;		MAINMUTEX_LOCK		bool v;			if (!created)		v = false;	else	{		if (rawpacketlist.empty())			v = false;		else			v = true;	}		MAINMUTEX_UNLOCK	return v;}RTPRawPacket *RTPUDPv6Transmitter::GetNextPacket(){	if (!init)		return 0;		MAINMUTEX_LOCK		RTPRawPacket *p;		if (!created)	{		MAINMUTEX_UNLOCK		return 0;	}	if (rawpacketlist.empty())	{		MAINMUTEX_UNLOCK		return 0;	}	p = *(rawpacketlist.begin());	rawpacketlist.pop_front();	MAINMUTEX_UNLOCK	return p;}// Here the private functions start...#ifdef RTP_SUPPORT_IPV6MULTICASTbool RTPUDPv6Transmitter::SetMulticastTTL(uint8_t ttl){	int ttl2,status;	ttl2 = (int)ttl;	status = setsockopt(rtpsock,IPPROTO_IPV6,IPV6_MULTICAST_HOPS,(const char *)&ttl2,sizeof(int));	if (status != 0)		return false;	status = setsockopt(rtcpsock,IPPROTO_IPV6,IPV6_MULTICAST_HOPS,(const char *)&ttl2,sizeof(int));	if (status != 0)		return false;	return true;}#endif // RTP_SUPPORT_IPV6MULTICASTvoid RTPUDPv6Transmitter::FlushPackets(){	std::list<RTPRawPacket*>::const_iterator it;	for (it = rawpacketlist.begin() ; it != rawpacketlist.end() ; ++it)		RTPDelete(*it,GetMemoryManager());	rawpacketlist.clear();}int RTPUDPv6Transmitter::PollSocket(bool rtp){	RTPSOCKLENTYPE fromlen;	int recvlen;	char packetbuffer[RTPUDPV6TRANS_MAXPACKSIZE];#if (defined(WIN32) || defined(_WIN32_WCE))	SOCKET sock;	unsigned long len;#else 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂va蜜桃一区二区三区漫画版| 成人免费视频视频在线观看免费| 亚洲在线中文字幕| 亚洲欧洲精品成人久久奇米网| 国产日韩精品一区| 久久精品一二三| 亚洲精品在线观| 欧美成人vps| 精品国产乱码久久久久久久久| 日韩亚洲欧美综合| 日韩精品一区在线观看| 日韩久久久久久| 久久综合色8888| 久久精品免视看| 国产精品污www在线观看| 国产精品美女久久久久av爽李琼| 国产精品毛片高清在线完整版| 国产精品剧情在线亚洲| 亚洲视频一区二区在线观看| 亚洲欧美一区二区三区极速播放| 亚洲精品综合在线| 亚洲国产精品麻豆| 老汉av免费一区二区三区| 美女视频一区在线观看| 国产伦精品一区二区三区免费| 国产精品99久久久久久宅男| 不卡欧美aaaaa| 欧洲激情一区二区| 日韩欧美一区二区视频| 久久久久久久综合狠狠综合| 国产精品久久久久久久午夜片| 亚洲男人的天堂av| 日韩av高清在线观看| 国产自产2019最新不卡| 成人av电影观看| 欧美精品在线一区二区三区| 日韩美女一区二区三区四区| 国产精品久久久一本精品| 亚洲激情六月丁香| 久久国产精品免费| 不卡的av在线播放| 69堂精品视频| 久久精品一二三| 一区二区三区中文免费| 美国三级日本三级久久99| 高潮精品一区videoshd| 精品视频1区2区| 久久久久九九视频| 亚洲成人一区二区| 国产成人在线色| 欧美日韩精品一区二区三区| 久久久久久黄色| 亚洲第一福利一区| 高清beeg欧美| 91精品免费观看| 日韩理论片在线| 久久99日本精品| 在线观看欧美日本| 国产日产亚洲精品系列| 天天亚洲美女在线视频| 不卡av免费在线观看| 日韩精品中文字幕在线不卡尤物 | 91福利视频在线| 精品国产免费人成电影在线观看四季| 综合精品久久久| 国模大尺度一区二区三区| 91福利精品视频| 中文字幕国产一区二区| 人人狠狠综合久久亚洲| 色屁屁一区二区| 久久久国产精品麻豆| 日韩精品国产欧美| 91麻豆免费看片| 久久久国产精品午夜一区ai换脸| 亚洲大片精品永久免费| av亚洲产国偷v产偷v自拍| 日韩欧美国产精品一区| 亚洲韩国一区二区三区| 波多野结衣亚洲| 久久久精品国产99久久精品芒果| 婷婷一区二区三区| 在线免费精品视频| 成人免费小视频| 懂色av一区二区三区蜜臀| 日韩视频免费观看高清完整版 | 国产精品99久久久久久久vr | 久久亚洲影视婷婷| 日韩高清一区在线| 欧美视频精品在线观看| 亚洲欧美电影一区二区| 国产成人精品影院| 337p日本欧洲亚洲大胆色噜噜| 日韩国产在线观看| 欧美日韩一区成人| 亚洲一区二区三区四区在线免费观看 | 欧美男男青年gay1069videost| 亚洲欧美另类综合偷拍| 99这里只有精品| 国产精品日产欧美久久久久| 国产精品18久久久久久久网站| 欧美成人女星排行榜| 蜜臀av性久久久久蜜臀av麻豆 | 国产精品国产自产拍高清av王其| 国产激情一区二区三区四区| 精品黑人一区二区三区久久| 青青草国产成人av片免费| 在线成人午夜影院| 秋霞影院一区二区| 日韩一区二区免费在线观看| 日本一道高清亚洲日美韩| 欧美一区二区三区成人| 日本欧美在线观看| 91精品国产欧美日韩| 麻豆精品视频在线观看| 欧美电影免费观看高清完整版在 | 成人精品视频一区| 国产精品福利一区| 色婷婷av一区二区三区大白胸| 亚洲欧美激情插| 欧美日韩国产一二三| 日韩国产一二三区| 精品国产伦一区二区三区观看方式 | 国产成人自拍在线| 中文字幕av一区二区三区高| a在线播放不卡| 一区二区三区电影在线播| 精品污污网站免费看| 日本不卡不码高清免费观看| 精品国产髙清在线看国产毛片| 国产一区二区0| 国产精品久久久久久久蜜臀| 一本大道久久精品懂色aⅴ| 一区二区三区丝袜| 欧美美女直播网站| 老司机精品视频在线| 欧美激情一区二区三区在线| 一本到不卡精品视频在线观看| 亚洲成人av福利| 精品国产伦一区二区三区观看体验| 大胆亚洲人体视频| 亚洲一级电影视频| 欧美大片一区二区三区| 成人精品鲁一区一区二区| 一区二区三区蜜桃网| 欧美成人一区二区三区| 懂色av中文字幕一区二区三区| 中文字幕中文在线不卡住| 欧美日韩一级片在线观看| 激情另类小说区图片区视频区| 国产精品的网站| 欧美色偷偷大香| 久久精品国产99国产| 国产精品成人网| 日韩一级在线观看| 99久久精品一区二区| 青青草国产精品亚洲专区无| 国产精品免费视频观看| 91精品国产综合久久精品麻豆| 高清在线观看日韩| 三级一区在线视频先锋| 国产精品丝袜一区| 制服丝袜亚洲色图| 成人av网在线| 久久精品国产亚洲aⅴ| 亚洲欧美日韩国产综合在线| 精品久久久久久无| 欧美综合天天夜夜久久| 国内精品视频666| 一区二区不卡在线播放| 国产三区在线成人av| 欧美日韩亚洲综合一区二区三区| 国产成人精品免费在线| 天堂一区二区在线| 亚洲视频狠狠干| 久久精品欧美一区二区三区不卡 | 日本网站在线观看一区二区三区| 中文字幕在线免费不卡| 日韩欧美国产一区二区三区| 色综合中文字幕| 国产精品一区二区久久精品爱涩| 亚洲成人黄色影院| 亚洲视频在线一区观看| 久久精品欧美一区二区三区麻豆| 欧美一级国产精品| 欧美综合一区二区| jlzzjlzz国产精品久久| 国产精品一二一区| 奇米色一区二区| 天天色图综合网| 亚洲精品国产成人久久av盗摄| 中文字幕精品—区二区四季| 久久先锋影音av| 日韩欧美成人激情| 欧美一区二区三区人| 欧美专区日韩专区| 色菇凉天天综合网| 99久久综合99久久综合网站| 粉嫩av一区二区三区粉嫩| 国产麻豆精品95视频| 极品美女销魂一区二区三区免费|