Browse Source

make ip/port voice packet logic more clear

Adds comments and also rewrites the logic in a way that is much easier
to see what is going on. For example you can now easily see that the
port is actually encoded in little endian (which is different from
everything else).
pull/69/head
Steven Berler 9 years ago
parent
commit
49488c9151
  1. 16
      discord/voice_client.py

16
discord/voice_client.py

@ -211,16 +211,16 @@ class VoiceClient:
self.socket.sendto(packet, (self.endpoint_ip, self.voice_port))
recv = yield from self.loop.sock_recv(self.socket, 70)
log.debug('received packet in initial_connection: {}'.format(recv))
ip = []
for x in range(4, len(recv)):
val = recv[x]
if val == 0:
break
ip.append(chr(val))
# the ip is ascii starting at the 4th byte and ending at the first null
ip_start = 4
ip_end = recv.index(0, ip_start)
self.ip = recv[ip_start:ip_end].decode('ascii')
# the port is a little endian unsigned short in the last two bytes
# yes, this is different endianness from everything else
self.port = struct.unpack_from('<H', recv, len(recv) - 2)[0]
self.ip = ''.join(ip)
self.port = recv[len(recv) - 2] | recv[len(recv) - 1] << 8
log.debug('detected ip: {} port: {}'.format(self.ip, self.port))
payload = {

Loading…
Cancel
Save