def run_service(soledad_sessions, port=IMAP_PORT, factory=None):
"""
Main entry point to run the service from the client.
:param soledad_sessions: a dict-like object, containing instances
of a Store (soledad instances), indexed by userid.
:returns: the port as returned by the reactor when starts listening, and
the factory for the protocol.
:rtype: tuple
"""
if not factory:
factory = LeapIMAPFactory(soledad_sessions)
try:
interface = "localhost"
# don't bind just to localhost if we are running on docker since we
# won't be able to access imap from the host
if os.environ.get("LEAP_DOCKERIZED"):
interface = ''
# TODO use Endpoints !!!
tport = reactor.listenTCP(port, factory,
interface=interface)
except CannotListenError:
log.error('IMAP Service failed to start: '
'cannot listen in port %s' % (port,))
except Exception as exc:
log.error("Error launching IMAP service: %r" % (exc,))
else:
# all good.
log.debug('IMAP4 Server is RUNNING in port %s' % (port,))
emit_async(catalog.IMAP_SERVICE_STARTED, str(port))
# FIXME -- change service signature
return tport, factory
# not ok, signal error.
emit_async(catalog.IMAP_SERVICE_FAILED_TO_START, str(port))
评论列表
文章目录