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

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

?? rtpfaketransmitter.cpp

?? jrtp庫
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*  This class allows for jrtp to process packets without sending them out   anywhere.  The incoming messages are handed in to jrtp through the TransmissionParams   and can be retreived from jrtp through the normal polling mecanisms.  The outgoing RTP/RTCP packets are given to jrtp through the normal  session->SendPacket() and those packets are handed back out to the  client through a callback function (packet_ready_cb).    example usage : Allows for integration of RTP into gstreamer.  THIS HAS NOT BEEN TESTED WITH THREADS SO DON'T TRY  Copyright (c) 2005 Philippe Khalaf <burger@speedy.org>    This file is a part of JRTPLIB  Copyright (c) 1999-2004 Jori Liesenborgs  Contact: jori.liesenborgs@gmail.com  This library was developed at the "Expertisecentrum Digitale Media"  (http://www.edm.luc.ac.be), a research center of the "Limburgs Universitair  Centrum" (http://www.luc.ac.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 "rtpfaketransmitter.h"#include "rtprawpacket.h"#include "rtpipv4address.h"#include "rtptimeutilities.h"#include <stdio.h>#include <sys/socket.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#define RTPIOCTL								ioctl#ifdef RTPDEBUG	#include <iostream>#endif // RTPDEBUG#include "rtpdebug.h"#define RTPFAKETRANS_MAXPACKSIZE							65535#define RTPFAKETRANS_IFREQBUFSIZE							8192//#define RTPFAKETRANS_IS_MCASTADDR(x)							(((x)&0xF0000000) == 0xE0000000)/*#define RTPFAKETRANS_MCASTMEMBERSHIP(socket,type,mcastip,status)	{\										struct ip_mreq mreq;\										\										mreq.imr_multiaddr.s_addr = htonl(mcastip);\										mreq.imr_interface.s_addr = htonl(bindIP);\										status = setsockopt(socket,IPPROTO_IP,type,(const char *)&mreq,sizeof(struct ip_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_THREADRTPFakeTransmitter::RTPFakeTransmitter(RTPMemoryManager *mgr ) : RTPTransmitter(mgr), destinations(mgr,RTPMEM_TYPE_CLASS_DESTINATIONLISTHASHELEMENT),acceptignoreinfo(mgr,RTPMEM_TYPE_CLASS_ACCEPTIGNOREHASHELEMENT){	created = false;	init = false;}RTPFakeTransmitter::~RTPFakeTransmitter(){	Destroy();}int RTPFakeTransmitter::Init(bool tsafe){	if (init)		return ERR_RTP_FAKETRANS_ALREADYINIT;    // bomb out if trying to use threads    if (tsafe)        return ERR_RTP_NOTHREADSUPPORT;	#ifdef RTP_SUPPORT_THREAD	threadsafe = tsafe;	if (threadsafe)	{		int status;				status = mainmutex.Init();		if (status < 0)			return ERR_RTP_FAKETRANS_CANTINITMUTEX;		status = waitmutex.Init();		if (status < 0)			return ERR_RTP_FAKETRANS_CANTINITMUTEX;	}#else	if (tsafe)		return ERR_RTP_NOTHREADSUPPORT;#endif // RTP_SUPPORT_THREAD	init = true;	return 0;}int RTPFakeTransmitter::Create(size_t maximumpacketsize,const RTPTransmissionParams *transparams){//	struct sockaddr_in addr;//	int status;	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK	if (created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_ALREADYCREATED;	}		// Obtain transmission parameters		if (transparams == 0)		params = RTPNew(GetMemoryManager(),RTPMEM_TYPE_OTHER) RTPFakeTransmissionParams;	else	{		if (transparams->GetTransmissionProtocol() != RTPTransmitter::UserDefinedProto)			return ERR_RTP_FAKETRANS_ILLEGALPARAMETERS;		params = (RTPFakeTransmissionParams *)transparams;	}	// Check if portbase is even	//if (params->GetPortbase()%2 != 0)	//{	//	MAINMUTEX_UNLOCK	//	return ERR_RTP_FAKETRANS_PORTBASENOTEVEN;	//}	// 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)		{			MAINMUTEX_UNLOCK			return status;		}#ifdef RTPDEBUG		std::cout << "Found these local IP addresses:" << std::endl;				std::list<uint32_t>::const_iterator it;		for (it = localIPs.begin() ; it != localIPs.end() ; it++)		{			RTPIPv4Address a(*it);			std::cout << a.GetAddressString() << std::endl;		}#endif // RTPDEBUG	}//#ifdef RTP_SUPPORT_IPV4MULTICAST//	if (SetMulticastTTL(params->GetMulticastTTL()))//		supportsmulticasting = true;//	else//		supportsmulticasting = false;//#else // no multicast support enabled	supportsmulticasting = false;//#endif // RTP_SUPPORT_IPV4MULTICAST	if (maximumpacketsize > RTPFAKETRANS_MAXPACKSIZE)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_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 RTPFakeTransmitter::Destroy(){	if (!init)		return;	MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK;		return;	}	if (localhostname)	{		RTPDeleteByteArray(localhostname,GetMemoryManager());		localhostname = 0;		localhostnamelength = 0;	}		destinations.Clear();#ifdef RTP_SUPPORT_IPV4MULTICAST//	multicastgroups.Clear();#endif // RTP_SUPPORT_IPV4MULTICAST	FlushPackets();	ClearAcceptIgnoreInfo();	localIPs.clear();	created = false;    	RTPDelete(params,GetMemoryManager());		MAINMUTEX_UNLOCK}RTPTransmissionInfo *RTPFakeTransmitter::GetTransmissionInfo(){	if (!init)		return 0;	MAINMUTEX_LOCK	RTPTransmissionInfo *tinf = RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTPTRANSMISSIONINFO) RTPFakeTransmissionInfo(localIPs, params);	MAINMUTEX_UNLOCK	return tinf;}int RTPFakeTransmitter::GetLocalHostName(uint8_t *buffer,size_t *bufferlength){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;	MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (localhostname == 0)	{		if (localIPs.empty())		{			MAINMUTEX_UNLOCK			return ERR_RTP_FAKETRANS_NOLOCALIPS;		}				std::list<uint32_t>::const_iterator it;		std::list<std::string> hostnames;			for (it = localIPs.begin() ; it != localIPs.end() ; it++)		{			struct hostent *he;			uint8_t addr[4];			uint32_t ip = (*it);				addr[0] = (uint8_t)((ip>>24)&0xFF);			addr[1] = (uint8_t)((ip>>16)&0xFF);			addr[2] = (uint8_t)((ip>>8)&0xFF);			addr[3] = (uint8_t)(ip&0xFF);			he = gethostbyaddr((char *)addr,4,AF_INET);			if (he != 0)			{				std::string hname = std::string(he->h_name);				hostnames.push_back(hname);			}		}			bool found  = false;				if (!hostnames.empty())	// try to select the most appropriate hostname		{			std::list<std::string>::const_iterator it;						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		{			uint32_t ip;			int len;			char str[16];						it = localIPs.begin();			ip = (*it);						snprintf(str,16,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));			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 RTPFakeTransmitter::ComesFromThisTransmitter(const RTPAddress *addr){	if (!init)		return false;	if (addr == 0)		return false;		MAINMUTEX_LOCK		bool v;			if (created && addr->GetAddressType() == RTPAddress::IPv4Address)	{			const RTPIPv4Address *addr2 = (const RTPIPv4Address *)addr;		bool found = false;		std::list<uint32_t>::const_iterator it;			it = localIPs.begin();		while (!found && it != localIPs.end())		{			if (addr2->GetIP() == *it)				found = true;			else				++it;		}			if (!found)			v = false;		else		{			if (addr2->GetPort() == params->GetPortbase()) // check for RTP port				v = true;			else if (addr2->GetPort() == (params->GetPortbase()+1)) // check for RTCP port				v = true;			else 				v = false;		}	}	else		v = false;	MAINMUTEX_UNLOCK	return v;}int RTPFakeTransmitter::Poll(){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;	int status;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	status = FakePoll(); // poll RTP socket    params->SetCurrentData(NULL);	MAINMUTEX_UNLOCK	return status;}int RTPFakeTransmitter::WaitForIncomingData(const RTPTime &delay,bool *dataavailable){/*	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK		fd_set fdset;	struct timeval tv;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (waitingfordata)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_ALREADYWAITING;	}		FD_ZERO(&fdset);	FD_SET(rtpsock,&fdset);	FD_SET(rtcpsock,&fdset);	FD_SET(abortdesc[0],&fdset);	tv.tv_sec = delay.GetSeconds();	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_FAKETRANS_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))	{#ifdef WIN32		char buf[1];				recv(abortdesc[0],buf,1,0);#else 		unsigned char buf[1];		read(abortdesc[0],buf,1);#endif // WIN32	}		MAINMUTEX_UNLOCK	WAITMUTEX_UNLOCK	return 0;*/	return ERR_RTP_FAKETRANS_WAITNOTIMPLEMENTED;}int RTPFakeTransmitter::AbortWait(){/*	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (!waitingfordata)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTWAITING;	}	AbortWaitInternal();		MAINMUTEX_UNLOCK	return 0;*/	return 0;}int RTPFakeTransmitter::SendRTPData(const void *data,size_t len)	{	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;	MAINMUTEX_LOCK		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (len > maxpacksize)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_SPECIFIEDSIZETOOBIG;	}	destinations.GotoFirstElement();    // send to each destination	while (destinations.HasCurrentElement())	{        (*params->GetPacketReadyCB())(params->GetPacketReadyCBData(), (uint8_t*)data, len,        destinations.GetCurrentElement().GetIP_NBO(),        destinations.GetCurrentElement().GetRTPPort_NBO(),        1);		destinations.GotoNextElement();	}		MAINMUTEX_UNLOCK	return 0;}int RTPFakeTransmitter::SendRTCPData(const void *data,size_t len){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久综合日本欧美| 色婷婷久久久久swag精品| 亚洲第一成年网| 国产日韩视频一区二区三区| 欧美日韩卡一卡二| 91色婷婷久久久久合中文| 成人综合在线网站| 国内精品视频666| 精品影视av免费| 最新国产成人在线观看| ●精品国产综合乱码久久久久 | 91在线看国产| www.性欧美| 色哟哟一区二区三区| 成人a区在线观看| 国产成人精品网址| 99re亚洲国产精品| 91久久精品一区二区三| 色94色欧美sute亚洲线路二| 在线视频观看一区| 欧美日本在线视频| 日韩一区二区三区四区| 日韩欧美国产系列| 久久精品夜夜夜夜久久| 综合自拍亚洲综合图不卡区| 国产精品福利一区二区| 久久亚洲精品国产精品紫薇| 国产日韩欧美a| 一区二区三区精品在线| 亚洲成人黄色影院| 久久精品国产亚洲aⅴ | 国产日韩欧美精品综合| 国产精品三级视频| 亚洲精品免费播放| 美女视频一区二区| 国产99一区视频免费| 一本色道久久综合亚洲91| 91麻豆精品91久久久久同性| 久久午夜国产精品| 亚洲狼人国产精品| 激情综合网最新| 99re视频精品| 日韩欧美在线网站| 亚洲欧美一区二区视频| 亚洲国产中文字幕在线视频综合| 九九国产精品视频| 在线视频欧美区| 久久久精品免费免费| 亚洲一区二区三区四区五区黄| 国模冰冰炮一区二区| 欧美性猛交xxxx乱大交退制版| 日韩欧美中文字幕精品| 亚洲视频图片小说| 成av人片一区二区| 久久久国产午夜精品| 欧美96一区二区免费视频| 在线观看一区二区视频| 中文字幕一区二区三区精华液 | 亚洲男人都懂的| 91一区一区三区| 中文字幕一区二区不卡| 成人做爰69片免费看网站| 精品国精品自拍自在线| 奇米888四色在线精品| 欧美一区二区三区在线| 婷婷综合五月天| 日韩欧美色电影| 国模大尺度一区二区三区| 国产色综合一区| 成人97人人超碰人人99| 国产精品久久久久毛片软件| 成人午夜在线播放| 亚洲丝袜美腿综合| 色av一区二区| 日韩国产成人精品| 精品国一区二区三区| 丰满放荡岳乱妇91ww| 亚洲女爱视频在线| 欧美精品视频www在线观看| 天天影视色香欲综合网老头| 欧美激情中文字幕一区二区| 免费观看一级欧美片| 久久成人综合网| 国产精品美女久久久久av爽李琼 | 91在线国产观看| 午夜免费欧美电影| 久久综合国产精品| 99精品欧美一区二区三区小说| 一区二区三区在线观看视频| 日韩欧美你懂的| 成人夜色视频网站在线观看| 亚洲香蕉伊在人在线观| 日韩精品在线网站| 成人avav影音| 日本美女视频一区二区| 国产欧美一区二区三区网站| 在线观看视频欧美| 久久免费精品国产久精品久久久久| 99精品国产99久久久久久白柏| 看电视剧不卡顿的网站| 亚洲成人精品影院| 亚洲福利一区二区| 亚洲欧洲日韩综合一区二区| 久久久99久久| 久久久三级国产网站| 日韩三级视频在线看| 欧美日韩久久久一区| www.视频一区| 成人免费高清在线| 国产黑丝在线一区二区三区| 久久精品噜噜噜成人av农村| 亚洲视频小说图片| 亚洲欧美日韩中文播放| 亚洲欧美一区二区三区久本道91| 国产精品国产自产拍在线| 亚洲免费在线观看视频| 一区二区欧美国产| 日韩区在线观看| 精品国产91九色蝌蚪| 亚洲日本在线a| 亚洲国产视频一区二区| 国产中文字幕精品| 99国产精品国产精品毛片| 欧美精品v国产精品v日韩精品 | 欧美在线播放高清精品| 日本精品免费观看高清观看| 99精品偷自拍| 欧美精品视频www在线观看 | 亚洲影院理伦片| 午夜精品久久久久久久99水蜜桃| 亚洲mv在线观看| 国产精品中文字幕日韩精品| 99re视频精品| 欧美一区二区三区性视频| 久久精品欧美一区二区三区不卡| 亚洲国产电影在线观看| 亚洲成av人片一区二区三区| 久久99精品久久久久婷婷| 成人网页在线观看| 6080yy午夜一二三区久久| 国产拍揄自揄精品视频麻豆| 一区二区在线观看av| 久久99精品国产.久久久久| 99视频精品全部免费在线| 9191久久久久久久久久久| 国产精品福利一区| 美女性感视频久久| 在线精品视频一区二区| 欧美经典三级视频一区二区三区| 亚洲二区视频在线| 成人午夜精品在线| 日韩精品一区二区三区swag| 中文字幕一区二区三| 国产米奇在线777精品观看| 欧美日韩精品免费| 亚洲免费在线电影| 成人免费精品视频| 久久久噜噜噜久久人人看| 蜜桃久久久久久| 欧美三级三级三级爽爽爽| 一区二区免费在线播放| 91亚洲国产成人精品一区二区三| 久久久久久久综合日本| 久久99精品国产麻豆婷婷洗澡| 91麻豆精品国产自产在线| 亚洲与欧洲av电影| 欧美三级电影网| 亚洲1区2区3区视频| 欧美精品v日韩精品v韩国精品v| 一区二区三区产品免费精品久久75| 卡一卡二国产精品| 久久久国际精品| 成人av电影在线播放| 亚洲欧美欧美一区二区三区| 91在线国内视频| 亚洲影院理伦片| 日韩欧美亚洲另类制服综合在线| 捆绑调教美女网站视频一区| 精品国产乱码久久久久久1区2区 | 欧美日韩免费一区二区三区 | 91性感美女视频| 丝瓜av网站精品一区二区| 日韩精品资源二区在线| 国产精品18久久久久| 中文字幕一区视频| 欧美自拍偷拍一区| 激情文学综合插| 亚洲女爱视频在线| 日韩一级片在线观看| 国v精品久久久网| 亚洲bdsm女犯bdsm网站| 久久久无码精品亚洲日韩按摩| 91亚洲资源网| 精品一区中文字幕| 亚洲黄色av一区| 久久精品亚洲乱码伦伦中文| 91福利在线免费观看| 国产精品一区二区三区四区| 亚洲免费资源在线播放| 久久五月婷婷丁香社区|