def connect(self):
if self.sock:
self.close()
s = socket.socket()
s.connect(self.endpoint)
hello = s.recv(8, socket.MSG_WAITALL)
if hello != b"FLUX0003":
raise NotSupportError()
self.sock = ssl.SSLSocket(s)
# Stage 1: Recv randbytes
self.randbytes = self.recv_bytes(64)
# Stage 2: Send public key
strkey = self.client_key.public_key_pem.decode("ascii")
self.send_text(strkey)
# Stage 3: Get public key status
resp = self.recv_text()
if resp == "sign":
# Stage 4.a: Sign
doc = HMAC(self.uuid.bytes, self.randbytes, sha1).digest()
signature = self.client_key.sign(doc)
self.send_text(to_hex(signature))
elif resp == "password":
# Stage 4.b: Send password
return
elif resp.startswith("error "):
raise raise_error(resp)
else:
raise NotSupportError("Auth method %s not support", resp)
resp = self.recv_text()
if resp == "ok":
self._authorized = True
return
elif resp.startswith("error "):
err = resp[6:]
if err == "AUTH_ERROR":
raise AuthError()
else:
raise UpnpError(err)
评论列表
文章目录