def __init__(me): # relatively constant me.reliable_retry = 100 # 1 second me.max_bigpkt = 512 * 1024 me.timeoutinterval = 1500 me.packetloss = 0 # connection state me.encstate = enc.EncState() me.c2sn = 0 me.s2cn = 0 me.sock = None me.lastrecv = util.ticks() me.outq = [] me.inq = {} me.stage = s_nothing me.sentconnect = 0 me.dispatch = {} me.curchunk = "" me.presizedata = ""
def __init__(me): # relatively constant me.reliable_retry = 100 # 1 second me.max_bigpkt = 512 * 1024 me.timeoutinterval = 1500 me.packetloss = 0 # connection state me.encstate = enc.EncState() me.c2sn = 0 me.s2cn = 0 me.sock = None me.lastrecv = util.ticks() me.outq = [] me.inq = {} me.stage = s_nothing me.sentconnect = 0 me.dispatch = {} me.curchunk = '' me.presizedata = ''
def try_sending_outqueue(): global outq, stage, lastping, lastrecv now = util.ticks() # check for disconnect if (now - lastrecv) > timeoutinterval: log("no packets from biller in %s seconds, assuming down" % ((now - lastrecv) / 100)) util.exit(1) # only send stuff once we're connected if stage != s_connected: return for p in outq: if (now - p.lastretry) > reliable_retry: raw_send(p.data) if p.reliable: p.lastretry = now else: outq.remove(p) # check for pings if (now - lastping) > pinginterval: lastping = now queue_pkt('\x01')
def try_sending_outqueue(): global outq, stage, lastping, lastrecv now = util.ticks() # check for disconnect if (now - lastrecv) > timeoutinterval: log("no packets from biller in %s seconds, assuming down" % ((now-lastrecv)/100)) util.exit(1) # only send stuff once we're connected if stage != s_connected: return for p in outq: if (now - p.lastretry) > reliable_retry: raw_send(p.data) if p.reliable: p.lastretry = now else: outq.remove(p) # check for pings if (now - lastping) > pinginterval: lastping = now queue_pkt('\x01')
def make_ppk(rot, x, y, xspeed, yspeed, status, bty, nrg): tm = int(util.ticks() & 0x7fffffff) if random.random() < 0.05: wpn = 1 else: wpn = 0 ppk1 = struct.pack('< B b I h h', C2S_POSITION, rot, tm, xspeed, y) ppk2 = struct.pack('< b h h H h h', status, x, yspeed, bty, nrg, wpn) epd = '' cksum = 0 for c in ppk1: cksum ^= ord(c) for c in ppk2: cksum ^= ord(c) return ppk1 + chr(cksum) + ppk2 + epd
def connect(me, ip, port, useenc=0): import socket me.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) me.sock.connect((ip, port)) me.sock.setblocking(0) util.log("contacting remote server") if useenc: key = int(util.ticks() & 0xfffffffL) | 0x80000000L else: key = 0 # force no encryption pkt = struct.pack('< BB I BB', 0, 1, key, 1, 0) me.raw_send(pkt) me.stage = s_sentkey
def connect(me, ip, port, useenc=0): import socket me.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) me.sock.connect((ip, port)) me.sock.setblocking(0) util.log("contacting remote server") if useenc: key = int(util.ticks() & 0xFFFFFFFL) | 0x80000000L else: key = 0 # force no encryption pkt = struct.pack("< BB I BB", 0, 1, key, 1, 0) me.raw_send(pkt) me.stage = s_sentkey
def try_read(me): try: r = me.sock.recv(512) if r: # packetloss simulation if random.random() < me.packetloss: return me.lastrecv = util.ticks() r = me.encstate.decrypt(r) me.process_pkt(r) me.try_process_inqueue() else: util.log("recvd 0 bytes from remote socket") except: # probably ewouldblock raise pass
def try_read(): global sock, lastrecv, encstate try: r = sock.recv(512) if r: lastrecv = util.ticks() dec = encstate.decrypt(r) try: process_pkt(dec) except: log("error processing recvd packet, type %x" % dec[0]) try_process_inqueue() else: log("recvd 0 bytes from remote socket") except: # probably ewouldblock pass
def try_sending_outqueue(me): now = util.ticks() # check for disconnect if (now - me.lastrecv) > me.timeoutinterval: util.log("no packets from server in %s seconds, assuming down" % ((now - me.lastrecv) / 100)) raise Disconnected() # only send stuff once we're connected if me.stage != s_connected: return for p in me.outq: if (now - p.lastretry) > me.reliable_retry: me.raw_send(p.data) if p.reliable: p.lastretry = now else: me.outq.remove(p)
def try_sending_outqueue(me): now = util.ticks() # check for disconnect if (now - me.lastrecv) > me.timeoutinterval: util.log("no packets from server in %s seconds, assuming down" % ((now-me.lastrecv)/100)) raise Disconnected() # only send stuff once we're connected if me.stage != s_connected: return for p in me.outq: if (now - p.lastretry) > me.reliable_retry: me.raw_send(p.data) if p.reliable: p.lastretry = now else: me.outq.remove(p)
def __init__(me, name): me.name = name me.connected = util.ticks()
def __init__(me, iv, func): me.interval = iv me.func = func me.last = util.ticks() + iv * random.random()
def iter(me): now = util.ticks() for t in me.timers: if (now - t.last) > t.interval: t.last = now t.func()
reliable_retry = 100 # 1 second max_bigpkt = 512 * 1024 pinginterval = 500 # 5 seconds timeoutinterval = pinginterval * 2 + 300 s_nothing = 0 s_sentkey = 1 s_connected = 2 # globals c2sn = 0 s2cn = 0 sock = None lastping = util.ticks() lastrecv = util.ticks() outq = [] inq = [] stage = s_nothing sentconnect = 0 # pick a key for this run mykey = int(util.ticks() & 0xfffffff) | 0x80000000 encstate = enc.EncState() def set_sock(s): global sock
max_bigpkt = 512 * 1024 pinginterval = 500 # 5 seconds timeoutinterval = pinginterval * 2 + 300 s_nothing = 0 s_sentkey = 1 s_connected = 2 # globals c2sn = 0 s2cn = 0 sock = None lastping = util.ticks() lastrecv = util.ticks() outq = [] inq = [] stage = s_nothing sentconnect = 0 # pick a key for this run mykey = int(util.ticks() & 0xfffffff) | 0x80000000 encstate = enc.EncState() def set_sock(s): global sock sock = s