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

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

?? network.cpp

?? 加密函數庫:包括多種加密解密算法,數字簽名,散列算法
?? CPP
字號:
// network.cpp - written and placed in the public domain by Wei Dai

#include "pch.h"
#include "network.h"

NAMESPACE_BEGIN(CryptoPP)

unsigned int NonblockingSource::PumpMessages2(unsigned int &messageCount, bool blocking)
{
	if (messageCount == 0)
		return 0;

	unsigned long byteCount = ULONG_MAX;
	messageCount = 0;
	RETURN_IF_NONZERO(Pump2(byteCount, blocking));
	if (!m_messageEndSent && SourceExhausted())
	{
		RETURN_IF_NONZERO(AttachedTransformation()->Put2(NULL, 0, GetAutoSignalPropagation(), true));
		m_messageEndSent = true;
		messageCount = 1;
	}
	return 0;
}

bool NonblockingSink::IsolatedFlush(bool hardFlush, bool blocking)
{
	TimedFlush(blocking ? INFINITE_TIME : 0);
	return hardFlush && !!GetCurrentBufferSize();
}

// *************************************************************

#ifdef HIGHRES_TIMER_AVAILABLE

NetworkSource::NetworkSource(BufferedTransformation *attachment)
	: NonblockingSource(attachment), m_buf(1024*4), m_bufSize(0), m_state(NORMAL)
{
}

unsigned int NetworkSource::GeneralPump2(unsigned long &byteCount, bool blockingOutput, unsigned long maxTime, bool checkDelimiter, byte delimiter)
{
	NetworkReceiver &receiver = AccessReceiver();

	unsigned long maxSize = byteCount;
	byteCount = 0;
	bool forever = maxTime == INFINITE_TIME;
	Timer timer(Timer::MILLISECONDS, forever);
	unsigned long timeout;
	BufferedTransformation *t = AttachedTransformation();

	if (m_state == OUTPUT_BLOCKED)
		goto DoOutput;

	while (true)
	{
		if (m_state == WAITING_FOR_RESULT)
		{
			if (receiver.MustWaitForResult())
			{
				timeout = SaturatingSubtract(maxTime, timer.ElapsedTime());
				if (!receiver.Wait(timeout))
					break;
			}

			unsigned int recvResult = receiver.GetReceiveResult();
//			assert(recvResult > 0 || receiver.EofReceived());
			m_bufSize += recvResult;
			m_state = NORMAL;
		}

		if (m_bufSize == 0)
		{
			if (receiver.EofReceived())
				break;
		}
		else
		{
			m_putSize = STDMIN((unsigned long)m_bufSize, maxSize - byteCount);
			if (checkDelimiter)
				m_putSize = std::find(m_buf.begin(), m_buf+m_putSize, delimiter) - m_buf;

DoOutput:
			unsigned int result = t->PutModifiable2(m_buf, m_putSize, 0, forever || blockingOutput);
			if (result)
			{
				timeout = SaturatingSubtract(maxTime, timer.ElapsedTime());
				if (t->Wait(timeout))
					goto DoOutput;
				else
				{
					m_state = OUTPUT_BLOCKED;
					return result;
				}
			}
			m_state = NORMAL;

			byteCount += m_putSize;
			m_bufSize -= m_putSize;
			if (m_bufSize > 0)
			{
				memmove(m_buf, m_buf+m_putSize, m_bufSize);
				if (checkDelimiter && m_buf[0] == delimiter)
					break;
			}
		}

		if (byteCount == maxSize)
			break;

		unsigned long elapsed = timer.ElapsedTime();
		if (elapsed > maxTime)
			break;	// once time limit is reached, return even if there is more data waiting

		if (receiver.MustWaitToReceive())
		{
			if (!receiver.Wait(maxTime - elapsed))
				break;
		}

		receiver.Receive(m_buf+m_bufSize, m_buf.size()-m_bufSize);
		m_state = WAITING_FOR_RESULT;
	}

	return 0;
}

// *************************************************************

unsigned int NetworkSink::Put2(const byte *inString, unsigned int length, int messageEnd, bool blocking)
{
	if (m_blockedBytes)
	{
		assert(length >= m_blockedBytes);
		inString += length - m_blockedBytes;
		length = m_blockedBytes;
	}
	m_buffer.LazyPut(inString, length);

	unsigned int targetSize = messageEnd ? 0 : m_maxBufferSize;
	TimedFlush(blocking ? INFINITE_TIME : 0, m_autoFlush ? 0 : targetSize);

	if (m_buffer.CurrentSize() > targetSize)
	{
		assert(!blocking);
		m_blockedBytes = STDMIN(m_buffer.CurrentSize() - targetSize, (unsigned long)length);
		m_buffer.UndoLazyPut(m_blockedBytes);
		m_buffer.FinalizeLazyPut();
		return STDMAX(m_blockedBytes, 1U);
	}
	m_blockedBytes = 0;

	if (messageEnd)
		AccessSender().SendEof();
	return 0;
}

unsigned int NetworkSink::TimedFlush(unsigned long maxTime, unsigned int targetSize)
{
	if (m_buffer.IsEmpty())
		return 0;

	NetworkSender &sender = AccessSender();

	bool forever = maxTime == INFINITE_TIME;
	Timer timer(Timer::MILLISECONDS, forever);
	unsigned long timeout;
	unsigned int totalFlushSize = 0;

	while (true)
	{
		if (m_needSendResult)
		{
			if (sender.MustWaitForResult())
			{
				timeout = SaturatingSubtract(maxTime, timer.ElapsedTime());
				if (!sender.Wait(timeout))
					break;
			}

			unsigned int sendResult = sender.GetSendResult();
			m_buffer.Skip(sendResult);
			totalFlushSize += sendResult;
			m_needSendResult = false;

			if (m_buffer.CurrentSize() <= targetSize)
				break;
		}

		unsigned long elapsed = timer.ElapsedTime();
		if (elapsed > maxTime)
			break;	// once time limit is reached, return even if there is more data waiting

		if (sender.MustWaitToSend())
		{
			if (!sender.Wait(maxTime - elapsed))
				break;
		}

		unsigned int contiguousSize = 0;
		const byte *block = m_buffer.Spy(contiguousSize);

		sender.Send(block, contiguousSize);
		m_needSendResult = true;
	}

	return totalFlushSize;
}

#endif	// #ifdef HIGHRES_TIMER_AVAILABLE

NAMESPACE_END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉经典版下载| 欧美一二三四区在线| 日本va欧美va精品发布| 亚洲成人先锋电影| 久久女同互慰一区二区三区| 欧美曰成人黄网| av不卡在线观看| 国产麻豆视频精品| 日韩精品欧美成人高清一区二区| 国产精品另类一区| 精品福利一二区| 欧美一区二区三区视频免费| 色狠狠色狠狠综合| 99久久久国产精品免费蜜臀| 国产ts人妖一区二区| 韩国一区二区视频| 美女精品一区二区| 偷窥少妇高潮呻吟av久久免费| 亚洲欧美激情一区二区| 国产亚洲女人久久久久毛片| 日韩一区二区三区免费看| 欧美日韩不卡一区二区| 欧美亚洲国产怡红院影院| 色婷婷综合久久久| 一本大道av一区二区在线播放| 成人黄色av电影| 成人免费高清视频在线观看| 国产99久久久精品| 国产91精品露脸国语对白| 国产高清在线精品| 国产成人免费9x9x人网站视频| 狠狠狠色丁香婷婷综合激情| 国产真实精品久久二三区| 国产自产高清不卡| 国产精品91xxx| 丁香啪啪综合成人亚洲小说| 国产91对白在线观看九色| 国产成人亚洲精品狼色在线| 国产精品538一区二区在线| 丰满亚洲少妇av| www.视频一区| 91色综合久久久久婷婷| 色老头久久综合| 欧美日韩激情一区| 在线不卡免费av| 精品久久久久99| 国产亚洲人成网站| 国产精品久久久久久一区二区三区| 国产精品麻豆一区二区| 自拍偷拍亚洲综合| 亚洲1区2区3区4区| 男人的天堂久久精品| 国产毛片精品国产一区二区三区| 国产伦精品一区二区三区在线观看| 国产成人免费av在线| 色综合天天视频在线观看 | 国产风韵犹存在线视精品| 国产麻豆精品在线观看| 成人91在线观看| 欧美亚洲高清一区二区三区不卡| 91麻豆精品国产自产在线观看一区| 日韩精品一区二| 国产精品久久影院| 天天综合色天天| 国产一区二区日韩精品| 97se亚洲国产综合自在线不卡| 欧洲人成人精品| 日韩欧美高清dvd碟片| 国产精品日韩精品欧美在线| 亚洲一区国产视频| 久久99国内精品| 91在线porny国产在线看| 欧美精品日韩一区| 国产欧美日韩在线看| 一区二区三区.www| 韩国精品主播一区二区在线观看| 99久久精品免费精品国产| 777奇米四色成人影色区| 久久女同性恋中文字幕| 亚洲亚洲精品在线观看| 久久99精品久久久久婷婷| 一本久久精品一区二区| 精品久久久久久最新网址| 一区二区在线看| 国产精品一区二区三区四区| 色婷婷激情一区二区三区| 亚洲精品一区二区三区99| 亚洲靠逼com| 国产成人免费视频| 日韩一区国产二区欧美三区| 中文字幕制服丝袜成人av| 日韩av高清在线观看| voyeur盗摄精品| 欧美成人video| 一区二区三区资源| 国产精品2024| 日韩视频免费观看高清完整版在线观看 | 亚洲靠逼com| 国产69精品久久777的优势| 欧美疯狂性受xxxxx喷水图片| 中文字幕在线播放不卡一区| 久久成人av少妇免费| 色乱码一区二区三区88| 国产精品免费视频观看| 精品午夜一区二区三区在线观看| 欧美日韩精品系列| 亚洲欧美另类久久久精品 | 这里只有精品免费| 亚洲黄色免费网站| www.亚洲人| 欧美激情综合五月色丁香小说| 轻轻草成人在线| 欧美优质美女网站| 亚洲精品成人精品456| 成人一区二区三区| 久久精品男人天堂av| 精品一二线国产| 欧洲视频一区二区| 亚洲自拍偷拍麻豆| 日本精品免费观看高清观看| 日韩一区在线播放| 不卡高清视频专区| 亚洲欧美自拍偷拍色图| 成人免费视频一区二区| 国产欧美一区二区精品秋霞影院 | 久久精品久久精品| 91精品国产综合久久婷婷香蕉| 国产在线视频不卡二| 91精品国产欧美日韩| 天天综合天天做天天综合| 欧美视频中文一区二区三区在线观看| 亚洲啪啪综合av一区二区三区| 成人av网址在线| 亚洲欧美日韩中文播放| 色综合色综合色综合色综合色综合| 国产精品日韩精品欧美在线| 成人性生交大片免费看中文网站| 久久精品欧美一区二区三区麻豆| 国产超碰在线一区| 亚洲国产精品成人综合| 国产999精品久久久久久绿帽| 国产欧美日韩在线视频| 97se狠狠狠综合亚洲狠狠| 亚洲美女屁股眼交3| 色狠狠桃花综合| 日韩中文字幕av电影| 日韩欧美国产1| 国产精品亚洲一区二区三区在线| 国产精品亲子乱子伦xxxx裸| 不卡电影一区二区三区| 亚洲综合自拍偷拍| 日韩午夜在线影院| 国产成人免费9x9x人网站视频| 国产精品电影院| 欧美性欧美巨大黑白大战| 日韩在线一区二区| 国产午夜精品理论片a级大结局| 豆国产96在线|亚洲| 亚洲精品大片www| 日韩一区二区三区视频| 成人小视频免费观看| 一区二区三区四区激情| 欧美乱熟臀69xxxxxx| 国产一级精品在线| 一区二区三区日韩| 日韩精品一区二区三区在线| 成人一级黄色片| 亚洲电影中文字幕在线观看| 日韩一级免费一区| 不卡欧美aaaaa| 日韩中文字幕一区二区三区| 欧美激情一区二区三区四区| 欧亚洲嫩模精品一区三区| 久久精品国产免费| 亚洲人妖av一区二区| 欧美成人女星排名| 91免费国产视频网站| 久久超级碰视频| 亚洲乱码中文字幕| 精品伦理精品一区| 91黄色免费网站| 国产精品一区二区在线观看网站| 夜夜爽夜夜爽精品视频| 2021国产精品久久精品| 欧美影院一区二区| 东方aⅴ免费观看久久av| 亚欧色一区w666天堂| 全国精品久久少妇| 色婷婷激情久久| 国产欧美日韩一区二区三区在线观看| 成人高清视频在线| 美女视频黄 久久| 亚洲色图视频网| 久久久久国产精品麻豆ai换脸| 欧美探花视频资源| 91在线国内视频| 国产一区999| 久久国产免费看| 亚洲国产一区二区视频| 国产欧美日本一区二区三区|