diff --git a/aiocoap/protocol.py b/aiocoap/protocol.py index b9520827..223645e9 100644 --- a/aiocoap/protocol.py +++ b/aiocoap/protocol.py @@ -22,6 +22,7 @@ import asyncio import weakref import time +from typing import Optional, List from . import defaults from .credentials import CredentialsMap @@ -161,7 +162,7 @@ async def _append_tokenmanaged_transport(self, token_interface_constructor): @classmethod @AwaitOrAenter.decorate - async def create_client_context(cls, *, loggername="coap", loop=None): + async def create_client_context(cls, *, loggername="coap", loop=None, transports: Optional[List[str]] = None): """Create a context bound to all addresses on a random listening port. This is the easiest way to get a context suitable for sending client @@ -178,8 +179,10 @@ async def create_client_context(cls, *, loggername="coap", loop=None): self = cls(loop=loop, serversite=None, loggername=loggername) + selected_transports = transports or defaults.get_default_clienttransports(loop=loop) + # FIXME make defaults overridable (postponed until they become configurable too) - for transportname in defaults.get_default_clienttransports(loop=loop): + for transportname in selected_transports: if transportname == 'udp6': from .transports.udp6 import MessageInterfaceUDP6 await self._append_tokenmanaged_messagemanaged_transport( @@ -216,7 +219,7 @@ async def create_client_context(cls, *, loggername="coap", loop=None): @classmethod @AwaitOrAenter.decorate - async def create_server_context(cls, site, bind=None, *, loggername="coap-server", loop=None, _ssl_context=None, multicast=[], server_credentials=None): + async def create_server_context(cls, site, bind=None, *, loggername="coap-server", loop=None, _ssl_context=None, multicast=[], server_credentials=None, transports: Optional[List[str]] = None): """Create a context, bound to all addresses on the CoAP port (unless otherwise specified in the ``bind`` argument). @@ -250,7 +253,9 @@ async def create_server_context(cls, site, bind=None, *, loggername="coap-server multicast_done = not multicast - for transportname in defaults.get_default_servertransports(loop=loop): + selected_transports = transports or defaults.get_default_servertransports(loop=loop) + + for transportname in selected_transports: if transportname == 'udp6': from .transports.udp6 import MessageInterfaceUDP6 diff --git a/aiocoap/transports/ws.py b/aiocoap/transports/ws.py index 80be257e..2d0170a2 100644 --- a/aiocoap/transports/ws.py +++ b/aiocoap/transports/ws.py @@ -191,7 +191,7 @@ async def create_transport(cls, tman: interfaces.TokenManager, log, loop, *, cli host, port = server_bind if port is None: port = 8683 - else: + elif port != 0: # FIXME see module documentation port = port + 3000