Beispiel #1
0
    def recv(self, block=True):
        """
        Read data from socket.

        :returns: bytestring containing received data.
        """
        flags = 0
        if not block:
            flags = MSG_DONTWAIT
        buf = recv_all(self.sock, self.COOKIE_LEN + 5, flags)
        if not buf:
            return None, None
        cookie, addr_type, packet_len = struct.unpack("=8sBI", buf)
        if cookie != self.COOKIE:
            logging.critical("Dispatcher socket out of sync")
            raise SCIONIOError
        port_len = 0
        if addr_type != AddrType.NONE:
            port_len = 2
        addr_len = haddr_get_type(addr_type).LEN
        # We know there is data coming, block here to avoid sync problems.
        buf = recv_all(self.sock, addr_len + port_len + packet_len, 0)
        if addr_len > 0:
            addr = buf[:addr_len]
            port = buf[addr_len:addr_len + port_len]
            sender = (str(ipaddress.ip_address(addr)), port)
        else:
            addr = ""
            port = 0
            sender = (None, None)
        packet = buf[addr_len + port_len:]
        return packet, sender
Beispiel #2
0
    def _gen_zk_entry(self, addr, port, in_docker, docker):
        if not port:
            port = DEFAULT_ZK_PORT
        if in_docker:
            # If we're in-docker, we need to set the port to not conflict with the host port
            port = port + 1

        addr = docker_host(in_docker, docker, str(ip_address(addr)))
        return {'Addr': addr, 'L4Port': port}
Beispiel #3
0
 def __init__(self, topo_config, zk_config):
     self.addr = None
     self.topo_config = topo_config
     self.zk_config = zk_config
     self.manage = self.topo_config.get("manage", False)
     if not self.manage:
         # A ZK we don't manage must have an assigned IP in the topology
         self.addr = ip_address(self.topo_config["addr"])
     self.clientPort = self._get_def("clientPort")
     self.leaderPort = self._get_def("leaderPort")
     self.electionPort = self._get_def("electionPort")
     self.maxClientCnxns = self._get_def("maxClientCnxns")
Beispiel #4
0
 def __init__(self, topo_config, zk_config):
     self.addr = None
     self.topo_config = topo_config
     self.zk_config = zk_config
     self.addr = ip_address(self.topo_config["addr"])
     self.clientPort = self._get_def("clientPort")