URI: 
       ttrustedcoin: longer timeout for server signing - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 1cfac928f9c6f0dec327c261afef26486e226c20
   DIR parent 9b0773cf2bf139eafe4a828c8964461d34ea9e23
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Mon, 25 Mar 2019 23:36:52 +0100
       
       ttrustedcoin: longer timeout for server signing
       
       fixes #5221
       
       Diffstat:
         M electrum/network.py                 |       9 ++++++---
         M electrum/plugins/trustedcoin/qt.py  |      12 ++++++------
         M electrum/plugins/trustedcoin/trust… |      17 +++++++++++++----
         M electrum/util.py                    |       2 ++
       
       4 files changed, 27 insertions(+), 13 deletions(-)
       ---
   DIR diff --git a/electrum/network.py b/electrum/network.py
       t@@ -1159,7 +1159,9 @@ class Network(PrintError):
                    await asyncio.sleep(0.1)
        
            @classmethod
       -    async def _send_http_on_proxy(cls, method: str, url: str, params: str = None, body: bytes = None, json: dict = None, headers=None, on_finish=None):
       +    async def _send_http_on_proxy(cls, method: str, url: str, params: str = None,
       +                                  body: bytes = None, json: dict = None, headers=None,
       +                                  on_finish=None, timeout=None):
                async def default_on_finish(resp: ClientResponse):
                    resp.raise_for_status()
                    return await resp.text()
       t@@ -1169,7 +1171,7 @@ class Network(PrintError):
                    on_finish = default_on_finish
                network = cls.get_instance()
                proxy = network.proxy if network else None
       -        async with make_aiohttp_session(proxy) as session:
       +        async with make_aiohttp_session(proxy, timeout=timeout) as session:
                    if method == 'get':
                        async with session.get(url, params=params, headers=headers) as resp:
                            return await on_finish(resp)
       t@@ -1193,7 +1195,8 @@ class Network(PrintError):
                else:
                    loop = asyncio.get_event_loop()
                coro = asyncio.run_coroutine_threadsafe(cls._send_http_on_proxy(method, url, **kwargs), loop)
       -        return coro.result(5)
       +        # note: _send_http_on_proxy has its own timeout, so no timeout here:
       +        return coro.result()
        
            # methods used in scripts
            async def get_peers(self):
   DIR diff --git a/electrum/plugins/trustedcoin/qt.py b/electrum/plugins/trustedcoin/qt.py
       t@@ -67,12 +67,12 @@ class HandlerTwoFactor(QObject, PrintError):
                    return
                window = self.window.top_level_window()
                auth_code = self.plugin.auth_dialog(window)
       -        try:
       -            wallet.on_otp(tx, auth_code)
       -        except:
       -            on_failure(sys.exc_info())
       -            return
       -        on_success(tx)
       +        WaitingDialog(parent=window,
       +                      message=_('Waiting for TrustedCoin server to sign transaction...'),
       +                      task=lambda: wallet.on_otp(tx, auth_code),
       +                      on_success=lambda *args: on_success(tx),
       +                      on_error=on_failure)
       +
        
        class Plugin(TrustedCoinPlugin):
        
   DIR diff --git a/electrum/plugins/trustedcoin/trustedcoin.py b/electrum/plugins/trustedcoin/trustedcoin.py
       t@@ -136,7 +136,7 @@ class TrustedCoinCosignerClient(PrintError):
                except:
                    return await resp.text()
        
       -    def send_request(self, method, relative_url, data=None):
       +    def send_request(self, method, relative_url, data=None, *, timeout=None):
                network = Network.get_instance()
                if not network:
                    raise ErrorConnectingServer('You are offline.')
       t@@ -148,9 +148,17 @@ class TrustedCoinCosignerClient(PrintError):
                    headers['user-agent'] = self.user_agent
                try:
                    if method == 'get':
       -                response = Network.send_http_on_proxy(method, url, params=data, headers=headers, on_finish=self.handle_response)
       +                response = Network.send_http_on_proxy(method, url,
       +                                                      params=data,
       +                                                      headers=headers,
       +                                                      on_finish=self.handle_response,
       +                                                      timeout=timeout)
                    elif method == 'post':
       -                response = Network.send_http_on_proxy(method, url, json=data, headers=headers, on_finish=self.handle_response)
       +                response = Network.send_http_on_proxy(method, url,
       +                                                      json=data,
       +                                                      headers=headers,
       +                                                      on_finish=self.handle_response,
       +                                                      timeout=timeout)
                    else:
                        assert False
                except TrustedCoinException:
       t@@ -219,7 +227,8 @@ class TrustedCoinCosignerClient(PrintError):
                    'otp': otp,
                    'transaction': transaction
                }
       -        return self.send_request('post', 'cosigner/%s/sign' % quote(id), payload)
       +        return self.send_request('post', 'cosigner/%s/sign' % quote(id), payload,
       +                                 timeout=60)
        
            def transfer_credit(self, id, recipient, otp, signature_callback):
                """
   DIR diff --git a/electrum/util.py b/electrum/util.py
       t@@ -953,6 +953,8 @@ def make_aiohttp_session(proxy: Optional[dict], headers=None, timeout=None):
                headers = {'User-Agent': 'Electrum'}
            if timeout is None:
                timeout = aiohttp.ClientTimeout(total=10)
       +    elif isinstance(timeout, (int, float)):
       +        timeout = aiohttp.ClientTimeout(total=timeout)
            ssl_context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=ca_path)
        
            if proxy: