PIP 5.5.3
Platform-Independent Primitives
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
PIEthernet Class Reference

Ethernet device. More...

#include <piethernet.h>

Inheritance diagram for PIEthernet:
Inheritance graph
[legend]

Classes

struct  Interface
 Network interface descriptor. More...
 
class  InterfaceList
 Array of Interface with some features. More...
 

Public Types

enum  Type { UDP , TCP_Client , TCP_Server }
 Type of PIEthernet. More...
 
enum  Parameters {
  ReuseAddress = 0x1 , Broadcast = 0x2 , SeparateSockets = 0x4 , MulticastLoop = 0x8 ,
  KeepConnection = 0x10 , DisonnectOnTimeout = 0x20 , NoDelay = 0x40
}
 Parameters of PIEthernet. More...
 
enum  InterfaceFlag {
  ifActive = 0x1 , ifRunning = 0x2 , ifBroadcast = 0x4 , ifMulticast = 0x8 ,
  ifLoopback = 0x10 , ifPTP = 0x20
}
 Flags of network interface. More...
 
typedef PIFlags< InterfaceFlagInterfaceFlags
 PIFlags of network interface flags
 
- Public Types inherited from PIIODevice
enum  DeviceMode { ReadOnly = 0x01 , WriteOnly = 0x02 , ReadWrite = 0x03 }
 Open modes for PIIODevice. More...
 
enum  DeviceOption { BlockingRead = 0x01 , BlockingWrite = 0x02 }
 Options for PIIODevice, works with some devices. More...
 
enum  DeviceInfoFlag { Sequential = 0x01 , Reliable = 0x02 }
 Characteristics of PIIODevice channel. More...
 

Public Member Functions

 PIEthernet ()
 Contructs UDP PIEthernet with empty read address.
 
 PIEthernet (Type type, const PIString &ip_port=PIString(), const PIFlags< Parameters > params=PIEthernet::ReuseAddress|PIEthernet::MulticastLoop|PIEthernet::KeepConnection)
 Contructs PIEthernet with type "type", read address "ip_port" and parameters "params".
 
void setReadAddress (const PIString &ip, int port)
 Set read address.
 
void setReadAddress (const PIString &ip_port)
 Set read address in format "i.i.i.i:p".
 
void setReadAddress (const PINetworkAddress &addr)
 Set read address.
 
void setReadIP (const PIString &ip)
 Set read IP.
 
void setReadPort (int port)
 Set read port.
 
void setSendAddress (const PIString &ip, int port)
 Set send address.
 
void setSendAddress (const PIString &ip_port)
 Set send address in format "i.i.i.i:p".
 
void setSendAddress (const PINetworkAddress &addr)
 Set send address.
 
void setSendIP (const PIString &ip)
 Set send IP.
 
void setSendPort (int port)
 Set send port.
 
PINetworkAddress readAddress () const
 Returns read address in format "i.i.i.i:p".
 
PIString readIP () const
 Returns read IP.
 
int readPort () const
 Returns read port.
 
PINetworkAddress sendAddress () const
 Returns send address in format "i.i.i.i:p".
 
PIString sendIP () const
 Returns send IP.
 
int sendPort () const
 Returns send port.
 
PINetworkAddress lastReadAddress () const
 Returns address of last received UDP packet in format "i.i.i.i:p".
 
PIString lastReadIP () const
 Returns IP of last received UDP packet.
 
int lastReadPort () const
 Returns port of last received UDP packet.
 
void setParameters (PIFlags< PIEthernet::Parameters > parameters_)
 Set parameters to "parameters_". You should to reopen PIEthernet to apply them.
 
void setParameter (PIEthernet::Parameters parameter, bool on=true)
 Set parameter "parameter" to state "on". You should to reopen PIEthernet to apply this.
 
bool isParameterSet (PIEthernet::Parameters parameter) const
 Returns if parameter "parameter" is set.
 
PIFlags< PIEthernet::Parametersparameters () const
 Returns parameters.
 
Type type () const
 Returns PIEthernet type.
 
PISystemTime readTimeout () const
 Returns read timeout.
 
PISystemTime writeTimeout () const
 Returns write timeout.
 
void setReadTimeout (PISystemTime tm)
 Set timeout for read.
 
void setWriteTimeout (PISystemTime tm)
 Set timeout for write.
 
void setReadBufferSize (int bytes)
 Set socket receive buffer size.
 
void setWriteBufferSize (int bytes)
 Set socket send buffer size.
 
int TTL () const
 Returns TTL (Time To Live)
 
int multicastTTL () const
 Returns multicast TTL (Time To Live)
 
void setTTL (int ttl)
 Set TTL (Time To Live), default is 64.
 
void setMulticastTTL (int ttl)
 Set multicast TTL (Time To Live), default is 1.
 
bool joinMulticastGroup (const PIString &group)
 Join to multicast group with address "group". Use only for UDP.
 
bool leaveMulticastGroup (const PIString &group)
 Leave multicast group with address "group". Use only for UDP.
 
const PIStringListmulticastGroups () const
 Returns joined multicast groups. Use only for UDP.
 
bool connect (bool threaded=true)
 If "threaded" queue connect to TCP server with address readAddress() in any read() or write() call. Otherwise connect immediate. Use only for TCP_Client.
 
bool connect (const PIString &ip, int port, bool threaded=true)
 Connect to TCP server with address "ip":"port". Use only for TCP_Client.
 
bool connect (const PIString &ip_port, bool threaded=true)
 Connect to TCP server with address "ip_port". Use only for TCP_Client.
 
bool connect (const PINetworkAddress &addr, bool threaded=true)
 Connect to TCP server with address "addr". Use only for TCP_Client.
 
bool isConnected () const
 Returns if PIEthernet connected to TCP server. Use only for TCP_Client.
 
bool isConnecting () const
 Returns if PIEthernet is connecting to TCP server. Use only for TCP_Client.
 
bool listen (bool threaded=false)
 Start listen for incoming TCP connections on address readAddress(). Use only for TCP_Server.
 
bool listen (const PIString &ip, int port, bool threaded=false)
 Start listen for incoming TCP connections on address "ip":"port". Use only for TCP_Server.
 
bool listen (const PIString &ip_port, bool threaded=false)
 Start listen for incoming TCP connections on address "ip_port". Use only for TCP_Server.
 
bool listen (const PINetworkAddress &addr, bool threaded=false)
 Start listen for incoming TCP connections on address "addr". Use only for TCP_Server.
 
bool send (const void *data, int size, bool threaded=false)
 Send data "data" with size "size" to address sendAddress() for UDP or readAddress() for TCP_Client.
 
bool send (const PIString &ip, int port, const void *data, int size, bool threaded=false)
 Send data "data" with size "size" to address "ip":"port".
 
bool send (const PIString &ip_port, const void *data, int size, bool threaded=false)
 Send data "data" with size "size" to address "ip_port".
 
bool send (const PINetworkAddress &addr, const void *data, int size, bool threaded=false)
 Send data "data" with size "size" to address "addr".
 
bool send (const PIByteArray &data, bool threaded=false)
 Send data "data" to address sendAddress() for UDP or readAddress() for TCP_Client.
 
bool send (const PIString &ip, int port, const PIByteArray &data, bool threaded=false)
 Send data "data" to address "ip":"port" for UDP.
 
bool send (const PIString &ip_port, const PIByteArray &data, bool threaded=false)
 Send data "data" to address "ip_port" for UDP.
 
bool send (const PINetworkAddress &addr, const PIByteArray &data, bool threaded=false)
 Send data "data" to address "addr" for UDP.
 
bool canWrite () const override
 Returns if device can write now.
 
void interrupt () override
 Interrupt blocking operation.
 
- Public Member Functions inherited from PIIODevice
 PIIODevice ()
 Constructs a empty PIIODevice.
 
 PIIODevice (const PIString &path, DeviceMode mode=ReadWrite)
 Constructs PIIODevice with path "path" and open mode "mode".
 
DeviceMode mode () const
 Returns current open mode of device.
 
void setMode (DeviceMode m)
 Set open mode of device. Don`t reopen device.
 
DeviceOptions options () const
 Returns current device options.
 
bool isOptionSet (DeviceOption o) const
 Returns current device option "o" state.
 
void setOptions (DeviceOptions o)
 Set device options.
 
bool setOption (DeviceOption o, bool yes=true)
 Set device option "o" to "yes" and returns previous state.
 
DeviceInfoFlags infoFlags () const
 Returns device characteristic flags.
 
PIString path () const
 Returns current path of device.
 
void setPath (const PIString &path)
 Set path of device. Don`t reopen device.
 
bool isReadable () const
 Returns if mode is ReadOnly or ReadWrite.
 
bool isWriteable () const
 Returns if mode is WriteOnly or ReadWrite.
 
bool isOpened () const
 Returns if device is successfully opened.
 
bool isClosed () const
 Returns if device is closed.
 
virtual bool canRead () const
 Returns if device can read now.
 
virtual bool canWrite () const
 Returns if device can write now.
 
void setReopenEnabled (bool yes=true)
 Set calling of open() enabled while threaded read on closed device.
 
void setReopenTimeout (PISystemTime timeout)
 Set timeout between open() tryings if reopen is enabled.
 
bool isReopenEnabled () const
 Returns reopen enable.
 
PISystemTime reopenTimeout ()
 Returns reopen timeout.
 
void setThreadedReadSlot (ReadRetFunc func)
 Set threaded read callback. More...
 
void setThreadedReadData (void *d)
 Set custom data that will be passed to threaded read callback.
 
void setThreadedReadBufferSize (int new_size)
 Set size of threaded read buffer. More...
 
int threadedReadBufferSize () const
 Returns size of threaded read buffer.
 
const uchar * threadedReadBuffer () const
 Returns content of threaded read buffer.
 
void * threadedReadData () const
 Returns custom data that will be passed to threaded read callback.
 
bool isThreadedRead () const
 Returns if threaded read is started.
 
bool isThreadedReadStopping () const
 Returns if threaded read is stopping.
 
void startThreadedRead ()
 Start threaded read.
 
void startThreadedRead (ReadRetFunc func)
 Start threaded read and assign threaded read callback to "func".
 
void stopThreadedRead ()
 Stop threaded read.
 
void terminateThreadedRead ()
 Terminate threaded read. More...
 
bool waitThreadedReadFinished (PISystemTime timeout={})
 Wait for threaded read finish no longer than "timeout".
 
bool isThreadedWrite () const
 Returns if threaded write is started.
 
void startThreadedWrite ()
 Start threaded write.
 
void stopThreadedWrite ()
 Stop threaded write.
 
void terminateThreadedWrite ()
 Terminate threaded write. More...
 
bool waitThreadedWriteFinished (PISystemTime timeout={})
 Wait for threaded write finish no longer than "timeout".
 
void clearThreadedWriteQueue ()
 Clear threaded write task queue.
 
void start ()
 Start both threaded read and threaded write.
 
void stop ()
 Stop both threaded read and threaded write.
 
void stopAndWait (PISystemTime timeout={})
 Stop both threaded read and threaded write and wait for finish.
 
virtual void interrupt ()
 Interrupt blocking operation.
 
ssize_t read (void *read_to, ssize_t max_size)
 Read from device maximum "max_size" bytes to "read_to".
 
ssize_t read (PIMemoryBlock mb)
 Read from device to memory block "mb".
 
PIByteArray read (ssize_t max_size)
 Read from device maximum "max_size" bytes and returns them as PIByteArray.
 
virtual ssize_t bytesAvailable () const
 Returns the number of bytes that are available for reading. More...
 
ssize_t write (const void *data, ssize_t max_size)
 Write maximum "max_size" bytes of "data" to device.
 
PIByteArray readForTime (PISystemTime timeout)
 Read from device for "timeout" and return readed data as PIByteArray.
 
ullong writeThreaded (const void *data, ssize_t max_size)
 Add task to threaded write queue and return task ID.
 
ullong writeThreaded (const PIByteArray &data)
 Add task to threaded write queue and return task ID.
 
bool configure (const PIString &config_file, const PIString &section, bool parent_section=false)
 Configure device from section "section" of file "config_file", if "parent_section" parent section also will be read.
 
virtual PIConstChars fullPathPrefix () const
 Returns full unambiguous string prefix. Creating devices by unambiguous string.
 
PIString constructFullPath () const
 Returns full unambiguous string, describes this device, fullPathPrefix() + "://" + ...
 
void configureFromFullPath (const PIString &full_path)
 Configure device with parameters of full unambiguous string.
 
PIVariantTypes::IODevice constructVariant () const
 Returns PIVariantTypes::IODevice, describes this device.
 
void configureFromVariant (const PIVariantTypes::IODevice &d)
 Configure device from PIVariantTypes::IODevice.
 
ssize_t write (const PIMemoryBlock &mb)
 Write memory block "mb" to device.
 
bool open ()
 Open device.
 
bool open (const PIString &_path)
 Open device with path "path".
 
bool close ()
 Close device.
 
ssize_t write (PIByteArray data)
 Write "data" to device.
 
virtual void flush ()
 Immediate write all buffers.
 
void opened ()
 Raise if succesfull open.
 
void closed ()
 Raise if succesfull close.
 
void threadedReadEvent (const uchar *readed, ssize_t size)
 Raise if read thread succesfull read some data.
 
void threadedWriteEvent (ullong id, ssize_t written_size)
 Raise if write thread successfull write some data of task with ID "id".
 
- Public Member Functions inherited from PIObject
 PIObject (const PIString &name=PIString())
 Contructs PIObject with name "name".
 
PIString name () const
 Returns object name.
 
virtual const char * className () const
 Returns object class name.
 
virtual const char * parentClassName () const
 Returns parent class name.
 
bool debug () const
 Return if piCoutObj of this object is active.
 
void setName (const PIString &name)
 Set object name.
 
void setDebug (bool debug)
 Set object piCoutObj active.
 
PIVariant property (const char *name) const
 Returns property with name "name".
 
void setProperty (const char *name, const PIVariant &value)
 Set property with name "name" to "value". If there is no such property in object it will be added.
 
bool isPropertyExists (const char *name) const
 Returns if property with name "name" exists.
 
PIStringList scopeList () const
 Returns subclass scope of this object (including this class name)
 
void piDisconnect (const PIString &sig, PIObject *dest, void *ev_h)
 Disconnect object from all connections with event name "sig", connected to destination object "dest" and handler "ev_h".
 
void piDisconnect (const PIString &sig, PIObject *dest)
 Disconnect object from all connections with event name "sig", connected to destination object "dest".
 
void piDisconnect (const PIString &sig)
 Disconnect object from all connections with event name "sig".
 
bool isPIObject () const
 Returns if this is valid PIObject (check signature)
 
template<typename T >
bool isTypeOf () const
 Returns if this is valid PIObject subclass "T" (check signature and classname)
 
template<typename T >
T * cast () const
 Returns cast to T if this is valid subclass "T" (check by isTypeOf()) or "nullptr".
 
void callQueuedEvents ()
 Execute all posted events from CONNECTU_QUEUED connections.
 
bool maybeCallQueuedEvents ()
 Check if any CONNECTU_QUEUED connections to this object and execute them. More...
 
void deleteLater ()
 Mark object to delete. More...
 
void deleted (PIObject *o)
 Raise before object delete. More...
 

Static Public Member Functions

static InterfaceList interfaces ()
 Returns all system network interfaces.
 
static PIVector< PINetworkAddressallAddresses ()
 Returns all system network IP addresses.
 
- Static Public Member Functions inherited from PIIODevice
static PIIODevicecreateFromFullPath (const PIString &full_path)
 Try to create new device by prefix, configure it with configureFromFullPath() and returns it. More...
 
static PIIODevicecreateFromVariant (const PIVariantTypes::IODevice &d)
 Try to create new device by prefix, configure it with configureFromVariant() and returns it.
 
static PIStringList availablePrefixes ()
 Returns fullPath prefixes of all registered devices.
 
static PIStringList availableClasses ()
 Returns class names of all registered devices.
 
- Static Public Member Functions inherited from PIObject
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest, void *ev_h)
 Disconnect object "src" from all connections with event name "sig", connected to destination object "dest" and handler "ev_h".
 
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest)
 Disconnect object "src" from all connections with event name "sig", connected to destination object "dest".
 
static void piDisconnect (PIObject *src, const PIString &sig)
 Disconnect object "src" from all connections with event name "sig".
 
static PIObjectfindByName (const PIString &name)
 Returns PIObject* with name "name" or 0, if there is no object found.
 
static bool isPIObject (const PIObject *o)
 Returns if "o" is valid PIObject (check signature)
 
template<typename T >
static bool isTypeOf (const PIObject *o)
 Returns if "o" is valid PIObject subclass "T" (check signature and classname)
 

Protected Member Functions

void propertyChanged (const char *name) override
 Virtual function executes after property with name "name" has been changed.
 
PIString constructFullPathDevice () const override
 Reimplement to construct full unambiguous string, describes this device. Default implementation returns path()
 
void configureFromFullPathDevice (const PIString &full_path) override
 Reimplement to configure your device with parameters of full unambiguous string. Default implementation call setPath()
 
PIPropertyStorage constructVariantDevice () const override
 Reimplement to construct device properties. Default implementation return PIPropertyStorage with "path" entry.
 
void configureFromVariantDevice (const PIPropertyStorage &d) override
 Reimplement to configure your device from PIPropertyStorage. Options and mode already applied. Default implementation apply "path" entry.
 
bool configureDevice (const void *e_main, const void *e_parent=0) override
 Reimplement to configure device from entries "e_main" and "e_parent", cast arguments to PIConfig::Entry*.
 
ssize_t readDevice (void *read_to, ssize_t max_size) override
 Reimplement this function to read from your device.
 
ssize_t writeDevice (const void *data, ssize_t max_size) override
 Reimplement this function to write to your device.
 
DeviceInfoFlags deviceInfoFlags () const override
 Reimplement to return correct DeviceInfoFlags. Default implementation returns 0.
 
virtual void received (const void *data, int size)
 Executes when any read function was successful. Default implementation does nothing.
 
bool openDevice () override
 Reimplement to open device, return value will be set to "opened_" variable. Don't call this function in subclass, use open()!
 
bool closeDevice () override
 Reimplement to close device, inverse return value will be set to "opened_" variable.
 
- Protected Member Functions inherited from PIIODevice
virtual bool configureDevice (const void *e_main, const void *e_parent=0)
 Reimplement to configure device from entries "e_main" and "e_parent", cast arguments to PIConfig::Entry*.
 
virtual bool openDevice ()=0
 Reimplement to open device, return value will be set to "opened_" variable. Don't call this function in subclass, use open()!
 
virtual bool closeDevice ()
 Reimplement to close device, inverse return value will be set to "opened_" variable.
 
virtual ssize_t readDevice (void *read_to, ssize_t max_size)
 Reimplement this function to read from your device.
 
virtual ssize_t writeDevice (const void *data, ssize_t max_size)
 Reimplement this function to write to your device.
 
virtual bool threadedRead (const uchar *readed, ssize_t size)
 Function executed when thread read some data, default implementation execute external callback "ret_func_".
 
virtual PIString constructFullPathDevice () const
 Reimplement to construct full unambiguous string, describes this device. Default implementation returns path()
 
virtual void configureFromFullPathDevice (const PIString &full_path)
 Reimplement to configure your device with parameters of full unambiguous string. Default implementation call setPath()
 
virtual PIPropertyStorage constructVariantDevice () const
 Reimplement to construct device properties. Default implementation return PIPropertyStorage with "path" entry.
 
virtual void configureFromVariantDevice (const PIPropertyStorage &d)
 Reimplement to configure your device from PIPropertyStorage. Options and mode already applied. Default implementation apply "path" entry.
 
virtual void optionsChanged ()
 Reimplement to apply new device options.
 
virtual DeviceInfoFlags deviceInfoFlags () const
 Reimplement to return correct DeviceInfoFlags. Default implementation returns 0.
 
virtual void threadedReadBufferSizeChanged ()
 Reimplement to apply new threadedReadBufferSize()
 
- Protected Member Functions inherited from PIObject
PIObjectemitter () const
 Returns PIObject* which has raised an event. This value is correct only in definition of some event handler.
 
virtual void propertyChanged (const char *name)
 Virtual function executes after property with name "name" has been changed.
 

Configurable parameters

string ip
 read ip, default ""
 
int port
 read port, default 0
 
int parameters
 ethernet parameters
 
PISystemTime readTimeout
 read timeout, default 10 s
 
PISystemTime writeTimeout
 write timeout, default 10 s
 
int TTL
 time-to-live, default 64
 
int multicastTTL
 time-to-live for multicast, default 1
 

Events

void newConnection (PIEthernet *client)
 Raise on new TCP connection received.
 
void connected ()
 Raise if succesfull TCP connection.
 
void disconnected (bool withError)
 Raise if TCP connection was closed.
 

Additional Inherited Members

- Public Attributes inherited from PIIODevice
bool reopenEnabled
 setReopenEnabled, default "true"
 
int reopenTimeout
 setReopenTimeout, default 1_s
 
int threadedReadBufferSize
 setThreadedReadBufferSize in bytes, default 4096
 

Detailed Description

Ethernet device.

Synopsis

PIEthernet designed to work with IPv4 network via two protocols: UDP and TCP. This class allow you send and receive packets to/from another computer through network. Also it supports broadcast and multicast extensions.

IPv4

UDP

User Datagram Protocol

TCP

Transmission Control Protocol

Member Enumeration Documentation

◆ Type

Type of PIEthernet.

Enumerator
UDP 

UDP - User Datagram Protocol

TCP_Client 

TCP client - allow connection to TCP server

TCP_Server 

TCP server - receive connections from TCP clients

◆ Parameters

Parameters of PIEthernet.

Enumerator
ReuseAddress 

Rebind address if there is already binded. Enabled by default

Broadcast 

Broadcast send. Disabled by default

SeparateSockets 

If this parameter is set, PIEthernet will initialize two different sockets, for receive and send, instead of single one. Disabled by default

MulticastLoop 

Enable receiving multicast packets from same host. Enabled by default

KeepConnection 

Automatic reconnect TCP connection on disconnect. Enabled by default

DisonnectOnTimeout 

Disconnect TCP connection on read timeout expired. Disabled by default

NoDelay 

Use NO_DELAY option. Disabled by default

◆ InterfaceFlag

Flags of network interface.

Enumerator
ifActive 

Is active

ifRunning 

Is running

ifBroadcast 

Support broadcast

ifMulticast 

Support multicast

ifLoopback 

Is loopback

ifPTP 

Is point-to-point