PIP  0.4.1_alpha3
Platform-Independent Primitives
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 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.
 
int read (void *read_to, int max_size)
 Directly call read() function of child device.
 
int write (const void *data, int max_size)
 Directly call write() function of child device.
 
PIString constructFullPath () const
 Reimplement to construct full unambiguous string, describes this device, default returns fullPathPrefix() + "://" + path()
 
- 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 ()
 Return internal mutex.
 
bool start (int timer_delay)
 Start thread. More...
 
bool start (ThreadFunc func, 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 * superClassName () const
 Returns object superclass 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 bool closeDevice ()
 Reimplement to close device, inverse return value will be set to "opened_" variable.
 
virtual void configureFromFullPath (const PIString &full_path)
 Reimplement to configure your device with parameters of full unambiguous string. Default implementation does nothing.
 
- 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.
 

Events

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

Additional Inherited Members

- 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.
 

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

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

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

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

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

Function to validate payload.

Parameters
recReceived payload
sizepayload size

Default implementation returns true