⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network.h

📁 一个DES,RSA,MD5,RC4等加密算法的源码
💻 H
字号:
#ifndef CRYPTOPP_NETWORK_H
#define CRYPTOPP_NETWORK_H

#include "filters.h"
#include "hrtimer.h"

NAMESPACE_BEGIN(CryptoPP)

const unsigned long INFINITE_TIME = ULONG_MAX;

//! a Source class that can pump from a device for a specified amount of time.
class NonblockingSource : public Source, public BufferedTransformationWithAutoSignal
{
public:
	NonblockingSource(BufferedTransformation *outQ)
		: Source(outQ), m_messagePumped(false) {}

	//! pump up to maxSize bytes using at most maxTime milliseconds
	/*! If checkDelimiter is true, pump up to delimiter, which itself is not extracted or pumped. */
	virtual unsigned long GeneralPump(unsigned long maxSize=ULONG_MAX, unsigned long maxTime=INFINITE_TIME, bool checkDelimiter=false, byte delimiter='\n') =0;

	unsigned long Pump(unsigned long pumpMax=ULONG_MAX) {return GeneralPump(pumpMax);}
	unsigned long TimedPump(unsigned long maxTime) {return GeneralPump(ULONG_MAX, maxTime);}
	unsigned long PumpLine(byte delimiter='\n', unsigned long maxSize=1024) {return GeneralPump(maxSize, INFINITE_TIME, true, delimiter);}

	unsigned int PumpMessages(unsigned int count=UINT_MAX);

private:
	bool m_messagePumped;
};

//! Network Receiver
class NetworkReceiver
{
public:
	virtual bool ReceiveReady(unsigned long timeout=0) =0;
	virtual bool Receive(byte* buf, unsigned int bufLen) =0;
	virtual bool ReceiveResultReady(unsigned long timeout=0) =0;
	virtual unsigned int GetReceiveResult() =0;
	virtual bool EofReceived() const =0;
};

//! a Sink class that queues input and can flush to a device for a specified amount of time.
class NonblockingSink : public Sink
{
public:
	void Flush(bool completeFlush, int propagation=-1)
		{TimedFlush(completeFlush ? INFINITE_TIME : 0);}

	virtual unsigned int TimedFlush(unsigned long maxTime) =0;

	virtual void SetMaxBufferSize(unsigned int maxBufferSize) =0;
	virtual void SetAutoFlush(bool autoFlush = true) =0;

	virtual unsigned int GetMaxBufferSize() const =0;
	virtual unsigned int GetCurrentBufferSize() const =0;
};

//! Network Sender
class NetworkSender
{
public:
	virtual bool SendReady(unsigned long timeout=0) =0;
	virtual bool Send(const byte* buf, unsigned int bufLen) =0;
	virtual bool SendResultReady(unsigned long timeout=0) =0;
	virtual unsigned int GetSendResult() =0;
	virtual void SendEof() =0;
};

#ifdef HIGHRES_TIMER_AVAILABLE

//! Network Source
class NetworkSource : virtual public NetworkReceiver, public NonblockingSource
{
public:
	NetworkSource(BufferedTransformation *outQ);
	unsigned long GeneralPump(unsigned long maxSize=ULONG_MAX, unsigned long maxTime=INFINITE_TIME, bool checkDelimiter=false, byte delimiter='\n');

private:
	SecByteBlock m_buf;
	unsigned int m_bufSize;
	bool m_needReceiveResult;
};

//! Network Sink
class NetworkSink : virtual public NetworkSender, public NonblockingSink
{
public:
	NetworkSink(unsigned int maxBufferSize, bool autoFlush)
		: m_maxBufferSize(maxBufferSize), m_autoFlush(autoFlush), m_needSendResult(false) {}

	void Put(byte b) {NetworkSink::Put(&b, 1);}
	void Put(const byte *str, unsigned int bc);

	void MessageEnd(int propagation=-1) {TimedFlush(INFINITE_TIME); SendEof();}

	unsigned int TimedFlush(unsigned long maxTime);

	void SetMaxBufferSize(unsigned int maxBufferSize) {m_maxBufferSize = maxBufferSize;}
	void SetAutoFlush(bool autoFlush = true) {m_autoFlush = autoFlush;}

	unsigned int GetMaxBufferSize() const {return m_maxBufferSize;}
	unsigned int GetCurrentBufferSize() const {return m_buffer.CurrentSize();}

private:
	unsigned int m_maxBufferSize;
	bool m_autoFlush, m_needSendResult;
	ByteQueue m_buffer;
};

#endif	// #ifdef HIGHRES_TIMER_AVAILABLE

NAMESPACE_END

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -