예제 #1
0
    def setup_timeout(self, ID=0):
        Time = time.time()
        Times = struct.pack('d', Time)
        if ID == 0: ID = random.getrandbits(32)  # ID size in bits

        ping.data_ping(self.socket, self.server[1], ID, Times)
        msg = ping.read_ping(self.socket, self.timeout())
        if not msg:
            raise Exception(
                'PingServer::setup_timeout: no valid response from ' +
                self.server[0])
        addr, rID, data = msg['address'], msg['ID'], msg['payload']
        log.debug("Addr=%s rID=%d Data=%d bytes" % (addr[0], rID, len(data)))
        if len(data) == 0:
            raise Exception('PingServer::setup_timeout: null response from ' +
                            self.server[0])
        if rID != ID:
            raise Exception(
                'PingServer::setup_timeout: invalid response id from ' +
                self.server[0])
        if data != Times:
            raise Exception(
                'PingServer::setup_timeout: invalid response data from ' +
                self.server[0])
        if addr[0] != self.server[1]:
            raise Exception(
                'PingServer::setup_timeout: invalid response server from ' +
                self.server[0])
        delay = time.time() - Time
        log.notice('echo delay: %.02fms' % (1000 * delay))
예제 #2
0
    def process_block(self, addr, ID, data):
        if ID == 0: raise Exception('server responded with ID 0 packet')

        while len(self.queued_events[ID]):
            handler, event, args = self.queued_events[ID].popleft()
            if event.is_set(): continue

            if handler == self.write_block_timeout:
                if self.debug:
                    log.trace('%s (block %d) updated' % (self.server[0], ID))
                data = args[1]
            elif handler == self.read_block_timeout:
                if self.debug:
                    log.trace('%s (block %d) read' % (self.server[0], ID))
                callback, cb_args = args[1], args[2]
                if len(data) > 0: callback(ID, data, *cb_args)
                else: callback(ID, self.null_block(), *cb_args)
            elif handler == self.delete_block_timeout:
                if self.debug:
                    log.trace('%s (block %d) deleted' % (self.server[0], ID))
                data = ''
            event.set()

        if len(data) == 0:
            self.blocks = self.blocks - 1
        else:
            if len(self.listeners): self.process_listeners(addr, ID, data)
            #log.trace('%s: sending %d bytes from block %d'%(self.server[0],len(data),ID))
            ping.data_ping(self.socket, addr, ID, data)
예제 #3
0
    def setup_block(self, ID=0):
        if ID == 0: ID = random.getrandbits(32)  # ID size in bits
        Fill = chr(random.getrandbits(8))  # repeated data
        Filler = self.block_size * Fill

        ping.data_ping(self.socket, self.server[1], ID, Filler)
        msg = ping.read_ping(self.socket, self.timeout())
        if not msg:
            raise Exception(
                'PingServer::setup_block: no valid response from ' +
                self.server[0])
        addr, rID, data = msg['address'], msg['ID'], msg['payload']
        log.debug("Addr=%s rID=%d Data=%d bytes" % (addr[0], rID, len(data)))
        if len(data) == 0:
            raise Exception('PingServer::setup_block: null response from ' +
                            self.server[0])
        if rID != ID:
            raise Exception(
                'PingServer::setup_block: invalid response id from ' +
                self.server[0])
        if data != len(data) * Fill:
            raise Exception(
                'PingServer::setup_block: invalid response data from ' +
                self.server[0])
        if addr[0] != self.server[1]:
            raise Exception(
                'PingServer::setup_block: invalid response server from ' +
                self.server[0])
        self.block_size = len(data)
        self.empty_block = self.null_block()
        log.notice('echo length: %d bytes' % self.block_size)
예제 #4
0
    def process_block(self, addr, ID, data):
        if ID == 0:
            raise Exception("server responded with ID 0 packet")

        while len(self.queued_events[ID]):
            handler, event, args = self.queued_events[ID].popleft()
            if event.is_set():
                continue

            if handler == self.write_block_timeout:
                if self.debug:
                    log.trace("%s (block %d) updated" % (self.server[0], ID))
                data = args[1]
            elif handler == self.read_block_timeout:
                if self.debug:
                    log.trace("%s (block %d) read" % (self.server[0], ID))
                callback, cb_args = args[1], args[2]
                if len(data) > 0:
                    callback(ID, data, *cb_args)
                else:
                    callback(ID, self.null_block(), *cb_args)
            elif handler == self.delete_block_timeout:
                if self.debug:
                    log.trace("%s (block %d) deleted" % (self.server[0], ID))
                data = ""
            event.set()

        if len(data) == 0:
            self.blocks = self.blocks - 1
        else:
            if len(self.listeners):
                self.process_listeners(addr, ID, data)
            # log.trace('%s: sending %d bytes from block %d'%(self.server[0],len(data),ID))
            ping.data_ping(self.socket, addr, ID, data)
예제 #5
0
	def setup_timeout(self, ID=0):
		Time = time.time()
		Times = struct.pack('d',Time)
		if ID == 0: ID = random.getrandbits(32) # ID size in bits

		ping.data_ping(self.socket,self.server[1],ID,Times)
		msg = ping.read_ping(self.socket,self.timeout())
		if not msg:                   raise Exception('PingServer::setup_timeout: no valid response from '+self.server[0])
		addr,rID,data = msg['address'],msg['ID'],msg['payload']
		log.debug("Addr=%s rID=%d Data=%d bytes"%(addr[0],rID,len(data)))
		if len(data) == 0:            raise Exception('PingServer::setup_timeout: null response from '+self.server[0])
		if rID != ID:                 raise Exception('PingServer::setup_timeout: invalid response id from '+self.server[0])
		if data != Times:             raise Exception('PingServer::setup_timeout: invalid response data from '+self.server[0])
		if addr[0] != self.server[1]: raise Exception('PingServer::setup_timeout: invalid response server from '+self.server[0])
		delay = time.time() - Time
		log.notice('echo delay: %.02fms'%(1000*delay))
예제 #6
0
	def setup_block(self, ID = 0):
		if ID == 0: ID = random.getrandbits(32) # ID size in bits
		Fill = chr(random.getrandbits(8)) # repeated data
		Filler = self.block_size * Fill

		ping.data_ping(self.socket,self.server[1],ID,Filler)
		msg = ping.read_ping(self.socket,self.timeout())
		if not msg:                   raise Exception('PingServer::setup_block: no valid response from '+self.server[0])
		addr,rID,data = msg['address'],msg['ID'],msg['payload']
		log.debug("Addr=%s rID=%d Data=%d bytes"%(addr[0],rID,len(data)))
		if len(data) == 0:            raise Exception('PingServer::setup_block: null response from '+self.server[0])
		if rID != ID:                 raise Exception('PingServer::setup_block: invalid response id from '+self.server[0])
		if data != len(data)*Fill:    raise Exception('PingServer::setup_block: invalid response data from '+self.server[0])
		if addr[0] != self.server[1]: raise Exception('PingServer::setup_block: invalid response server from '+self.server[0])
		self.block_size = len(data)
		self.empty_block = self.null_block()
		log.notice('echo length: %d bytes'%self.block_size)