def get(self, count: int=1, readOnly: bool=False, recurlvl=0):
     with open(self.FILE, "r+") as file:
         portalocker.lock(file, portalocker.LOCK_EX)
         ports = []
         while len(ports) < count:
             file.seek(0)
             port = int(file.readline())
             if readOnly:
                 return port
             port += 1
             if port > self.maxPort:
                 port = self.minPort
             file.seek(0)
             file.write(str(port))
             try:
                 checkPortAvailable(("", port))
                 ports.append(port)
                 self.logger.debug("new port dispensed: {}".format(port))
             except Exception:
                 if recurlvl < self.maxportretries:
                     self.logger.debug("port {} unavailable, trying again...".
                                       format(port))
                     recurlvl += 1
                 else:
                     self.logger.debug("port {} unavailable, max retries {} "
                                       "reached".
                                       format(port, self.maxportretries))
                     raise
         return ports
Example #2
0
    def __init__(self,
                 name: str = None,
                 basedirpath: str = None,
                 client: Client = None,
                 port: int = None,
                 loop=None,
                 config=None,
                 endpointArgs=None):

        self.endpoint = None
        if port:
            checkPortAvailable(HA("0.0.0.0", port))
        Motor.__init__(self)
        self.loop = loop or asyncio.get_event_loop()
        self._eventListeners = {}  # Dict[str, set(Callable)]
        self._name = name or 'Agent'
        self._port = port

        self.config = config or getConfig()
        self.basedirpath = basedirpath or os.path.expanduser(
            self.config.baseDir)
        self.endpointArgs = endpointArgs

        # Client used to connect to Sovrin and forward on owner's txns
        self._client = client  # type: Client

        # known identifiers of this agent's owner
        self.ownerIdentifiers = {}  # type: Dict[Identifier, Identity]
def testCreateAgentDoesNotAllocatePort(tdirWithPoolTxns):
    for i in range(2):
        checkPortAvailable(HA("0.0.0.0", agentPort))
        agent = getNewAgent("Agent0", tdirWithPoolTxns, agentPort,
                            agentWallet())
        checkPortAvailable(HA("0.0.0.0", agentPort))
        agent.stop()
Example #4
0
    def __init__(self,
                 name: str=None,
                 basedirpath: str=None,
                 client: Client=None,
                 port: int=None,
                 loop=None,
                 config=None,
                 endpointArgs=None):

        self.endpoint = None
        if port:
            checkPortAvailable(HA("0.0.0.0", port))
        Motor.__init__(self)
        self.loop = loop or asyncio.get_event_loop()
        self._eventListeners = {}  # Dict[str, set(Callable)]
        self._name = name or 'Agent'
        self._port = port

        self.config = config or getConfig()
        self.basedirpath = basedirpath or os.path.expanduser(
            self.config.CLI_BASE_DIR)
        self.endpointArgs = endpointArgs

        # Client used to connect to Indy and forward on owner's txns
        self._client = client  # type: Client

        # known identifiers of this agent's owner
        self.ownerIdentifiers = {}  # type: Dict[Identifier, Identity]

        self.logger = logger
def testCreateAgentDoesNotAllocatePort(tdirWithPoolTxns):
    for i in range(2):
        checkPortAvailable(HA("0.0.0.0", agentPort))
        agent = getNewAgent("Agent0", tdirWithPoolTxns,
                            agentPort, agentWallet())
        checkPortAvailable(HA("0.0.0.0", agentPort))
        agent.stop()
Example #6
0
 def get(self, count: int = 1, readOnly: bool = False, recurlvl=0):
     with open(self.FILE, "r+") as file:
         portalocker.lock(file, portalocker.LOCK_EX)
         ports = []
         while len(ports) < count:
             file.seek(0)
             port = int(file.readline())
             if readOnly:
                 return port
             port += 1
             if port > self.maxPort:
                 port = self.minPort
             file.seek(0)
             file.write(str(port))
             try:
                 checkPortAvailable(("", port))
                 ports.append(port)
                 self.logger.debug("new port dispensed: {}".format(port))
             except Exception:
                 if recurlvl < self.maxportretries:
                     self.logger.debug(
                         "port {} unavailable, trying again...".format(
                             port))
                     recurlvl += 1
                 else:
                     self.logger.debug(
                         "port {} unavailable, max retries {} "
                         "reached".format(port, self.maxportretries))
                     raise
         return ports
Example #7
0
    def __init__(self, *args, **kwargs):

        checkPortAvailable(kwargs['ha'])
        basedirpath = kwargs.get('basedirpath')
        keep = RoadKeep(basedirpath=basedirpath,
                        stackname=kwargs['name'],
                        auto=kwargs.get('auto'),
                        baseroledirpath=basedirpath)  # type: RoadKeep
        kwargs['keep'] = keep
        localRoleData = keep.loadLocalRoleData()

        sighex = kwargs.pop('sighex', None) or localRoleData['sighex']
        if not sighex:
            (sighex, _), (prihex, _) = getEd25519AndCurve25519Keys()
        else:
            prihex = ed25519SkToCurve25519(sighex, toHex=True)
        kwargs['sigkey'] = sighex
        kwargs['prikey'] = prihex

        self.msgHandler = kwargs.pop('msgHandler', None)  # type: Callable
        # if no timeout is set then message will never timeout
        self.messageTimeout = kwargs.pop('messageTimeout', 0)

        self.raetStack = RoadStack(*args, **kwargs)

        if self.ha[1] != kwargs['ha'].port:
            error("the stack port number has changed, likely due to "
                  "information in the keep. {} passed {}, actual {}".format(
                      kwargs['name'], kwargs['ha'].port, self.ha[1]))
        self._created = time.perf_counter()
        self.coro = None

        self._conns = set()  # type: Set[str]
Example #8
0
 def chk():
     for port in ports:
         checkPortAvailable(("", port))
Example #9
0
 def chk():
     for port in ports:
         checkPortAvailable(("", port))