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

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

?? rtcpcompoundpacketbuilder.cpp

?? jrtp庫(kù)
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*  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 "rtcpcompoundpacketbuilder.h"#include "rtcpsrpacket.h"#include "rtcprrpacket.h"#include "rtcpsdespacket.h"#include "rtcpbyepacket.h"#include "rtcpapppacket.h"#if ! (defined(WIN32) || defined(_WIN32_WCE))	#include <netinet/in.h>#endif // WIN32#include "rtpdebug.h"RTCPCompoundPacketBuilder::RTCPCompoundPacketBuilder(RTPMemoryManager *mgr) : RTCPCompoundPacket(mgr), report(mgr), sdes(mgr){	byesize = 0;	appsize = 0;	maximumpacketsize = 0;	buffer = 0;	external = false;	arebuilding = false;}RTCPCompoundPacketBuilder::~RTCPCompoundPacketBuilder(){	if (external)		compoundpacket = 0; // make sure RTCPCompoundPacket doesn't delete the external buffer	ClearBuildBuffers();}void RTCPCompoundPacketBuilder::ClearBuildBuffers(){	report.Clear();	sdes.Clear();	std::list<Buffer>::const_iterator it;	for (it = byepackets.begin() ; it != byepackets.end() ; it++)	{		if ((*it).packetdata)			RTPDeleteByteArray((*it).packetdata,GetMemoryManager());	}	for (it = apppackets.begin() ; it != apppackets.end() ; it++)	{		if ((*it).packetdata)			RTPDeleteByteArray((*it).packetdata,GetMemoryManager());	}	byepackets.clear();	apppackets.clear();	byesize = 0;	appsize = 0;}int RTCPCompoundPacketBuilder::InitBuild(size_t maxpacketsize){	if (arebuilding)		return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILDING;	if (compoundpacket)		return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILT;	if (maxpacketsize < RTP_MINPACKETSIZE)		return ERR_RTP_RTCPCOMPPACKBUILDER_MAXPACKETSIZETOOSMALL;		maximumpacketsize = maxpacketsize;	buffer = 0;	external = false;	byesize = 0;	appsize = 0;		arebuilding = true;	return 0;}int RTCPCompoundPacketBuilder::InitBuild(void *externalbuffer,size_t buffersize){	if (arebuilding)		return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILDING;	if (compoundpacket)		return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILT;	if (buffersize < RTP_MINPACKETSIZE)		return ERR_RTP_RTCPCOMPPACKBUILDER_BUFFERSIZETOOSMALL;	maximumpacketsize = buffersize;	buffer = (uint8_t *)externalbuffer;	external = true;	byesize = 0;	appsize = 0;	arebuilding = true;	return 0;}int RTCPCompoundPacketBuilder::StartSenderReport(uint32_t senderssrc,const RTPNTPTime &ntptimestamp,uint32_t rtptimestamp,                                                 uint32_t packetcount,uint32_t octetcount){	if (!arebuilding)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;	if (report.headerlength != 0)		return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYGOTREPORT;	size_t totalsize = byesize+appsize+sdes.NeededBytes();	size_t sizeleft = maximumpacketsize-totalsize;	size_t neededsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t)+sizeof(RTCPSenderReport);		if (neededsize > sizeleft)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;		// fill in some things	report.headerlength = sizeof(uint32_t)+sizeof(RTCPSenderReport);	report.isSR = true;			uint32_t *ssrc = (uint32_t *)report.headerdata;	*ssrc = htonl(senderssrc);	RTCPSenderReport *sr = (RTCPSenderReport *)(report.headerdata + sizeof(uint32_t));	sr->ntptime_msw = htonl(ntptimestamp.GetMSW());	sr->ntptime_lsw = htonl(ntptimestamp.GetLSW());	sr->rtptimestamp = htonl(rtptimestamp);	sr->packetcount = htonl(packetcount);	sr->octetcount = htonl(octetcount);	return 0;}int RTCPCompoundPacketBuilder::StartReceiverReport(uint32_t senderssrc){	if (!arebuilding)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;	if (report.headerlength != 0)		return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYGOTREPORT;	size_t totalsize = byesize+appsize+sdes.NeededBytes();	size_t sizeleft = maximumpacketsize-totalsize;	size_t neededsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t);		if (neededsize > sizeleft)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;		// fill in some things	report.headerlength = sizeof(uint32_t);	report.isSR = false;		uint32_t *ssrc = (uint32_t *)report.headerdata;	*ssrc = htonl(senderssrc);	return 0;}int RTCPCompoundPacketBuilder::AddReportBlock(uint32_t ssrc,uint8_t fractionlost,int32_t packetslost,uint32_t exthighestseq,	                                      uint32_t jitter,uint32_t lsr,uint32_t dlsr){	if (!arebuilding)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;	if (report.headerlength == 0)		return ERR_RTP_RTCPCOMPPACKBUILDER_REPORTNOTSTARTED;	size_t totalothersize = byesize+appsize+sdes.NeededBytes();	size_t reportsizewithextrablock = report.NeededBytesWithExtraReportBlock();		if ((totalothersize+reportsizewithextrablock) > maximumpacketsize)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;	uint8_t *buf = RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPRECEIVERREPORT) uint8_t[sizeof(RTCPReceiverReport)];	if (buf == 0)		return ERR_RTP_OUTOFMEM;		RTCPReceiverReport *rr = (RTCPReceiverReport *)buf;	uint32_t *packlost = (uint32_t *)&packetslost;	uint32_t packlost2 = (*packlost);			rr->ssrc = htonl(ssrc);	rr->fractionlost = fractionlost;	rr->packetslost[2] = (uint8_t)(packlost2&0xFF);	rr->packetslost[1] = (uint8_t)((packlost2>>8)&0xFF);	rr->packetslost[0] = (uint8_t)((packlost2>>16)&0xFF);	rr->exthighseqnr = htonl(exthighestseq);	rr->jitter = htonl(jitter);	rr->lsr = htonl(lsr);	rr->dlsr = htonl(dlsr);	report.reportblocks.push_back(Buffer(buf,sizeof(RTCPReceiverReport)));	return 0;}int RTCPCompoundPacketBuilder::AddSDESSource(uint32_t ssrc){	if (!arebuilding)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;	size_t totalotherbytes = byesize+appsize+report.NeededBytes();	size_t sdessizewithextrasource = sdes.NeededBytesWithExtraSource();	if ((totalotherbytes + sdessizewithextrasource) > maximumpacketsize)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;	int status;	if ((status = sdes.AddSSRC(ssrc)) < 0)		return status;	return 0;}int RTCPCompoundPacketBuilder::AddSDESNormalItem(RTCPSDESPacket::ItemType t,const void *itemdata,uint8_t itemlength){	if (!arebuilding)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;	if (sdes.sdessources.empty())		return ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE;	uint8_t itemid;		switch(t)	{	case RTCPSDESPacket::CNAME:		itemid = RTCP_SDES_ID_CNAME;		break;	case RTCPSDESPacket::NAME:		itemid = RTCP_SDES_ID_NAME;		break;	case RTCPSDESPacket::EMAIL:		itemid = RTCP_SDES_ID_EMAIL;		break;	case RTCPSDESPacket::PHONE:		itemid = RTCP_SDES_ID_PHONE;		break;	case RTCPSDESPacket::LOC:		itemid = RTCP_SDES_ID_LOCATION;		break;	case RTCPSDESPacket::TOOL:		itemid = RTCP_SDES_ID_TOOL;		break;	case RTCPSDESPacket::NOTE:		itemid = RTCP_SDES_ID_NOTE;		break;	default:		return ERR_RTP_RTCPCOMPPACKBUILDER_INVALIDITEMTYPE;	}	size_t totalotherbytes = byesize+appsize+report.NeededBytes();	size_t sdessizewithextraitem = sdes.NeededBytesWithExtraItem(itemlength);	if ((sdessizewithextraitem+totalotherbytes) > maximumpacketsize)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;	uint8_t *buf;	size_t len;	buf = RTPNew(GetMemoryManager(),RTPMEM_TYPE_BUFFER_RTCPSDESBLOCK) uint8_t[sizeof(RTCPSDESHeader)+(size_t)itemlength];	if (buf == 0)		return ERR_RTP_OUTOFMEM;	len = sizeof(RTCPSDESHeader)+(size_t)itemlength;	RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(buf);	sdeshdr->sdesid = itemid;	sdeshdr->length = itemlength;	if (itemlength != 0)		memcpy((buf + sizeof(RTCPSDESHeader)),itemdata,(size_t)itemlength);	sdes.AddItem(buf,len);	return 0;}#ifdef RTP_SUPPORT_SDESPRIVint RTCPCompoundPacketBuilder::AddSDESPrivateItem(const void *prefixdata,uint8_t prefixlength,const void *valuedata,                                                  uint8_t valuelength){	if (!arebuilding)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;	if (sdes.sdessources.empty())		return ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE;	size_t itemlength = ((size_t)prefixlength)+1+((size_t)valuelength);	if (itemlength > 255)		return ERR_RTP_RTCPCOMPPACKBUILDER_TOTALITEMLENGTHTOOBIG;		size_t totalotherbytes = byesize+appsize+report.NeededBytes();	size_t sdessizewithextraitem = sdes.NeededBytesWithExtraItem(itemlength);	if ((sdessizewithextraitem+totalotherbytes) > maximumpacketsize)		return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;	uint8_t *buf;	size_t len;	buf = RTPNew(GetMemoryManager(),RTPMEM_TYPE_BUFFER_RTCPSDESBLOCK) uint8_t[sizeof(RTCPSDESHeader)+itemlength];	if (buf == 0)		return ERR_RTP_OUTOFMEM;	len = sizeof(RTCPSDESHeader)+(size_t)itemlength;	RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(buf);	sdeshdr->sdesid = RTCP_SDES_ID_PRIVATE;	sdeshdr->length = itemlength;		buf[sizeof(RTCPSDESHeader)] = prefixlength;	if (prefixlength != 0)		memcpy((buf+sizeof(RTCPSDESHeader)+1),prefixdata,(size_t)prefixlength);	if (valuelength != 0)		memcpy((buf+sizeof(RTCPSDESHeader)+1+(size_t)prefixlength),valuedata,(size_t)valuelength);	sdes.AddItem(buf,len);	return 0;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合九色综合97_久久久| 成人免费va视频| 亚洲一区二区三区四区的| 国产精品免费久久久久| 成人欧美一区二区三区| 亚洲精品五月天| 免费在线观看视频一区| 国产综合成人久久大片91| 国产成人精品影视| www..com久久爱| 91欧美激情一区二区三区成人| www.在线成人| 日韩视频在线一区二区| 国产日产亚洲精品系列| 亚洲欧美综合另类在线卡通| 亚洲国产视频网站| 国产很黄免费观看久久| 不卡一区二区三区四区| 在线观看亚洲精品| 精品少妇一区二区三区在线播放| 中文字幕一区二区三区四区| 一区二区三区在线观看网站| 日韩—二三区免费观看av| 国产精品一区二区在线观看不卡| 99久久伊人网影院| 日韩午夜在线影院| 亚洲aⅴ怡春院| 91色porny在线视频| 久久综合九色欧美综合狠狠| 日韩经典一区二区| 欧美性猛交xxxx乱大交退制版| 久久夜色精品一区| 天堂蜜桃91精品| 91福利精品视频| 亚洲男同性视频| 欧美私人免费视频| 一区二区三区91| av中文字幕亚洲| 最近中文字幕一区二区三区| 99国产麻豆精品| 亚洲综合精品久久| 欧美一级免费观看| 欧美aaaaaa午夜精品| 日韩欧美一级精品久久| 午夜国产精品一区| 91精品国产aⅴ一区二区| 免费视频一区二区| 国产亚洲欧美日韩在线一区| 99久久精品国产一区二区三区 | 国产精品综合一区二区| 国产精品美女一区二区三区| 91麻豆国产香蕉久久精品| 最新成人av在线| 欧美高清视频www夜色资源网| 亚洲综合色在线| 日韩三级精品电影久久久| 国产一区 二区 三区一级| 亚洲美女在线国产| 欧美日韩在线精品一区二区三区激情| 亚洲一区二区3| 久久亚洲精品国产精品紫薇| 成人网男人的天堂| 日韩国产一二三区| 日本一区二区视频在线| 717成人午夜免费福利电影| 狠狠色丁香九九婷婷综合五月| 日本一区二区综合亚洲| 91精品久久久久久久91蜜桃| 不卡的电视剧免费网站有什么| 全国精品久久少妇| 亚洲综合成人网| 国产精品麻豆久久久| 精品国产91乱码一区二区三区| 色av综合在线| av在线不卡电影| 成人免费视频一区| 成人精品免费看| 国产精品一区二区不卡| 亚洲国产欧美在线人成| 国产精品蜜臀在线观看| 欧美激情中文不卡| 国产精品麻豆一区二区| 国产精品你懂的| 国产精品色噜噜| 国产精品免费看片| 亚洲一区在线看| 奇米在线7777在线精品| 国产在线麻豆精品观看| 国产精品自拍三区| 成人av网站在线观看| 不卡的av中国片| 日本精品裸体写真集在线观看| 国产精品99精品久久免费| 韩国av一区二区| 成人精品鲁一区一区二区| 99国产精品久久久久久久久久久| 91亚洲精华国产精华精华液| 欧美性猛片aaaaaaa做受| 在线播放中文字幕一区| 精品国产亚洲一区二区三区在线观看| 欧美电影免费观看高清完整版在| 欧美色电影在线| 欧美一级生活片| 国产精品毛片无遮挡高清| 亚洲国产综合色| 国产成人免费av在线| 91麻豆精品国产91久久久更新时间 | 日韩一级在线观看| 综合色天天鬼久久鬼色| 亚洲成人午夜影院| 国产精品一区二区久激情瑜伽 | 亚洲高清中文字幕| 久久国产精品区| 欧美另类高清zo欧美| 国产精品久久99| 国产九色sp调教91| 亚洲精品在线一区二区| 美腿丝袜亚洲三区| 色婷婷久久久久swag精品| 精品久久国产字幕高潮| 天使萌一区二区三区免费观看| 国产91富婆露脸刺激对白| 日韩欧美电影一二三| 婷婷一区二区三区| 欧美日本视频在线| 亚洲第一搞黄网站| 欧美精品在欧美一区二区少妇| 亚洲一区成人在线| 欧美日韩一区高清| 爽好久久久欧美精品| 717成人午夜免费福利电影| 日韩高清不卡一区二区| 精品成人在线观看| fc2成人免费人成在线观看播放| 国产精品久久二区二区| 日本韩国视频一区二区| 一区二区三区视频在线看| 欧洲一区二区三区在线| 香港成人在线视频| 日韩一区二区三区四区| 高清在线成人网| 国产午夜亚洲精品羞羞网站| 99久久婷婷国产综合精品 | 成人精品视频.| 亚洲日本免费电影| 久久亚洲精精品中文字幕早川悠里| 精品一区二区三区日韩| 综合欧美一区二区三区| 久久一区二区三区国产精品| 91一区二区在线| 捆绑变态av一区二区三区| 国产精品电影一区二区| 日韩天堂在线观看| 欧美日韩久久一区二区| 成人永久aaa| 国产精品亚洲成人| 美国三级日本三级久久99| 国产精品初高中害羞小美女文| 日韩一区二区三区观看| 91视频精品在这里| 99r国产精品| 国产一区二区三区四区五区入口| 五月婷婷久久综合| 亚洲码国产岛国毛片在线| 国产欧美一区二区三区在线看蜜臀 | 婷婷激情综合网| 国产精品久久久久9999吃药| 精品捆绑美女sm三区| 91精品国产综合久久福利软件| 成人av影视在线观看| 国产在线精品视频| 九九**精品视频免费播放| 日本中文字幕一区| 久久99精品国产91久久来源| 婷婷综合另类小说色区| 日韩av一区二区在线影视| 一区二区免费在线播放| 日韩av中文字幕一区二区三区| 午夜精品福利久久久| 日本不卡视频在线观看| 精品综合久久久久久8888| 久久99精品久久久久婷婷| 国产福利91精品一区二区三区| 国产乱人伦偷精品视频不卡| 成人av动漫网站| 精品视频免费在线| 日韩欧美国产综合一区| 综合在线观看色| 国产一区不卡在线| 在线免费观看一区| 亚洲精品一区在线观看| 国产精品无码永久免费888| 亚洲综合色自拍一区| 高清在线不卡av| 4hu四虎永久在线影院成人| 国产农村妇女毛片精品久久麻豆| 一区二区三区欧美| 国产精品自拍在线| 日韩欧美国产三级电影视频| 中文字幕一区二区在线播放|