1
0

lntransport: use network proxy if available

fixes #4824
This commit is contained in:
SomberNight
2020-04-15 21:41:33 +02:00
parent b5811e8072
commit 223b62554e
6 changed files with 57 additions and 26 deletions

View File

@@ -8,12 +8,14 @@
import hashlib
import asyncio
from asyncio import StreamReader, StreamWriter
from typing import Optional
from .crypto import sha256, hmac_oneshot, chacha20_poly1305_encrypt, chacha20_poly1305_decrypt
from .lnutil import (get_ecdh, privkey_to_pubkey, LightningPeerConnectionClosed,
HandshakeFailed, LNPeerAddr)
from . import ecc
from .util import bh2u
from .util import bh2u, MySocksProxy
class HandshakeState(object):
prologue = b"lightning"
@@ -217,17 +219,22 @@ class LNResponderTransport(LNTransportBase):
class LNTransport(LNTransportBase):
"""Transport initiated by local party."""
def __init__(self, privkey: bytes, peer_addr: LNPeerAddr):
def __init__(self, privkey: bytes, peer_addr: LNPeerAddr, *,
proxy: Optional[dict]):
LNTransportBase.__init__(self)
assert type(privkey) is bytes and len(privkey) == 32
self.privkey = privkey
self.peer_addr = peer_addr
self.proxy = MySocksProxy.from_proxy_dict(proxy)
def name(self):
return self.peer_addr.net_addr_str()
async def handshake(self):
self.reader, self.writer = await asyncio.open_connection(self.peer_addr.host, self.peer_addr.port)
if not self.proxy:
self.reader, self.writer = await asyncio.open_connection(self.peer_addr.host, self.peer_addr.port)
else:
self.reader, self.writer = await self.proxy.open_connection(self.peer_addr.host, self.peer_addr.port)
hs = HandshakeState(self.peer_addr.pubkey)
# Get a new ephemeral key
epriv, epub = create_ephemeral_key()