| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  | #include <LibCore/CIODevice.h>
 | 
					
						
							|  |  |  | #include <LibCore/CSocketAddress.h>
 | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 17:35:43 +02:00
										 |  |  | class CNotifier; | 
					
						
							| 
									
										
										
										
											2019-04-08 04:53:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  | class CSocket : public CIODevice { | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-06-07 17:13:23 +02:00
										 |  |  |     enum class Type { | 
					
						
							| 
									
										
										
										
											2019-05-28 11:53:16 +02:00
										 |  |  |         Invalid, | 
					
						
							|  |  |  |         TCP, | 
					
						
							| 
									
										
										
										
											2019-07-13 19:42:03 +02:00
										 |  |  |         UDP, | 
					
						
							|  |  |  |         Local, | 
					
						
							| 
									
										
										
										
											2019-05-28 11:53:16 +02:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  |     virtual ~CSocket() override; | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-02 20:40:10 +02:00
										 |  |  |     bool connect(const String& hostname, int port); | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  |     bool connect(const CSocketAddress&, int port); | 
					
						
							| 
									
										
										
										
											2019-07-13 19:42:03 +02:00
										 |  |  |     bool connect(const CSocketAddress&); | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ByteBuffer receive(int max_size); | 
					
						
							|  |  |  |     bool send(const ByteBuffer&); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool is_connected() const { return m_connected; } | 
					
						
							| 
									
										
										
										
											2019-07-16 18:00:08 +02:00
										 |  |  |     void set_blocking(bool blocking); | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  |     CSocketAddress source_address() const { return m_source_address; } | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  |     int source_port() const { return m_source_port; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  |     CSocketAddress destination_address() const { return m_source_address; } | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  |     int destination_port() const { return m_destination_port; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-08 04:53:45 +02:00
										 |  |  |     Function<void()> on_connected; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  |     virtual const char* class_name() const override { return "CSocket"; } | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  |     CSocket(Type, CObject* parent); | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  |     CSocketAddress m_source_address; | 
					
						
							|  |  |  |     CSocketAddress m_destination_address; | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  |     int m_source_port { -1 }; | 
					
						
							|  |  |  |     int m_destination_port { -1 }; | 
					
						
							|  |  |  |     bool m_connected { false }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2019-04-10 20:22:23 +02:00
										 |  |  |     virtual bool open(CIODevice::OpenMode) override { ASSERT_NOT_REACHED(); } | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  |     Type m_type { Type::Invalid }; | 
					
						
							| 
									
										
										
										
											2019-04-10 17:35:43 +02:00
										 |  |  |     OwnPtr<CNotifier> m_notifier; | 
					
						
							| 
									
										
										
										
											2019-03-18 14:09:58 +01:00
										 |  |  | }; |