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

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

?? rtpfaketransmitter.cpp

?? RTP測試程序,在EVC++4.0下測試RTP包傳輸情況
?? 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@lumumba.luc.ac.be  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 <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));\									}*/#ifndef RTP_SUPPORT_INLINETEMPLATEPARAM	int RTPFakeTrans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d)				{ return d.GetIP_HBO()%RTPFAKETRANS_HASHSIZE; }	int RTPFakeTrans_GetHashIndex_uint32_t(const uint32_t &k)					{ return k%RTPFAKETRANS_HASHSIZE; }#endif // !RTP_SUPPORT_INLINETEMPLATEPARAM	#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(){	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 = new 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;	rtppackcount = 0;	rtcppackcount = 0;		waitingfordata = false;	created = true;	MAINMUTEX_UNLOCK	return 0;}void RTPFakeTransmitter::Destroy(){	if (!init)		return;	MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK;		return;	}	if (localhostname)	{		delete [] localhostname;		localhostname = 0;		localhostnamelength = 0;	}		destinations.Clear();#ifdef RTP_SUPPORT_IPV4MULTICAST//	multicastgroups.Clear();#endif // RTP_SUPPORT_IPV4MULTICAST	FlushPackets();	ClearAcceptIgnoreInfo();	localIPs.clear();	created = false;    delete params;		MAINMUTEX_UNLOCK}RTPTransmissionInfo *RTPFakeTransmitter::GetTransmissionInfo(){	if (!init)		return 0;	MAINMUTEX_LOCK	RTPTransmissionInfo *tinf = new 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 = new 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 = new 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())((uint8_t*)data, len,        destinations.GetCurrentElement().GetIP_NBO(),        destinations.GetCurrentElement().GetRTPPort_NBO(),        1);		destinations.GotoNextElement();	}		rtppackcount++;	MAINMUTEX_UNLOCK	return 0;}int RTPFakeTransmitter::SendRTCPData(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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品女同一区二区三区| 亚洲成人激情综合网| 一区在线观看视频| 日韩影视精彩在线| 成人在线综合网站| 欧美本精品男人aⅴ天堂| 亚洲欧美激情一区二区| 精品一区二区三区久久久| 日本韩国精品一区二区在线观看| 精品欧美乱码久久久久久1区2区| 亚洲欧美经典视频| 成人美女在线视频| 日韩欧美www| 天堂蜜桃一区二区三区| 色综合色综合色综合色综合色综合| 91精品国产综合久久久久| 亚洲精品成a人| 成人永久免费视频| 国产三级一区二区| 麻豆精品一区二区三区| 欧美视频在线一区| 一区二区三区中文字幕电影| 丰满少妇久久久久久久| 久久久久久久网| 男女视频一区二区| 欧美一区二区三区四区高清| 亚洲精品成人天堂一二三| 972aa.com艺术欧美| 欧美激情一区二区三区在线| 国产一区二区不卡| 国产日韩欧美高清在线| 国产酒店精品激情| 国产午夜精品在线观看| 国产一区二区三区免费播放| 精品成a人在线观看| 日本不卡中文字幕| 欧美一区二区三级| 精品一区二区成人精品| 26uuu国产日韩综合| 国产一区二区三区不卡在线观看| 欧美videos大乳护士334| 九九九精品视频| 日韩视频一区二区三区| 国产在线精品一区二区不卡了 | 国产日韩精品一区二区三区在线| 麻豆视频观看网址久久| xfplay精品久久| 国产精品自拍网站| 中文字幕中文字幕一区二区 | 亚洲丝袜美腿综合| 成人av网站免费| 亚洲丝袜另类动漫二区| 在线视频欧美精品| 亚洲成av人片在www色猫咪| 欧美美女bb生活片| 日本成人在线视频网站| 26uuu色噜噜精品一区| 岛国精品在线观看| 亚洲女性喷水在线观看一区| 美女网站一区二区| 国产精品无遮挡| 日本黄色一区二区| 免费三级欧美电影| 欧美国产日产图区| 在线观看网站黄不卡| 日韩高清不卡一区二区| 久久久不卡影院| 91美女精品福利| 蜜臂av日日欢夜夜爽一区| 国产精品―色哟哟| 欧美日韩视频不卡| 国产精一区二区三区| 亚洲国产视频一区| 国产视频一区不卡| 制服丝袜成人动漫| 国产ts人妖一区二区| 丝袜亚洲精品中文字幕一区| 久久久影院官网| 欧美三级资源在线| 国产精品亚洲第一区在线暖暖韩国| 亚洲精品亚洲人成人网| 久久婷婷国产综合精品青草 | 成人动漫视频在线| 午夜视频一区在线观看| 久久婷婷国产综合精品青草| 欧美性猛交xxxx黑人交| 国产成人精品午夜视频免费| 日韩成人一区二区三区在线观看| 国产精品久久久久久久久免费相片 | av成人老司机| 麻豆传媒一区二区三区| 亚洲国产视频直播| 国产精品理论片在线观看| 91精品国产欧美一区二区成人| 91丝袜美女网| 国产福利91精品一区| 秋霞午夜鲁丝一区二区老狼| 一级特黄大欧美久久久| 欧美国产禁国产网站cc| 欧美精品一区二区精品网| 欧美日韩在线直播| 色呦呦网站一区| 99久久久久免费精品国产| 经典三级一区二区| 日韩av一区二| 日本美女视频一区二区| 婷婷国产v国产偷v亚洲高清| 亚洲乱码国产乱码精品精的特点| 国产视频一区在线播放| 久久久777精品电影网影网| 国产欧美日韩一区二区三区在线观看 | 视频在线观看一区| 亚洲无线码一区二区三区| 亚洲欧美日韩国产手机在线| 中文文精品字幕一区二区| 久久综合久久99| 精品日韩在线一区| 日韩免费视频一区二区| 欧美一级生活片| 日韩一级成人av| 日韩欧美成人激情| 2019国产精品| 久久丝袜美腿综合| 国产欧美一二三区| 国产精品久久久久久妇女6080 | 国产不卡免费视频| 风间由美性色一区二区三区| 国产福利一区二区三区| 99精品在线免费| 91亚洲精华国产精华精华液| 色中色一区二区| 在线成人高清不卡| 日韩一级完整毛片| 精品久久久久久久久久久久久久久久久| 精品免费日韩av| 久久久99久久| 亚洲品质自拍视频网站| 亚洲成人激情社区| 精品一区二区三区免费毛片爱| 欧美一区二区三区免费观看视频| 欧美一二三在线| 久久精品这里都是精品| 亚洲色图.com| 日韩av在线发布| 国产成人精品三级麻豆| 91九色最新地址| 制服丝袜亚洲色图| 国产免费久久精品| 一区二区三区产品免费精品久久75| 午夜私人影院久久久久| 国内成人免费视频| 99久久精品情趣| 欧美一区二区三区视频在线| 久久精品夜色噜噜亚洲a∨| 国产精品―色哟哟| 日韩高清在线观看| 成人av免费网站| 欧美麻豆精品久久久久久| 国产亚洲自拍一区| 一区二区欧美在线观看| 久久国产欧美日韩精品| 91在线视频播放| 日韩欧美第一区| 亚洲精品高清视频在线观看| 精品一区二区影视| 91国产免费观看| 久久精品人人做人人综合 | 久久精品亚洲精品国产欧美kt∨ | 精品久久一区二区| 亚洲免费观看高清完整| 精品一区二区三区影院在线午夜| 色综合一区二区三区| 久久综合狠狠综合久久激情| 亚洲美女区一区| 国产剧情一区在线| 欧美一区二区黄| 亚洲一区在线观看免费观看电影高清 | 日韩激情av在线| 91麻豆福利精品推荐| 久久久久久久久久久久久夜| 日本不卡的三区四区五区| 91网站黄www| 欧美激情一区二区三区不卡| 久久国产人妖系列| 日韩亚洲欧美在线观看| 亚洲一区中文日韩| 99vv1com这只有精品| 国产日韩精品视频一区| 国产一区二区三区在线观看免费视频| 欧美日韩一区二区三区高清 | 91伊人久久大香线蕉| 久久久亚洲午夜电影| 狠狠色丁香婷综合久久| 欧美一区二区三区日韩| 日韩黄色片在线观看| 欧美丰满少妇xxxbbb| 一区二区三区在线观看网站| 一本久道久久综合中文字幕| 国产精品美女久久久久aⅴ国产馆| 韩国精品免费视频|