示例#1
0
    def __init__(self, serverURL):
        server = IPCServerURL(serverURL)

        self.__sock = socket(AF_INET, SOCK_DGRAM)
        self.__authenticator = Authenticator(server.key)
        self.__peer = (server.host, server.port)
        self.name = server.user
示例#2
0
    def __init__(self, serverURL):
        server = IPCServerURL(serverURL)

        self.__sock = socket(AF_INET, SOCK_DGRAM)
        self.__authenticator = Authenticator(server.key)
        self.__peer = (server.host, server.port)
        self.name = server.user
示例#3
0
class InternalSocketClient:

    __sock = None
    __name = None
    __peer = (None, None) 
    
    connected = False
    broken = False

    __lastbeatSent = 0
    __lastbeatRecv = 0

    __infoHandler = None

    def __init__(self, serverURL):
        server = IPCServerURL(serverURL)

        self.__sock = socket(AF_INET, SOCK_DGRAM)
        self.__authenticator = Authenticator(server.key)
        self.__peer = (server.host, server.port)
        self.name = server.user

    def __getattr__(self, name):
        return getattr(self.__sock, name)

    # ---------- heartbeat related

    def __registerLastBeatSent(self):
        self.__lastbeatSent = time()

    def __registerLastBeatRecv(self):
        self.__lastbeatRecv = time()
        self.connected = True
        self.broken = False

    # ---------- internal mechanism dealing with outbound/inbound data

    def __sendPacket(self, packet):
        """Send a packet class to a destination using local socket."""
        s = self.__authenticator.sign(str(packet))
        try:
            self.__sock.sendto(s, self.__peer)
        except Exception,e:
            exception(e)
            self.connected = False
            self.broken = True
示例#4
0
class InternalSocketClient:

    __sock = None
    __name = None
    __peer = (None, None)

    connected = False
    broken = False

    __lastbeatSent = 0
    __lastbeatRecv = 0

    __infoHandler = None

    def __init__(self, serverURL):
        server = IPCServerURL(serverURL)

        self.__sock = socket(AF_INET, SOCK_DGRAM)
        self.__authenticator = Authenticator(server.key)
        self.__peer = (server.host, server.port)
        self.name = server.user

    def __getattr__(self, name):
        return getattr(self.__sock, name)

    # ---------- heartbeat related

    def __registerLastBeatSent(self):
        self.__lastbeatSent = time()

    def __registerLastBeatRecv(self):
        self.__lastbeatRecv = time()
        self.connected = True
        self.broken = False

    # ---------- internal mechanism dealing with outbound/inbound data

    def __sendPacket(self, packet):
        """Send a packet class to a destination using local socket."""
        s = self.__authenticator.sign(str(packet))
        try:
            self.__sock.sendto(s, self.__peer)
        except Exception, e:
            exception(e)
            self.connected = False
            self.broken = True
示例#5
0
class InternalSocketClient:

    __sock = None
    __name = None
    __peer = (None, None)

    connected = False
    broken = False

    __lastbeatSent = 0
    __lastbeatRecv = 0

    __infoHandler = None

    def __init__(self, serverURL):
        server = IPCServerURL(serverURL)

        self.__sock = socket(AF_INET, SOCK_DGRAM)
        self.__authenticator = Authenticator(server.key)
        self.__peer = (server.host, server.port)
        self.name = server.user

    def __getattr__(self, name):
        return getattr(self.__sock, name)

    # ---------- heartbeat related

    def __registerLastBeatSent(self):
        self.__lastbeatSent = time()

    def __registerLastBeatRecv(self):
        self.__lastbeatRecv = time()
        self.connected = True
        self.broken = False

    # ---------- internal mechanism dealing with outbound/inbound data

    def __sendPacket(self, packet):
        """Send a packet class to a destination using local socket."""
        s = self.__authenticator.sign(str(packet))
        self.__sock.sendto(s, self.__peer)

    def __recvBuffer(self, buf, sender):
        """Receive a buffer, unpack into packet, and dispatch it to different
        handlers. Returns buffer when unpacked is a DataPacket. Otherwise
        None."""
        # filter out traffic that's not originating from what we thought
        if sender != self.__peer: return None
        # See if is a data packet, which is special.
        buf = self.__authenticator.verify(buf)
        if not buf: return None  # signature check failed
        packet = loadBufferToPacket(buf)
        if not packet: return None
        if isinstance(packet, DataPacket): return packet.buffer

        # If not, call different handlers to handle this.
        if isinstance(packet, HeartbeatPacket):
            self.__handleHeartbeatPacket(packet)
            return None
        if isinstance(packet, InfoPacket):
            self.__handleInfoPacket(packet)
            return None

    # ---------- inner handlers for different packets

    def __handleHeartbeatPacket(self, packet):
        # heart beat reply received, answer
        if self.connected == False: debug("IPC client connected.")
        self.__registerLastBeatRecv()

    def __handleInfoPacket(self, packet):
        if self.__infoHandler: self.__infoHandler(packet)

    # ---------- public functions

    def doQuery(self, fillerFunc):
        packet = QueryPacket()
        s = fillerFunc(packet)
        if s:
            debug("Sent a query packet.")
            self.__sendPacket(packet)

    def onInfo(self, handler):
        self.__infoHandler = handler

    def close(self):
        debug("IPC socket shutting down...")
        try:
            self.__sock.close()
        except Exception, e:
            error("Error closing socket: %s" % e)
示例#6
0
class InternalSocketClient:

    __sock = None
    __name = None
    __peer = (None, None) 
    
    connected = False
    broken = False

    __lastbeatSent = 0
    __lastbeatRecv = 0

    __infoHandler = None

    def __init__(self, serverURL):
        server = IPCServerURL(serverURL)

        self.__sock = socket(AF_INET, SOCK_DGRAM)
        self.__authenticator = Authenticator(server.key)
        self.__peer = (server.host, server.port)
        self.name = server.user

    def __getattr__(self, name):
        return getattr(self.__sock, name)

    # ---------- heartbeat related

    def __registerLastBeatSent(self):
        self.__lastbeatSent = time()

    def __registerLastBeatRecv(self):
        self.__lastbeatRecv = time()
        self.connected = True
        self.broken = False

    # ---------- internal mechanism dealing with outbound/inbound data

    def __sendPacket(self, packet):
        """Send a packet class to a destination using local socket."""
        s = self.__authenticator.sign(str(packet))
        self.__sock.sendto(s, self.__peer)

    def __recvBuffer(self, buf, sender):
        """Receive a buffer, unpack into packet, and dispatch it to different
        handlers. Returns buffer when unpacked is a DataPacket. Otherwise
        None."""
        # filter out traffic that's not originating from what we thought
        if sender != self.__peer: return None
        # See if is a data packet, which is special.
        buf = self.__authenticator.verify(buf)
        if not buf: return None # signature check failed
        packet = loadBufferToPacket(buf)
        if not packet: return None
        if isinstance(packet, DataPacket): return packet.buffer

        # If not, call different handlers to handle this.
        if isinstance(packet, HeartbeatPacket):
            self.__handleHeartbeatPacket(packet)
            return None
        if isinstance(packet, InfoPacket):
            self.__handleInfoPacket(packet)
            return None

    # ---------- inner handlers for different packets

    def __handleHeartbeatPacket(self, packet):
        # heart beat reply received, answer
        if self.connected == False: debug("IPC client connected.")
        self.__registerLastBeatRecv()

    def __handleInfoPacket(self, packet):
        if self.__infoHandler: self.__infoHandler(packet)

    # ---------- public functions

    def doQuery(self, fillerFunc):
        packet = QueryPacket()
        s = fillerFunc(packet)
        if s:
            debug("Sent a query packet.")
            self.__sendPacket(packet)

    def onInfo(self, handler):
        self.__infoHandler = handler

    def close(self):
        debug("IPC socket shutting down...")
        try:
            self.__sock.close()
        except Exception,e:
            error("Error closing socket: %s" % e)