Example #1
0
    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 = ""
Example #2
0
	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 = ''
Example #3
0
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')
Example #4
0
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')
Example #5
0
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
Example #6
0
	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
Example #7
0
    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
Example #8
0
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
Example #9
0
    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
Example #10
0
	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
Example #11
0
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
Example #12
0
    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)
Example #13
0
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
Example #14
0
	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)
Example #15
0
	def __init__(me, name):
		me.name = name
		me.connected = util.ticks()
Example #16
0
 def __init__(me, iv, func):
     me.interval = iv
     me.func = func
     me.last = util.ticks() + iv * random.random()
Example #17
0
 def iter(me):
     now = util.ticks()
     for t in me.timers:
         if (now - t.last) > t.interval:
             t.last = now
             t.func()
Example #18
0
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
 def __init__(me, name):
     me.name = name
     me.connected = util.ticks()
Example #20
0
	def iter(me):
		now = util.ticks()
		for t in me.timers:
			if (now - t.last) > t.interval:
				t.last = now
				t.func()
Example #21
0
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
Example #22
0
	def __init__(me, iv, func):
		me.interval = iv
		me.func = func
		me.last = util.ticks() + iv * random.random()