예제 #1
0
    def send(self,
             sensor_data,
             ack_num=0,
             timestamp=int(time.time()),
             ident=None,
             snum=None,
             dstip=None,
             dstport=None):

        if ident == None:
            ident = self.Ident

        if snum == None:
            snum = self.SNum

        if dstip == None:
            dstip = self.MCGroup

        if dstport == None:
            dstport = self.MCDstPort

        else:
            if version not in list(hdr_fmt.keys()):
                raise ValueError("Incorrect protocol version")


        try:
            print("Header:")
            print(self.Version)
            print(ident)
            print(snum)
            print(ack_num)
            print(timestamp)

            print(list(pld_fmt.keys()))

            msg = super(IPMcastWorker, self)._dgram_pack(self.Version, ident, snum, \
                                    ack_num, timestamp)
            print(msg)

            if ack_num != 0:
                self.msg_queue[snum] = msg

            sent_size = self.working_socket.sendto(msg, (dstip, dstport))

            self.SNum += self.SNumDelta

            return sent_size

        except socket.error:
            del msg
            return err['ErrSocketError']

        except socket.timeout:
            del msg
            return err['ErrSocketTimeout']

        except struct.error:
            del msg
            return err['ErrPacketFormat']
예제 #2
0
    def __basic_init(self,Ident=1,Version=1,
                   MaxMsgSize=opts['MaxMsgSize']):

        self.SNum = int((time.time() - int(time.time())) * time.time()) >> 16
        self.SNumDelta = int((time.time() - int(time.time())) * time.time()) >> 20
        self.MaxMsgSize = MaxMsgSize

        if Version not in (list(hdr_fmt.keys())):
            raise ValueError("Invalid protocol version")
        else:
            self.Version = Version

        if Ident not in range (1,65536):
            raise ValueError("Invalid ident")
        else:
            self.Ident = Ident
예제 #3
0
    def _dgram_pack(self,
                     sensor_data,
                     ack_required=False,
                     version=None,
                     ident=None,
                     snum=None,
                     ack_num=0,
                     timestamp=int(time.time())):

        if version == None:
            version = self.Version
        elif (version not in list(hdr_fmt.keys())):
            raise ValueError("Incorrect version field value")
        else:
            pass

        if ident == None:
            ident = self.Ident
        else:
            try:
                ident = int(ident)
            except Exception:
                raise ValueError("Incorrect ident field value")


        if snum == None:
            snum = self.SNum
        else:
            try:
                snum = int(snum)
            except Exception:
                raise ValueError("Incorrect serial number field value")


        send_buf = bytearray()

        try:
            send_buf.extend(struct.pack(hdr_fmt[self.Version],
                                        version,
                                        ident,
                                        snum,
                                        ack_num,
                                        timestamp)
                           )

            for data in sensor_data:
                send_buf.extend(struct.pack(pld_fmt[self.Version],
                                            data['sensor_id'],
                                            data['sensor_value']
                                           )
                               )

            return send_buf

        except struct.error:
            del send_buf
            return err['ErrPacketFormat']

        except KeyError:
            del send_buf
            return err['ErrPacketFormat']