netmsgs  1.2.2
RoadNarrows Robotics Network Messaging Package
NetMsgs.NetMsgsLibITV.NetMsgsITV Class Reference
Inheritance diagram for NetMsgs.NetMsgsLibITV.NetMsgsITV:

Public Member Functions

def __init__ (self, msgdefset, kwargs)
 
def StateNew (self, msgid, op, kwargs)
 
def nmPackFieldHdr (self, fielddef, val, stateId)
 
def nmPackString (self, fielddef, val, stateId)
 
def nmPackVector (self, fielddef, vallist, stateId)
 
def nmPackMsgHdr (self, msgid, msgdef, stateId)
 
def nmUnpackFieldHdr (self, buf, offset, stateId)
 
def nmUnpackPad (self, fielddef, buf, offset, fvals, stateId)
 
def nmUnpackString (self, fielddef, buf, offset, fvals, stateId)
 
def nmUnpackStruct (self, fielddef, buf, offset, fvals, stateId)
 
def nmUnpackVector (self, fielddef, buf, offset, fvals, stateId)
 
def nmUnpackStream (self, msgdef, buf, offset, fvals, stateId)
 
def nmUnpackMsgHdr (self, msgid, msgdef, buf, offset, fvals, stateId)
 

Detailed Description

RoadNarrows Identifier-Type-Value encoded Net Messages Class.

    ITV message encoding provides field headers to identify and process
    fields. Fields may be in any order. Unknown field are ignored.

Definition at line 76 of file NetMsgsLibITV.py.

Constructor & Destructor Documentation

def NetMsgs.NetMsgsLibITV.NetMsgsITV.__init__ (   self,
  msgdefset,
  kwargs 
)
Initialize NetMsgsITV instance.

Parameters:
  msgdefset - Set of message definitions.
  kwargs    - Optional keyword arguments. See NetMsgsStreamBuf.

Definition at line 84 of file NetMsgsLibITV.py.

84  def __init__(self, msgdefset, **kwargs):
85  """ Initialize NetMsgsITV instance.
86 
87  Parameters:
88  msgdefset - Set of message definitions.
89  kwargs - Optional keyword arguments. See NetMsgsStreamBuf.
90  """
91  kwargs['encoding'] = 'itv'
92  nmStream.NetMsgsStreamBuf.__init__(self, msgdefset, **kwargs)
def __init__(self, msgdefset, kwargs)

Member Function Documentation

def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmPackFieldHdr (   self,
  fielddef,
  val,
  stateId 
)
Pack ITV field header. 

Parameters:
  fielddef  - Field definition.
  val       - Field value(s).
  stateId   - Packing state id.

Return:
  Packed buffer.

Definition at line 128 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.ChkReqFValType(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mEndian, NetMsgs.NetMsgsLib.PackU8(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldGet(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet().

Referenced by NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackBool(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackChar(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackF32(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackF64(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackP32(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackP64(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackS16(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackS32(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackS64(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackS8(), NetMsgs.NetMsgsLibITV.NetMsgsITV.nmPackString(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackString(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackStruct(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackU16(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackU32(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackU64(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackU8(), NetMsgs.NetMsgsLibITV.NetMsgsITV.nmPackVector(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackVector().

128  def nmPackFieldHdr(self, fielddef, val, stateId):
129  """ Pack ITV field header.
130 
131  Parameters:
132  fielddef - Field definition.
133  val - Field value(s).
134  stateId - Packing state id.
135 
136  Return:
137  Packed buffer.
138  """
139  fhdr = {}
140  fstate = self.StateFieldGet(stateId)
141  fid = fstate['fid']
142  ftype = fstate['ftype']
143  self.ChkReqFValType(fielddef, val, stateId=stateId)
144  if not fstate['fctl']['has_hdr']: # don't pack header (vector item)
145  count = None
146  buf = ''
147  elif ftype == 's': # string compound field type
148  count = len(val)
149  buf = PackU8(fid, endian=self.mEndian)
150  buf += PackU8(ftype, endian=self.mEndian)
151  buf += PackU8(count, endian=self.mEndian)
152  fhdr['fid'] = fid
153  fhdr['ftype'] = ftype
154  fhdr['count'] = count
155  elif ftype == '{': # struct compound field type
156  msgdef = fielddef['msgdef']
157  count = msgdef['max_count']
158  buf = PackU8(fid, endian=self.mEndian)
159  buf += PackU8(ftype, endian=self.mEndian)
160  buf += PackU8(count, endian=self.mEndian)
161  fhdr['fid'] = fid
162  fhdr['ftype'] = ftype
163  fhdr['count'] = count
164  elif ftype == '[': # vector compound field type
165  vdef = fielddef['vdef']
166  vtype = vdef['ftype']
167  count = len(val)
168  buf = PackU8(fid, endian=self.mEndian)
169  buf += PackU8(ftype, endian=self.mEndian)
170  buf += PackU8(count, endian=self.mEndian)
171  buf += PackU8(vtype, endian=self.mEndian)
172  fhdr['fid'] = fid
173  fhdr['ftype'] = ftype
174  fhdr['count'] = count
175  fhdr['vtype'] = vtype
176  else: # simple type
177  count = None
178  buf = PackU8(fid, endian=self.mEndian)
179  buf += PackU8(ftype, endian=self.mEndian)
180  fhdr['fid'] = fid
181  fhdr['ftype'] = ftype
182  fhdr['fhdr_size'] = len(buf)
183  self.StateFieldSet(stateId, fhdr=fhdr)
184  return buf
def PackU8(val, endian='big')
Definition: NetMsgsLib.py:229
def nmPackFieldHdr(self, fielddef, val, stateId)
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmPackMsgHdr (   self,
  msgid,
  msgdef,
  stateId 
)
Pack message header. 

Parameters:
  msgid     - Message identifier.
  msgdef    - Message definition.
  stateId   - Packing state id.

Return:
  Packed buffer.

Definition at line 255 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mEndian, NetMsgs.NetMsgsLib.PackU16(), NetMsgs.NetMsgsLib.PackU8(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateSet().

Referenced by NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackMsg().

255  def nmPackMsgHdr(self, msgid, msgdef, stateId):
256  """ Pack message header.
257 
258  Parameters:
259  msgid - Message identifier.
260  msgdef - Message definition.
261  stateId - Packing state id.
262 
263  Return:
264  Packed buffer.
265  """
266  count = msgdef['max_count']
267  buf = PackU16(msgid, endian=self.mEndian)
268  buf += PackU8(count, endian=self.mEndian)
269  msghdr = {'msghdr_size':len(buf), 'msgid':msgid, 'count':count}
270  self.StateSet(stateId, msghdr=msghdr)
271  return buf
def PackU16(val, endian='big')
Definition: NetMsgsLib.py:267
def nmPackMsgHdr(self, msgid, msgdef, stateId)
def PackU8(val, endian='big')
Definition: NetMsgsLib.py:229
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmPackString (   self,
  fielddef,
  val,
  stateId 
)
Pack variable length string field.

Parameters:
  fielddef  - Field definition.
  val       - Field value.
  stateId   - Packing state id.

Return:
  Packed buffer.

Definition at line 188 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.ChkReqFValType(), NetMsgs.NetMsgsXmlParser.NetMsgsXmlParser.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mTrace, NetMsgs.NetMsgsLibFlat.NetMsgsFlat.nmPackFieldHdr(), NetMsgs.NetMsgsLibITV.NetMsgsITV.nmPackFieldHdr(), NetMsgs.NetMsgsLib.PackString(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.TraceField().

188  def nmPackString(self, fielddef, val, stateId):
189  """ Pack variable length string field.
190 
191  Parameters:
192  fielddef - Field definition.
193  val - Field value.
194  stateId - Packing state id.
195 
196  Return:
197  Packed buffer.
198  """
199  self.ChkReqFValType(fielddef, val)
200  count = len(val)
201  max_count = fielddef.get('max_count', nmBase.NMStringMaxCount)
202  if count > max_count:
203  self.Error("%s" % fielddef['name'],
204  "%s %u > %u" % (EMsgStringRange, count, max_count),
205  stateId=stateId)
206  self.StateFieldSet(stateId, count=count)
207  buf = self.nmPackFieldHdr(fielddef, val, stateId)
208  buf += PackString(val, count)
209  if self.mTrace: self.TraceField(fielddef, val, buf, stateId)
210  return buf
def nmPackString(self, fielddef, val, stateId)
def PackString(val, count=None)
Definition: NetMsgsLib.py:493
def nmPackFieldHdr(self, fielddef, val, stateId)
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmPackVector (   self,
  fielddef,
  vallist,
  stateId 
)
Pack variable vector field.

Parameters:
  fielddef  - Field definition.
  vallist   - Vector (list) of vector item values.
  stateId   - Packing state id.

Return:
  Packed buffer.

Definition at line 214 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.ChkReqFValType(), NetMsgs.NetMsgsXmlParser.NetMsgsXmlParser.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mFuncMap, NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mTrace, NetMsgs.NetMsgsLibFlat.NetMsgsFlat.nmPackFieldHdr(), NetMsgs.NetMsgsLibITV.NetMsgsITV.nmPackFieldHdr(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.PACKFUNC, NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.SETFUNC, NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldPop(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldPush(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.TraceField().

214  def nmPackVector(self, fielddef, vallist, stateId):
215  """ Pack variable vector field.
216 
217  Parameters:
218  fielddef - Field definition.
219  vallist - Vector (list) of vector item values.
220  stateId - Packing state id.
221 
222  Return:
223  Packed buffer.
224  """
225  self.ChkReqFValType(fielddef, vallist)
226  vdef = fielddef['vdef']
227  vname = vdef['name']
228  vtype = vdef['ftype']
229  count = len(vallist)
230  max_count = fielddef['max_count']
231  if count > max_count:
232  self.Error("%s" % fielddef['name'],
233  "%s %u > %u" % (EMsgVectorRange, count, max_count),
234  stateId=stateId)
235  self.StateFieldSet(stateId, count=count)
236  buf = self.nmPackFieldHdr(fielddef, vallist, stateId)
237  if self.mTrace: self.TraceField(fielddef, vallist, buf, stateId)
238  setfunc = self.mFuncMap[vtype][self.SETFUNC]
239  packfunc = self.mFuncMap[vtype][self.PACKFUNC]
240  i = 0
241  self.StateFieldPush(stateId, fname=vname, fid=0, ftype=vtype)
242  if vtype in nmBase.NMFTypeCodeSimple:
243  self.StateFieldSet(stateId, 'fctl', has_hdr=False)
244  for val in vallist:
245  self.StateFieldSet(stateId, i=i)
246  self.StateFieldSet(stateId, fid=i+1)
247  val = setfunc(vdef, val, stateId)
248  buf += packfunc(vdef, val, stateId)
249  i += 1
250  self.StateFieldPop(stateId)
251  return buf
def nmPackVector(self, fielddef, vallist, stateId)
def nmPackFieldHdr(self, fielddef, val, stateId)
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackFieldHdr (   self,
  buf,
  offset,
  stateId 
)
Unpack ITV field header. 

Parameters:
  buf       - Buffer to unpack.
  offset    - Buffer offset where unpacking begins.
  stateId   - Unpacking state id.

Return:
  New buffer offset.

Definition at line 280 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mEndian, NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldGet(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet(), and NetMsgs.NetMsgsLib.UnpackU8().

Referenced by NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackStream(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmUnpackStream(), and NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackVector().

280  def nmUnpackFieldHdr(self, buf, offset, stateId):
281  """ Unpack ITV field header.
282 
283  Parameters:
284  buf - Buffer to unpack.
285  offset - Buffer offset where unpacking begins.
286  stateId - Unpacking state id.
287 
288  Return:
289  New buffer offset.
290  """
291  fhdr = {}
292  fstate = self.StateFieldGet(stateId)
293  start = offset
294  if self.StateFieldGet(stateId, 'fctl', 'has_hdr'):
295  # common header part
296  fid, offset = UnpackU8(buf, offset, endian=self.mEndian)
297  ftype, offset = UnpackU8(buf, offset, endian=self.mEndian)
298  ftype = "%c" % ftype
299  fhdr['fid'] = fid
300  fhdr['ftype'] = ftype
301  if ftype == 's': # string compound field type
302  fhdr['count'], offset = UnpackU8(buf, offset, endian=self.mEndian)
303  elif ftype == '{': # struct compound field type
304  fhdr['count'], offset = UnpackU8(buf, offset, endian=self.mEndian)
305  elif ftype == '[': # vector compound field type
306  fhdr['count'], offset = UnpackU8(buf, offset, endian=self.mEndian)
307  vtype, offset = UnpackU8(buf, offset, endian=self.mEndian)
308  fhdr['vtype'] = "%c" % vtype
309  fhdr['fhdr_size'] = offset - start
310  self.StateFieldSet(stateId, fhdr=fhdr)
311  return offset
def UnpackU8(buf, offset=0, endian='big')
Definition: NetMsgsLib.py:600
def nmUnpackFieldHdr(self, buf, offset, stateId)
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackMsgHdr (   self,
  msgid,
  msgdef,
  buf,
  offset,
  fvals,
  stateId 
)
Unpack ITV message header. 

Parameters:
  msgid     - Message identifier.
  msgdef    - Message definition.
  buf       - Buffer to unpack.
  offset    - Buffer offset where unpacking begins.
  fvals     - Dictionary to hold unpacked field values.
  stateId   - Unpacking state id.

Return:
  New buffer offset.

Definition at line 517 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsXmlParser.NetMsgsXmlParser.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mEndian, NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateSet(), NetMsgs.NetMsgsLib.UnpackU16(), and NetMsgs.NetMsgsLib.UnpackU8().

Referenced by NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmUnpackMsg().

517  def nmUnpackMsgHdr(self, msgid, msgdef, buf, offset, fvals, stateId):
518  """ Unpack ITV message header.
519 
520  Parameters:
521  msgid - Message identifier.
522  msgdef - Message definition.
523  buf - Buffer to unpack.
524  offset - Buffer offset where unpacking begins.
525  fvals - Dictionary to hold unpacked field values.
526  stateId - Unpacking state id.
527 
528  Return:
529  New buffer offset.
530  """
531  msghdr = {}
532  start = offset
533  msghdr['msgid'], offset = UnpackU16(buf, offset, endian=self.mEndian)
534  msghdr['count'], offset = UnpackU8(buf, offset, endian=self.mEndian)
535  msghdr['msghdr_size'] = offset - start
536  if msgid != msghdr['msgid']:
537  self.Error("%s" % msgdef['name'], EMsgBadMsg,
538  "unpacked msgid=%u != expected msgid=%u" % (msghdr['msgid'], msgid),
539  stateId=stateId)
540  count = msghdr['count']
541  max_count = msgdef['max_count']
542  if count > max_count:
543  self.Error("%s" % msgdef['name'],
544  "%s %u > %u" % (EMsgStructRange, count, max_count),
545  stateId=stateId)
546  self.StateSet(stateId, msghdr=msghdr)
547  self.StateFieldSet(stateId, count=count)
548  return offset
def nmUnpackMsgHdr(self, msgid, msgdef, buf, offset, fvals, stateId)
def UnpackU8(buf, offset=0, endian='big')
Definition: NetMsgsLib.py:600
def UnpackU16(buf, offset=0, endian='big')
Definition: NetMsgsLib.py:638
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackPad (   self,
  fielddef,
  buf,
  offset,
  fvals,
  stateId 
)
Unpack variable number of pad bytes from the buffer.

No field values are set.

Parameters:
  fielddef  - Field definition.
  buf       - Buffer to unpack.
  offset    - Buffer offset where unpacking begins.
  fvals     - Dictionary to hold unpacked field values.
  stateId   - Unpacking state id.

Return:
  New buffer offset.

Definition at line 315 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mTrace, NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.TraceField().

315  def nmUnpackPad(self, fielddef, buf, offset, fvals, stateId):
316  """ Unpack variable number of pad bytes from the buffer.
317 
318  No field values are set.
319 
320  Parameters:
321  fielddef - Field definition.
322  buf - Buffer to unpack.
323  offset - Buffer offset where unpacking begins.
324  fvals - Dictionary to hold unpacked field values.
325  stateId - Unpacking state id.
326 
327  Return:
328  New buffer offset.
329  """
330  count = 0
331  while (ord(buf[offset]) == nmBase.NMPadFVal) and (offset < len(buf)):
332  offset += 1
333  count += 1
334  self.StateFieldSet(stateId, count=count)
335  self.StateFieldSet(stateId, 'trace', trace_end=offset)
336  if self.mTrace: self.TraceField(fielddef, nmBase.NMPadFVal, buf, stateId)
337  return offset
def nmUnpackPad(self, fielddef, buf, offset, fvals, stateId)
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackStream (   self,
  msgdef,
  buf,
  offset,
  fvals,
  stateId 
)
Unpack a field stream from the buffer.

Parameters:
  msgdef    - Message definition.
  buf       - Buffer to unpack.
  offset    - Buffer offset where unpacking begins.
  stateId   - Unpacking state id.

Return:
  New buffer offset.

Definition at line 462 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsXmlParser.NetMsgsXmlParser.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.FindFId(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mFuncMap, NetMsgs.NetMsgsLibFlat.NetMsgsFlat.nmUnpackFieldHdr(), NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackFieldHdr(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldGet(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldPop(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldPush(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.UNPACKFUNC, and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.Warning().

Referenced by NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmUnpackMsg(), NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackStruct(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmUnpackStruct().

462  def nmUnpackStream(self, msgdef, buf, offset, fvals, stateId):
463  """ Unpack a field stream from the buffer.
464 
465  Parameters:
466  msgdef - Message definition.
467  buf - Buffer to unpack.
468  offset - Buffer offset where unpacking begins.
469  stateId - Unpacking state id.
470 
471  Return:
472  New buffer offset.
473  """
474  msgname = msgdef['name']
475  fdeflist = msgdef['fielddef']
476  max_count = msgdef['max_count']
477  count = self.StateFieldGet(stateId, 'count')
478  if count > max_count:
479  self.Error("%s" % fielddef['name'],
480  "%s %u > %u" % (EMsgStructRange, count, max_count),
481  stateId=stateId)
482  i = 0
483  while i < count:
484  self.StateFieldPush(stateId)
485  self.StateFieldSet(stateId, 'trace', trace_start=offset)
486  if ord(buf[offset]) == nmBase.NMPadFVal:
487  fid = 0
488  ftype = nmBase.NMFCode('pad')
489  fielddef = {'name':'pad', 'fid':0, 'ftype':ftype}
490  else:
491  offset = self.nmUnpackFieldHdr(buf, offset, stateId)
492  fid = self.StateFieldGet(stateId, 'fhdr', 'fid')
493  ftype = self.StateFieldGet(stateId, 'fhdr', 'ftype')
494  fielddef = self.FindFId(msgdef, fid)
495  if fielddef:
496  fname = fielddef['name']
497  fid = fielddef['fid']
498  if ftype != fielddef['ftype']:
499  self.Error("%s" % fname,
500  "%s received '%s' != expected '%s'" % \
501  (EMsgBadMsg, ftype, fielddef['ftype']),
502  stateId=stateId)
503  self.StateFieldSet(stateId, fname=fname, fid=fid, ftype=ftype)
504  unpackfunc = self.mFuncMap[ftype][self.UNPACKFUNC]
505  offset = unpackfunc(fielddef, buf, offset, fvals, stateId)
506  else:
507  self.Warning("fid=%u" % (fid), "Field not defined - ignoring")
508  self.StateFieldSet(stateId, 'fctl', noexec=True)
509  unpackfunc = self.mFuncMap[ftype][self.UNPACKFUNC]
510  offset = unpackfunc(fielddef, buf, offset, fvals, stateId)
511  self.StateFieldPop(stateId)
512  i += 1
513  return offset
def nmUnpackStream(self, msgdef, buf, offset, fvals, stateId)
def nmUnpackFieldHdr(self, buf, offset, stateId)
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackString (   self,
  fielddef,
  buf,
  offset,
  fvals,
  stateId 
)
Unpack variable lenght string field from the buffer.

Parameters:
  fielddef  - Field definition.
  buf       - Buffer to unpack.
  offset    - Buffer offset where unpacking begins.
  fvals     - Dictionary to hold unpacked field values.
  stateId   - Unpacking state id.

Return:
  New buffer offset.

Definition at line 341 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsXmlParser.NetMsgsXmlParser.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mTrace, NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldGet(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.TraceField(), and NetMsgs.NetMsgsLib.UnpackString().

341  def nmUnpackString(self, fielddef, buf, offset, fvals, stateId):
342  """ Unpack variable lenght string field from the buffer.
343 
344  Parameters:
345  fielddef - Field definition.
346  buf - Buffer to unpack.
347  offset - Buffer offset where unpacking begins.
348  fvals - Dictionary to hold unpacked field values.
349  stateId - Unpacking state id.
350 
351  Return:
352  New buffer offset.
353  """
354  fname = fielddef['name']
355  count = self.StateFieldGet(stateId, 'fhdr', 'count')
356  max_count = fielddef['max_count']
357  if count > max_count:
358  self.Error("%s" % fielddef['name'],
359  "%s %u > %u" % (EMsgStringRange, count, max_count),
360  stateId=stateId)
361  val, offset = UnpackString(buf, count, offset=offset)
362  if not self.StateFieldGet(stateId, 'fctl', 'noexec'):
363  fvals[fname] = val
364  self.StateFieldSet(stateId, count=count)
365  self.StateFieldSet(stateId, 'trace', trace_end=offset)
366  if self.mTrace: self.TraceField(fielddef, val, buf, stateId)
367  return offset
def UnpackString(buf, count, offset=0)
Definition: NetMsgsLib.py:889
def nmUnpackString(self, fielddef, buf, offset, fvals, stateId)
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackStruct (   self,
  fielddef,
  buf,
  offset,
  fvals,
  stateId 
)
Unpack structure field from the buffer.

Parameters:
  fielddef  - Field definition.
  buf       - Buffer to unpack.
  offset    - Buffer offset where unpacking begins.
  fvals     - Dictionary to hold unpacked field values.
  stateId   - Unpacking state id.

Return:
  New buffer offset.

Definition at line 371 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsXmlParser.NetMsgsXmlParser.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mTrace, NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackStream(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldGet(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.TraceField().

371  def nmUnpackStruct(self, fielddef, buf, offset, fvals, stateId):
372  """ Unpack structure field from the buffer.
373 
374  Parameters:
375  fielddef - Field definition.
376  buf - Buffer to unpack.
377  offset - Buffer offset where unpacking begins.
378  fvals - Dictionary to hold unpacked field values.
379  stateId - Unpacking state id.
380 
381  Return:
382  New buffer offset.
383  """
384  fname = fielddef['name']
385  msgdef = fielddef['msgdef']
386  max_count = msgdef['max_count']
387  fhdr = self.StateFieldGet(stateId, 'fhdr')
388  count = fhdr['count']
389  if count > max_count:
390  self.Error("%s" % fielddef['name'],
391  "%s %u > %u" % (EMsgStructRange, count, max_count),
392  stateId=stateId)
393  self.StateFieldSet(stateId, count=count)
394  self.StateFieldSet(stateId, 'trace', trace_end=offset)
395  if not self.StateFieldGet(stateId, 'fctl', 'noexec'):
396  fvals[fname] = {}
397  val = fvals[fname]
398  else:
399  val = {}
400  if self.mTrace: self.TraceField(fielddef, val, buf, stateId)
401  return self.nmUnpackStream(msgdef, buf, offset, val, stateId)
def nmUnpackStream(self, msgdef, buf, offset, fvals, stateId)
def nmUnpackStruct(self, fielddef, buf, offset, fvals, stateId)
def NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackVector (   self,
  fielddef,
  buf,
  offset,
  fvals,
  stateId 
)
Unpack variable vector field from the buffer.

Parameters:
  fielddef  - Field definition.
  buf       - Buffer to unpack.
  offset    - Buffer offset where unpacking begins.
  fvals     - Dictionary to hold unpacked field values.
  stateId   - Unpacking state id.

Return:
  New buffer offset.

Definition at line 405 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsXmlParser.NetMsgsXmlParser.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.Error(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mFuncMap, NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.mTrace, NetMsgs.NetMsgsLibFlat.NetMsgsFlat.nmUnpackFieldHdr(), NetMsgs.NetMsgsLibITV.NetMsgsITV.nmUnpackFieldHdr(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldGet(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldPop(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldPush(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet(), NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.TraceField(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.UNPACKFUNC.

405  def nmUnpackVector(self, fielddef, buf, offset, fvals, stateId):
406  """ Unpack variable vector field from the buffer.
407 
408  Parameters:
409  fielddef - Field definition.
410  buf - Buffer to unpack.
411  offset - Buffer offset where unpacking begins.
412  fvals - Dictionary to hold unpacked field values.
413  stateId - Unpacking state id.
414 
415  Return:
416  New buffer offset.
417  """
418  fname = fielddef['name']
419  vdef = fielddef['vdef']
420  vname = vdef['name']
421  vtype = vdef['ftype']
422  max_count = fielddef['max_count']
423  fhdr = self.StateFieldGet(stateId, 'fhdr')
424  count = fhdr['count']
425  if vtype != fhdr['vtype']:
426  self.Error("%s" % fielddef['name'], EMsgBadMsg,
427  "unpacked vtype=%c != expected vtype=%c" % (fhdr['vtype'], vtype),
428  stateId=stateId)
429  if count > max_count:
430  self.Error("%s" % fielddef['name'],
431  "%s %u > %u" % (EMsgVectorRange, count, max_count),
432  stateId=stateId)
433  self.StateFieldSet(stateId, count=count)
434  self.StateFieldSet(stateId, 'trace', trace_end=offset)
435  if not self.StateFieldGet(stateId, 'fctl', 'noexec'):
436  fvals[fname] = []
437  val = fvals[fname]
438  else:
439  val = []
440  if self.mTrace: self.TraceField(fielddef, val, buf, stateId)
441  if vtype in nmBase.NMFTypeCodeSimple:
442  self.StateFieldSet(stateId, 'fctl', has_hdr=False)
443  else:
444  self.StateFieldSet(stateId, 'fctl', has_hdr=True)
445  unpackfunc = self.mFuncMap[vtype][self.UNPACKFUNC]
446  vval = {}
447  i = 0
448  self.StateFieldPush(stateId, fname=vname, fid=0, ftype=vtype)
449  while i < count:
450  self.StateFieldSet(stateId, 'trace', trace_start=offset)
451  self.StateFieldSet(stateId, i=i)
452  offset = self.nmUnpackFieldHdr(buf, offset, stateId)
453  offset = unpackfunc(vdef, buf, offset, vval, stateId)
454  val += [vval[vname]]
455  i += 1
456  vval = {}
457  self.StateFieldPop(stateId)
458  return offset
def nmUnpackFieldHdr(self, buf, offset, stateId)
def nmUnpackVector(self, fielddef, buf, offset, fvals, stateId)
def NetMsgs.NetMsgsLibITV.NetMsgsITV.StateNew (   self,
  msgid,
  op,
  kwargs 
)
Create a new packing/unpacking operational state.

The operational state contains message information plus a stack of
current field processing states. Each field state has header,
control, run-time determined values, and tracing parameters.

Parameters:
  msgid   - Message id.
  op      - Operation string. One of: 'pack', 'unpack'.
  kwargs  - Optional initial state overrides and implementation
            specifics.

Return:
  State id which is a key into the specific state.

Definition at line 101 of file NetMsgsLibITV.py.

References NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.StateFieldSet().

Referenced by NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmPackMsg(), and NetMsgs.NetMsgsLibStreamBuf.NetMsgsStreamBuf.nmUnpackMsg().

101  def StateNew(self, msgid, op, **kwargs):
102  """ Create a new packing/unpacking operational state.
103 
104  The operational state contains message information plus a stack of
105  current field processing states. Each field state has header,
106  control, run-time determined values, and tracing parameters.
107 
108  Parameters:
109  msgid - Message id.
110  op - Operation string. One of: 'pack', 'unpack'.
111  kwargs - Optional initial state overrides and implementation
112  specifics.
113 
114  Return:
115  State id which is a key into the specific state.
116  """
117  stateId = nmStream.NetMsgsStreamBuf.StateNew(self, msgid, op, **kwargs)
118  self.StateFieldSet(stateId, 'fctl', has_hdr=True)
119  return stateId
def StateNew(self, msgid, op, kwargs)

The documentation for this class was generated from the following file: