59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
#===========================================================================
|
|
#
|
|
# Data request packet
|
|
#
|
|
#===========================================================================
|
|
|
|
import logging
|
|
import socket
|
|
# Import the base header and the struct type codes we're using.
|
|
from .Header import *
|
|
from .. import util
|
|
|
|
#===========================================================================
|
|
class Data ( Header ):
|
|
_fields = Header._fields + [
|
|
( uint4, 'command' ),
|
|
( uint4, 'first' ),
|
|
( uint4, 'last' ),
|
|
( uint4, 'trailer' ),
|
|
]
|
|
|
|
struct = util.NamedStruct( 'LITTLE_ENDIAN', _fields )
|
|
|
|
#------------------------------------------------------------------------
|
|
def __init__( self, command, first, last ):
|
|
Header.__init__( self )
|
|
|
|
self.command = command
|
|
self.first = first
|
|
self.last = last
|
|
self.trailer = 0x00
|
|
|
|
#------------------------------------------------------------------------
|
|
def send( self, sock ):
|
|
bytes = self.struct.pack( self )
|
|
|
|
if self._log.isEnabledFor( logging.DEBUG ):
|
|
self._log.debug( "Send: Request.Data packet\n" +
|
|
util.hex.dump( bytes ) )
|
|
|
|
# Send the request and read the reply back in.
|
|
try:
|
|
sock.send( bytes )
|
|
reply = sock.recv( 4096 )
|
|
|
|
except socket.timeout as e:
|
|
msg = "Data request failed - time out error"
|
|
self._log.error( msg )
|
|
util.Error.raiseException( e, msg )
|
|
|
|
if self._log.isEnabledFor( logging.DEBUG ):
|
|
self._log.debug( "Recv: Reply packet\n" + util.hex.dump( reply ) )
|
|
|
|
return reply
|
|
|
|
#------------------------------------------------------------------------
|
|
|
|
#===========================================================================
|