PIP  1.7.1
Platform-Independent Primitives
PIPacketExtractor Class Reference

Packets extractor. More...

Inheritance diagram for PIPacketExtractor:

Public Types

enum  SplitMode {
  None, Header, Footer, HeaderAndFooter,
  Size, Timeout
}
 Extract algorithms. More...
 
- 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 subclass. More...
 
- Public Types inherited from PIThread
enum  Priority {
  piLowerst, piLow, piNormal, piHigh,
  piHighest
}
 Priority of thread. More...
 

Public Member Functions

 PIPacketExtractor (PIIODevice *device_=0, SplitMode mode=None)
 Contructs extractor with child device "device_" and extract algorithm "mode".
 
PIIODevicedevice ()
 Returns child device.
 
void setDevice (PIIODevice *device_)
 Set child device to "device_".
 
int bufferSize () const
 Returns buffer size.
 
void setBufferSize (int new_size)
 Set buffer size to "new_size" bytes, should be at least greater than whole packet size.
 
void setSplitMode (SplitMode mode)
 Set extract algorithm.
 
void setPayloadSize (int size)
 Set payload size, used for PIPacketExtractor::Header and PIPacketExtractor::Footer algorithms.
 
void setHeader (const PIByteArray &data)
 Set header data, used for PIPacketExtractor::Header and PIPacketExtractor::HeaderAndFooter algorithms.
 
void setFooter (const PIByteArray &data)
 Set footer data, used for PIPacketExtractor::Footer and PIPacketExtractor::HeaderAndFooter algorithms.
 
void setPacketSize (int size)
 Set packet size, used for PIPacketExtractor::Size algorithm.
 
void setTimeout (double msecs)
 Set timeout in milliseconds, used for PIPacketExtractor::Timeout algorithm.
 
SplitMode splitMode () const
 Returns current extract algorithm.
 
int payloadSize () const
 Returns current payload size, used for PIPacketExtractor::Header and PIPacketExtractor::Footer algorithms.
 
PIByteArray header () const
 Returns current header data, used for PIPacketExtractor::Header and PIPacketExtractor::HeaderAndFooter algorithms.
 
PIByteArray footer () const
 Returns current footer data, used for PIPacketExtractor::Footer and PIPacketExtractor::HeaderAndFooter algorithms.
 
int packetSize () const
 Returns current packet size, used for PIPacketExtractor::Size algorithm.
 
double timeout () const
 Returns current timeout in milliseconds, used for PIPacketExtractor::Timeout algorithm.
 
ullong missedBytes () const
 Returns missed by validating functions bytes count.
 
const ullong * missedBytes_ptr () const
 Returns pointer to missedBytes() count. Useful for output to PIConsole.
 
- Public Member Functions inherited from PIIODevice
 PIIODevice ()
 Constructs a empty PIIODevice.
 
 PIIODevice (const PIString &path, DeviceMode mode=ReadWrite)
 Constructs a PIIODevice with path and mode. More...
 
DeviceMode mode () const
 Current open mode of device.
 
void setMode (DeviceMode m)
 Set open mode of device.
 
DeviceOptions options () const
 Current device options.
 
bool isOptionSet (DeviceOption o) const
 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 return previous state.
 
DeviceInfoFlags infoFlags () const
 Returns device characteristic flags.
 
PIString path () const
 Current path of device.
 
void setPath (const PIString &path)
 Set path of device.
 
bool isReadable () const
 Return true if mode is ReadOnly or ReadWrite.
 
bool isWriteable () const
 Return true if mode is WriteOnly or ReadWrite.
 
bool isOpened () const
 Return true if device is successfully opened.
 
bool isClosed () const
 Return true if device is closed.
 
virtual bool canRead () const
 Return true if device can read now.
 
virtual bool canWrite () const
 Return true if device can write now.
 
void setReopenEnabled (bool yes=true)
 Set execution of open enabled while threaded read on closed device.
 
void setReopenTimeout (int msecs)
 Set timeout in milliseconds between open tryings if reopen is enabled.
 
bool isReopenEnabled () const
 Return reopen enable.
 
int reopenTimeout ()
 Return reopen timeout.
 
void setThreadedReadSlot (ReadRetFunc func)
 Set "threaded read slot". More...
 
void setThreadedReadData (void *d)
 Set custom data that will be passed to "threaded read slot".
 
void setThreadedReadBufferSize (int new_size)
 Set size of threaded read buffer. More...
 
int threadedReadBufferSize () const
 Return size of threaded read buffer.
 
const uchar * threadedReadBuffer () const
 Return content of threaded read buffer.
 
void * threadedReadData () const
 Return custom data that will be passed to "threaded read slot".
 
bool isThreadedRead () const
 Return true if threaded read is started.
 
void startThreadedRead ()
 Start threaded read.
 
void startThreadedRead (ReadRetFunc func)
 Start threaded read and assign "threaded read slot" to "func".
 
void stopThreadedRead ()
 Stop threaded read.
 
bool isThreadedWrite () const
 Return true if threaded write is started.
 
void startThreadedWrite ()
 Start threaded write.
 
void stopThreadedWrite ()
 Stop threaded write.
 
void clearThreadedWriteQueue ()
 Clear threaded write task queue.
 
void start ()
 Start both threaded read and threaded write.
 
void stop (bool wait=false)
 Stop both threaded read and threaded write and if "wait" block until both threads are stop.
 
int read (void *read_to, int max_size)
 Read from device maximum "max_size" bytes to "read_to".
 
PIByteArray read (int max_size)
 Read from device maximum "max_size" bytes and return them as PIByteArray.
 
int write (const void *data, int max_size)
 Write maximum "max_size" bytes of "data" to device.
 
int write (const PIByteArray &data)
 Write "data" to device.
 
PIByteArray readForTime (double timeout_ms)
 Read from device for "timeout_ms" milliseconds and return readed data as PIByteArray. Timeout should to be greater than 0.
 
ullong writeThreaded (const void *data, int 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.
 
PIString constructFullPath () const
 Reimplement to construct full unambiguous string, describes this device, default returns fullPathPrefix() + "://" + path()
 
void configureFromFullPath (const PIString &full_path)
 Reimplement to configure your device with parameters of full unambiguous string. Default implementation does nothing.
 
bool open ()
 Open device.
 
bool open (const PIString &_path)
 Open device with path "path".
 
bool close ()
 Close device.
 
virtual void flush ()
 Immediate write all buffers.
 
void opened ()
 Raise if succesfull open.
 
void closed ()
 Raise if succesfull close.
 
void threadedReadEvent (uchar *readed, int size)
 Raise if read thread succesfull read some data.
 
void threadedWriteEvent (ullong id, int written_size)
 Raise if write thread successfull write some data of task with ID "id".
 
- Public Member Functions inherited from PIThread
 PIThread (void *data, ThreadFunc func, bool startNow=false, int loop_delay=-1)
 Contructs thread with custom data "data", external function "func" and main loop delay "loop_delay".
 
 PIThread (bool startNow=false, int loop_delay=-1)
 Contructs thread with main loop delay "loop_delay".
 
void setData (void *d)
 Set common data passed to external function.
 
void setSlot (ThreadFunc func)
 Set external function that will be executed after every run()
 
void setPriority (PIThread::Priority prior)
 Set priority of thread.
 
void * data () const
 Returns common data passed to external function.
 
PIThread::Priority priority () const
 Return priority of thread.
 
bool isRunning () const
 Return true if thread is running.
 
void needLockRun (bool need)
 Set necessity of lock every run with internal mutex.
 
PIMutexmutex ()
 Returns internal mutex.
 
llong tid () const
 Returns thread ID.
 
bool start (int timer_delay)
 Start thread. More...
 
bool startOnce ()
 Start thread without internal loop. More...
 
bool startOnce (ThreadFunc func)
 Start thread without internal loop. More...
 
void stop (bool wait)
 Stop thread. More...
 
void terminate ()
 Strongly stop thread. More...
 
bool waitForStart (int timeout_msecs)
 Wait for thread start. More...
 
bool waitForFinish (int timeout_msecs)
 Wait for thread finish. More...
 
void lock ()
 Lock internal mutex.
 
void unlock ()
 Unlock internal mutex.
 
void started ()
 Raise on thread start.
 
void stopped ()
 Raise on thread stop.
 
- 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 object class name.
 
bool debug () const
 Return if debug of this object is active.
 
void setName (const PIString &name)
 Set object name.
 
void setDebug (bool debug)
 Set object debug active.
 
const PIMap< PIString, PIVariant > & properties () const
 Returns properties of the object.
 
int propertiesCount () const
 Returns properties count of the object.
 
PIVariant property (const PIString &name) const
 Returns property with name "name".
 
void setProperty (const PIString &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 PIString &name) const
 Returns if property with name "name" exists.
 

Protected Member Functions

virtual bool validateHeader (uchar *src, uchar *rec, int size)
 Function to validate header. More...
 
virtual bool validateFooter (uchar *src, uchar *rec, int size)
 Function to validate footer. More...
 
virtual bool validatePayload (uchar *rec, int size)
 Function to validate payload. More...
 
- Protected Member Functions inherited from PIIODevice
virtual bool init ()
 Function executed before first openDevice() or from constructor.
 
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 void configureFromFullPathDevice (const PIString &full_path)
 Reimplement to configure your device with parameters of full unambiguous string. Default implementation does nothing.
 
virtual void optionsChanged ()
 Reimplement to apply new device options.
 
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.
 
void deleted ()
 Raise before object delete. More...
 

Events

void packetReceived (uchar *data, int size)
 Raise on successfull packetValidate() function.
 

Additional Inherited Members

- Static Public Member Functions inherited from PIIODevice
static PIIODevicecreateFromFullPath (const PIString &full_path)
 Try to determine suitable device, create new one, configure it with configureFromFullPath() and returns it. More...
 
- Static Public Member Functions inherited from PIObject
static void piDisconnect (PIObject *src, const PIString &sig)
 Disconnect object "src" from all connections with event name "sig".
 
static void piDisconnect (PIObject *src)
 Disconnect object "src" from all connections, i.e. all connections where object "src" is emitter.
 
static PIObjectfindByName (const PIString &name)
 Returns PIObject* with name "name" or 0, if there is no object found.
 
- Public Attributes inherited from PIIODevice
bool reopenEnabled
 setReopenEnabled, default "true"
 
int reopenTimeout
 setReopenTimeout in ms, default 1000
 
int threadedReadBufferSize
 setThreadedReadBufferSize in bytes, default 4096
 

Detailed Description

Packets extractor.

Synopsis

This class implements packet recognition by various algorithms and custom validating from data stream. Stream is formed from child PIIODevice passed from contructor or with function setDevice().

Principle of work

PIPacketExtractor works with child PIIODevice. read and write functions directly call child device functions. You should start threaded read of extractor (not child device) to proper work. Extractor read data from child device, try to detect packet from readed data and raise packetReceived() event on success.

Algorithms

There are 6 algorithms:

Control validating

There are three parameters:

  • header content
  • header size
  • payload size

Extractor can detect packet with compare your header with readed data. It is default implementation of function packetHeaderValidate(). If header validating passed, function packetValidate() will be called. If either of this function return false extractor shifts by one byte and takes next header. If both functions returns true extractor shifts by whole packet size.

packet_detection.png

Member Enumeration Documentation

◆ SplitMode

Extract algorithms.

Enumerator
None 

No data processing

Header 

Detect packets with header() and following payloadSize()

Footer 

Detect packets with footer() and leading payloadSize()

HeaderAndFooter 

Detect packets with header() and footer() without payloadSize()

Size 

Detect packets with packetSize()

Timeout 

Wait for first read, then read for timeout() milliseconds

Member Function Documentation

◆ validateHeader()

virtual bool PIPacketExtractor::validateHeader ( uchar *  src,
uchar *  rec,
int  size 
)
inlineprotectedvirtual

Function to validate header.

Parameters
srcYour header content
recReceived header
sizeHeader size

Default implementation returns by-byte "src" with "rec" compare result

◆ validateFooter()

virtual bool PIPacketExtractor::validateFooter ( uchar *  src,
uchar *  rec,
int  size 
)
inlineprotectedvirtual

Function to validate footer.

Parameters
srcYour footer content
recReceived footer
sizeFooter size

Default implementation returns by-byte "src" with "rec" compare result

◆ validatePayload()

virtual bool PIPacketExtractor::validatePayload ( uchar *  rec,
int  size 
)
inlineprotectedvirtual

Function to validate payload.

Parameters
recReceived payload
sizepayload size

Default implementation returns true