mirror of
				https://github.com/Telecominfraproject/wlan-cloud-lib-poco.git
				synced 2025-10-30 10:12:23 +00:00 
			
		
		
		
	 c4e676d36d
			
		
	
	c4e676d36d
	
	
	
		
			
			* add PMTU discovery #2329 * add socket gather/scatter capabilities #2330 (win, udp) * enable WSAPoll * add FastMemoryPool * add receiveFrom() with native args * allow copying of StringTokenizer * add AtomicFlag and SpinlockMutex * update .gitignore * UDPServer and client #2343 (windows) * fix warnings * fix warnings * regenerate Net VS solutions * regenerate CppUnit projects/solutions * clang fixes * gcc fixes * try to fix travis * more travis fixes * more travis fixes * handle UDPClient exception * fix makefiles and init order warnings * add UNIX gather/scatter sendto/recvfrom implementations and tests * run travis tests as sudo * try to run tests as sudo, 2nd attempt * fix warning * use mutex in reactor * lock-order-inversion in SocketReactor #2346 * add PMTU discovery #2329 (linux) * ICMPSocket does not check reply address #1921 * remove some ignored tests * add PMTU discovery #2329 (reconcile logic with #1921) * fix native receiveFrome() * reinstate ignoring of proxy errors * add testMTU to ignore list * add include atomic * NTPClient not checking reply address #2348 * some ICMP/MTU fixes * UDPSocketReader cleanup * resolve some socket inheritance warnings * add NTP time sync to ignored tests * SocketNotifier not thread-safe #2345 * prevent x64 samples build attempt for win32 * build TestApp and Library * fix ICMP tests * regen VS projects * regen VS projects and add missing 2012 files * remove debug prints
		
			
				
	
	
		
			125 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //
 | |
| // WebSocketImpl.h
 | |
| //
 | |
| // Library: Net
 | |
| // Package: WebSocket
 | |
| // Module:  WebSocketImpl
 | |
| //
 | |
| // Definition of the StreamSocketImpl class.
 | |
| //
 | |
| // Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
 | |
| // and Contributors.
 | |
| //
 | |
| // SPDX-License-Identifier:	BSL-1.0
 | |
| //
 | |
| 
 | |
| 
 | |
| #ifndef Net_WebSocketImpl_INCLUDED
 | |
| #define Net_WebSocketImpl_INCLUDED
 | |
| 
 | |
| 
 | |
| #include "Poco/Net/StreamSocketImpl.h"
 | |
| #include "Poco/Buffer.h"
 | |
| #include "Poco/Random.h"
 | |
| 
 | |
| 
 | |
| namespace Poco {
 | |
| namespace Net {
 | |
| 
 | |
| 
 | |
| class HTTPSession;
 | |
| 
 | |
| 
 | |
| class Net_API WebSocketImpl: public StreamSocketImpl
 | |
| 	/// This class implements a WebSocket, according
 | |
| 	/// to the WebSocket protocol described in RFC 6455.
 | |
| {
 | |
| public:
 | |
| 	WebSocketImpl(StreamSocketImpl* pStreamSocketImpl, HTTPSession& session, bool mustMaskPayload);
 | |
| 		/// Creates a WebSocketImpl.
 | |
| 	
 | |
| 	// StreamSocketImpl
 | |
| 	virtual int sendBytes(const void* buffer, int length, int flags);
 | |
| 		/// Sends a WebSocket protocol frame.
 | |
| 		
 | |
| 	virtual int receiveBytes(void* buffer, int length, int flags);
 | |
| 		/// Receives a WebSocket protocol frame.
 | |
| 		
 | |
| 	virtual int receiveBytes(Poco::Buffer<char>& buffer, int flags = 0, const Poco::Timespan& span = 0);
 | |
| 		/// Receives a WebSocket protocol frame.
 | |
| 
 | |
| 	virtual SocketImpl* acceptConnection(SocketAddress& clientAddr);
 | |
| 	virtual void connect(const SocketAddress& address);
 | |
| 	virtual void connect(const SocketAddress& address, const Poco::Timespan& timeout);
 | |
| 	virtual void connectNB(const SocketAddress& address);
 | |
| 	virtual void bind(const SocketAddress& address, bool reuseAddress = false);
 | |
| 	virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort);
 | |
| 	virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false);
 | |
| 	virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only);
 | |
| 	virtual void listen(int backlog = 64);
 | |
| 	virtual void close();
 | |
| 	virtual void shutdownReceive();
 | |
| 	virtual void shutdownSend();
 | |
| 	virtual void shutdown();
 | |
| 	virtual int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0);
 | |
| 	virtual int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0);
 | |
| 	virtual void sendUrgent(unsigned char data);
 | |
| 	virtual int available();
 | |
| 	virtual bool secure() const;
 | |
| 	virtual void setSendTimeout(const Poco::Timespan& timeout); 
 | |
| 	virtual Poco::Timespan getSendTimeout();
 | |
| 	virtual void setReceiveTimeout(const Poco::Timespan& timeout);
 | |
| 	virtual Poco::Timespan getReceiveTimeout();
 | |
| 
 | |
| 	// Internal
 | |
| 	int frameFlags() const;
 | |
| 		/// Returns the frame flags of the most recently received frame.
 | |
| 		
 | |
| 	bool mustMaskPayload() const;
 | |
| 		/// Returns true if the payload must be masked.
 | |
| 
 | |
| protected:
 | |
| 	enum
 | |
| 	{
 | |
| 		FRAME_FLAG_MASK   = 0x80,
 | |
| 		MAX_HEADER_LENGTH = 14
 | |
| 	};
 | |
| 	
 | |
| 	int receiveHeader(char mask[4], bool& useMask);
 | |
| 	int receivePayload(char *buffer, int payloadLength, char mask[4], bool useMask);
 | |
| 	int receiveNBytes(void* buffer, int bytes);
 | |
| 	int receiveSomeBytes(char* buffer, int bytes);
 | |
| 	virtual ~WebSocketImpl();
 | |
| 
 | |
| private:
 | |
| 	WebSocketImpl();
 | |
| 	
 | |
| 	StreamSocketImpl* _pStreamSocketImpl;
 | |
| 	Poco::Buffer<char> _buffer;
 | |
| 	int _bufferOffset;
 | |
| 	int _frameFlags;
 | |
| 	bool _mustMaskPayload;
 | |
| 	Poco::Random _rnd;
 | |
| };
 | |
| 
 | |
| 
 | |
| //
 | |
| // inlines
 | |
| //
 | |
| inline int WebSocketImpl::frameFlags() const
 | |
| {
 | |
| 	return _frameFlags;
 | |
| }
 | |
| 
 | |
| 
 | |
| inline bool WebSocketImpl::mustMaskPayload() const
 | |
| {
 | |
| 	return _mustMaskPayload;
 | |
| }
 | |
| 
 | |
| 
 | |
| } } // namespace Poco::Net
 | |
| 
 | |
| 
 | |
| #endif // Net_WebSocketImpl_INCLUDED
 |