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

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

?? rtpfaketransmitter.cpp

?? jrtplib開發好幫手啊
?? 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美大片在线观看一区| 国产91清纯白嫩初高中在线观看 | 91免费看视频| 亚洲电影视频在线| 国产高清久久久| 亚洲在线视频免费观看| 26uuu国产一区二区三区| 97超碰欧美中文字幕| 蜜臀va亚洲va欧美va天堂| 91视频国产资源| 国产成人在线电影| 6080日韩午夜伦伦午夜伦| 精品在线一区二区三区| 91在线精品一区二区| 成人欧美一区二区三区白人| 欧美日韩一区二区三区视频| 国产无一区二区| 欧美一级理论片| 日韩美女天天操| 经典三级在线一区| 久久99久久精品| 久久国产精品色婷婷| 秋霞成人午夜伦在线观看| 欧美日韩一区二区在线视频| 亚洲色图19p| 99精品桃花视频在线观看| 国产成人精品午夜视频免费| 欧美va亚洲va在线观看蝴蝶网| 91精品国产综合久久婷婷香蕉 | 91九色最新地址| 国产精品成人在线观看| 91福利精品第一导航| 一区二区成人在线| 亚洲激情中文1区| 欧美日韩一区二区不卡| 欧美在线一区二区三区| 亚洲另类在线一区| 欧美综合视频在线观看| 欧美日韩视频在线第一区| 一区二区三区欧美在线观看| 色美美综合视频| 亚洲精品在线一区二区| 欧美精品一区二区三区在线 | 琪琪久久久久日韩精品| 亚洲sss视频在线视频| 亚洲一区二区视频在线| 欧美日韩精品欧美日韩精品一| 中文字幕不卡在线播放| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲国产精品久久久久秋霞影院| 欧美成人r级一区二区三区| 国产一区二三区| 99视频在线精品| 日韩一区二区三区免费看 | 国产一区视频导航| 在线观看一区二区精品视频| 精品福利一区二区三区| 日本91福利区| 成人午夜免费电影| 日韩av一级电影| 国产suv精品一区二区883| 在线观看日韩电影| 成人一级视频在线观看| 亚洲人妖av一区二区| 免费成人深夜小野草| 国产乱理伦片在线观看夜一区| 国产精品久久久一本精品| 欧美大胆人体bbbb| 一区二区三区电影在线播| 欧美精品一区男女天堂| 欧美日韩一区二区在线观看视频 | 久久精品一区四区| 裸体歌舞表演一区二区| 制服丝袜激情欧洲亚洲| 日韩在线a电影| 欧美久久久一区| 免费成人美女在线观看.| 91精品国产综合久久福利| 亚洲综合久久av| 国模大尺度一区二区三区| 欧美日韩成人高清| 免费在线观看一区二区三区| 成人免费毛片片v| 国产在线国偷精品产拍免费yy | 亚洲尤物在线视频观看| 国产iv一区二区三区| 精品久久久久久久久久久久包黑料| 天堂在线一区二区| 欧美r级在线观看| 国产一区二区视频在线| 国产精品天美传媒| 国产精品小仙女| 2023国产精品自拍| 懂色av一区二区在线播放| 久久久精品tv| 国产69精品一区二区亚洲孕妇| 欧美一区二区精品在线| 亚洲国产另类av| 欧美一级一级性生活免费录像| 九色综合国产一区二区三区| 国产农村妇女毛片精品久久麻豆| 成人av网站免费观看| 亚洲妇女屁股眼交7| 精品国产一区二区三区久久影院| 国产成人自拍在线| 亚洲日本成人在线观看| 日韩一区二区不卡| 成人免费毛片app| 日韩电影在线免费观看| 国产日韩欧美麻豆| 欧美另类变人与禽xxxxx| 精品在线你懂的| 亚洲综合免费观看高清完整版在线| 日韩一区二区免费电影| av激情亚洲男人天堂| 一区二区三区精品视频| 久久久久一区二区三区四区| 色天天综合色天天久久| 国产麻豆精品在线观看| 亚洲一级电影视频| 欧美极品美女视频| 56国语精品自产拍在线观看| 成人黄动漫网站免费app| 另类人妖一区二区av| 国产三级精品三级在线专区| 欧美精品1区2区| 色综合色狠狠天天综合色| 亚洲另类中文字| 日韩免费观看高清完整版| 在线观看亚洲专区| 成人午夜视频福利| 欧美经典一区二区| 91精品国产综合久久香蕉的特点 | 亚洲色图视频网站| 欧美成人乱码一区二区三区| 欧洲国内综合视频| 久久99久久久久久久久久久| 亚洲裸体在线观看| 中文字幕一区免费在线观看| 精品国产不卡一区二区三区| 欧美日韩在线一区二区| 91免费观看视频在线| 成人美女视频在线看| 国产成人自拍网| 美女国产一区二区| 美腿丝袜亚洲一区| 日本亚洲免费观看| 久久国内精品自在自线400部| 亚洲一区二区三区在线播放| 中文字幕成人在线观看| 国产精品香蕉一区二区三区| 3atv在线一区二区三区| 欧美日韩一区二区在线视频| 色婷婷综合久久久久中文| av一本久道久久综合久久鬼色| 韩国女主播成人在线观看| 久久激情综合网| 久久精品国产精品青草| 精品一区二区在线视频| 久色婷婷小香蕉久久| 日本三级韩国三级欧美三级| 亚洲人成网站色在线观看| 亚洲与欧洲av电影| 日本午夜精品一区二区三区电影| 日韩影院精彩在线| 精品在线观看免费| 成人在线视频首页| 日本电影亚洲天堂一区| 欧美日韩成人激情| 久久中文字幕电影| 国产精品久久久久9999吃药| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚洲国产高清aⅴ视频| 久久久久国产一区二区三区四区 | 国产老肥熟一区二区三区| 成人美女在线视频| 波多野结衣视频一区| 成人av网在线| 欧美xfplay| 中文av字幕一区| 亚洲成人av一区二区三区| 麻豆一区二区在线| 国产91富婆露脸刺激对白| 欧美日韩一级片网站| 日韩无一区二区| 国产精品久久久久久久久果冻传媒| 国产日韩欧美精品一区| 亚洲素人一区二区| 全部av―极品视觉盛宴亚洲| 国产综合久久久久久鬼色| 色综合久久久久综合| 精品成人佐山爱一区二区| 一区二区三区视频在线观看| 久久电影国产免费久久电影| 国产一区二区三区av电影| 色婷婷久久一区二区三区麻豆| 欧美精品一区二区久久婷婷| 亚洲猫色日本管| 成人激情黄色小说| 欧美精品一区男女天堂|