Esempio n. 1
0
    def load(self, rpcmsg):
        """Extract RPC parameters from message header in rpcmsg into rpcHeader
           variables.  
           If a ValueError or IndexError is detected, raises rpcMsgError."""

        # Mark time received
        self.timerecd = common.time2timestamp()

        # Split data into fields and parse it
        data = rpcmsg.split(',')

        try:
            self.len_total = int(data[0])
            self.timesent = data[1].strip()
            # mktime treats its argument as a localtime(), i.e. HST, so we
            # must subtract 10 hours (36000.0 seconds):
            self.msg_time = common.timestamp2time(self.timesent) - 36000.0
            self.protocol_ver = data[2].strip()
            self.seq_num = int(data[3])
            self.sender = data[4].strip()
            self.process_code = int(data[5])
            # uid and gid can be blank, according to SOSS rpc spec, and often
            # are, so we maintain them as strings, not ints.
            self.uid = data[6].strip()
            self.gid = data[7].strip()
            self.receiver = data[8].strip()
            self.pkt_type = data[9].strip()
            self.msg_type = data[10].strip()
            self.len_payload = int(data[11])
            self.reserved = '%27s' % ''
            self.payload = rpcmsg[self.len_hdr:]

        except ValueError, e:
            raise rpcMsgError("malformed SOSS rpc message: '%s'" % rpcmsg)
Esempio n. 2
0
    def unpack_sd(self):
        """Unpack self.payload from a FE message."""
        try:
            tablename = self.payload[0:8]
            statusdata = self.payload[9:]

        except IndexError, e:
            raise rpcMsgError("SOSS RPC SD payload format error: %s" % str(e))
Esempio n. 3
0
    def unpack_ab(self):
        """Unpack self.payload from an AB message."""
        try:
            (seq_num, result) = self.payload.split(',')
            seq_num = int(seq_num)
            result = int(result)

        except (ValueError, TypeError), e:
            raise rpcMsgError("SOSS RPC AB payload format error: %s" % str(e))
Esempio n. 4
0
    def unpack_fs(self):
        """Unpack self.payload from a FS message."""
        try:
            data = self.payload.split(',')
            (fitspath, fitssize, frameid, propid, starsdir, version, indexpath,
             indexsize) = data
            fitssize = int(fitssize)
            indexsize = int(indexsize)

        except ValueError, e:
            raise rpcMsgError("SOSS RPC FT,FS payload error: %s" % str(e))
Esempio n. 5
0
class TCSstatRpcHeader(object):
    """TCS RPC Header Class.  This is a container for RPC header
    parameters.
    """
    def __init__(self, rpcmsg=None):
        """Constructor.  Calls load(rpcmsg) to extract header parameters if
           an RPC message is provided; else calls sethdr() to set default
           header parameters."""

        self.len_hdr = 33

        if rpcmsg:
            self.load(rpcmsg)  # must be a packed RPC message type
        else:
            self.sethdr()

    def load(self, rpcmsg):
        """Extract RPC parameters from message header in rpcmsg into rpcHeader
           variables.  Use this method to parse a message that was received.

           NOTE: for TCSL and TCSS interfaces (see STATint), rpcmsg is
           an object that has the actual message imbedded in a "contents" 
           attribute;  therefore, the header and payload fields must be
           extracted from rpcmsg.contents.  For all other TCS interfaces,
           the header and payload fields must be extracted from rpcmsg.  

           If a ValueError or IndexError is detected, raises rpcMsgError."""

        # Mark time received
        self.timerecd = time2timestamp()

        # Extract string message if necessary
        if type(rpcmsg) != types.StringType:
            rpcmsg = rpcmsg.contents

        # Parse fields of header
        #? print 'rpcmsg = ',rpcmsg
        try:
            self.msg_type = rpcmsg[0:2]
            self.rcvr_host = rpcmsg[2:6]
            self.send_host = rpcmsg[6:10]
            self.proc_id_str = rpcmsg[10:14]
            self.proc_id = int(self.proc_id_str)
            self.msg_time_str = rpcmsg[14:29]
            self.msg_time = timestamp2time(self.msg_time_str)
            self.len_payload_str = rpcmsg[29:33]
            self.len_payload = int(self.len_payload_str)
            self.len_total = self.len_hdr + self.len_payload
            self.payload = rpcmsg[self.len_hdr:self.len_hdr + self.len_payload]

        except ValueError, e:
            raise rpcMsgError("malformed TCS rpc message: '%s'" % rpcmsg)
        except IndexError, e:
            raise rpcMsgError("malformed TCS rpc message: '%s'" % rpcmsg)
Esempio n. 6
0
    def unpack_fe(self):
        """Unpack self.payload from a FE message."""
        try:
            (seq_num, status1, status2, result) = self.payload.split(',')
            seq_num = int(seq_num)
            status1 = int(status1)
            status2 = int(status2)
            result = int(result)

        except ValueError, e:
            raise rpcMsgError("SOSS RPC FT,FE payload format error: %s" %
                              str(e))
Esempio n. 7
0
    def unpack_de(self):
        """Unpack self.payload from a DE message."""
        try:
            statuslist = self.payload.split(',')
            seq_num = statuslist.pop(0)
            seq_num = int(seq_num)
            statuslist = map(int, statuslist)
            result = statuslist.pop(0)

        except (ValueError, TypeError), e:
            raise rpcMsgError("SOSS RPC DT,DE payload format error: %s" %
                              str(e))
Esempio n. 8
0
    def unpack_en(self):
        """Unpack self.payload from a EN message."""
        try:
            payload = self.payload.split(',')
            seq_num = int(payload[0])
            result = int(payload[1])
            # 'application-level' payload
            payload = ','.join(payload[2:])

        except (ValueError, IndexError, TypeError), e:
            raise rpcMsgError("SOSS RPC CT,EN payload format error: %s" %
                              str(e))
Esempio n. 9
0
class SOSScmdRpcHeader(object):
    """SOSS RPC Header Class.  This is a container for RPC header
    parameters.
    """
    def __init__(self, rpcmsg=None):
        """Constructor.  Calls load(rpcmsg) to extract header parameters if
           an RPC message is provided; else calls sethdr() to set default
           header parameters."""

        self.len_hdr = 128

        if rpcmsg:
            self.load(rpcmsg)
        else:
            self.sethdr()

    def load(self, rpcmsg):
        """Extract RPC parameters from message header in rpcmsg into rpcHeader
           variables.  
           If a ValueError or IndexError is detected, raises rpcMsgError."""

        # Mark time received
        self.timerecd = common.time2timestamp()

        # Split data into fields and parse it
        data = rpcmsg.split(',')

        try:
            self.len_total = int(data[0])
            self.timesent = data[1].strip()
            # mktime treats its argument as a localtime(), i.e. HST, so we
            # must subtract 10 hours (36000.0 seconds):
            self.msg_time = common.timestamp2time(self.timesent) - 36000.0
            self.protocol_ver = data[2].strip()
            self.seq_num = int(data[3])
            self.sender = data[4].strip()
            self.process_code = int(data[5])
            # uid and gid can be blank, according to SOSS rpc spec, and often
            # are, so we maintain them as strings, not ints.
            self.uid = data[6].strip()
            self.gid = data[7].strip()
            self.receiver = data[8].strip()
            self.pkt_type = data[9].strip()
            self.msg_type = data[10].strip()
            self.len_payload = int(data[11])
            self.reserved = '%27s' % ''
            self.payload = rpcmsg[self.len_hdr:]

        except ValueError, e:
            raise rpcMsgError("malformed SOSS rpc message: '%s'" % rpcmsg)
        except IndexError, e:
            raise rpcMsgError("malformed SOSS rpc message: '%s'" % rpcmsg)
Esempio n. 10
0
    def unpack_ds(self):
        """Unpack self.payload from a DS message."""

        try:
            # Unpack payload.  At the end, _framelist_ will contain a list of
            # tuples of the form (path, size, frameid)--one for each file to
            # be transferred.
            framelist = []
            contents = self.payload.split(',')
            while len(contents) > 0:
                path = contents.pop(0).strip()
                size = int(contents.pop(0))
                frameid = contents.pop(0).strip().upper()
                framelist.append((path, size, frameid))

        except (ValueError, TypeError), e:
            raise rpcMsgError("SOSS RPC DT,DS payload format error: %s" %
                              str(e))
Esempio n. 11
0
    def load(self, rpcmsg):
        """Extract RPC parameters from message header in rpcmsg into rpcHeader
           variables.  Use this method to parse a message that was received.

           NOTE: for TCSL and TCSS interfaces (see STATint), rpcmsg is
           an object that has the actual message imbedded in a "contents" 
           attribute;  therefore, the header and payload fields must be
           extracted from rpcmsg.contents.  For all other TCS interfaces,
           the header and payload fields must be extracted from rpcmsg.  

           If a ValueError or IndexError is detected, raises rpcMsgError."""

        # Mark time received
        self.timerecd = time2timestamp()

        # Extract string message if necessary
        if type(rpcmsg) != types.StringType:
            rpcmsg = rpcmsg.contents

        # Parse fields of header
        #? print 'rpcmsg = ',rpcmsg
        try:
            self.msg_type = rpcmsg[0:2]
            self.rcvr_host = rpcmsg[2:6]
            self.send_host = rpcmsg[6:10]
            self.proc_id_str = rpcmsg[10:14]
            self.proc_id = int(self.proc_id_str)
            self.msg_time_str = rpcmsg[14:29]
            self.msg_time = timestamp2time(self.msg_time_str)
            self.len_payload_str = rpcmsg[29:33]
            self.len_payload = int(self.len_payload_str)
            self.len_total = self.len_hdr + self.len_payload
            self.payload = rpcmsg[self.len_hdr:self.len_hdr + self.len_payload]

        except ValueError, e:
            raise rpcMsgError("malformed TCS rpc message: '%s'" % rpcmsg)