Example #1
0
    def HandlePing(self, sPing, sOrigin):
        """Handle incoming Ping

        Called by CRPCRequestHandler.
        Parse params-string into DOM
        Pass Ping to cOwlManager.Distribute()
        Generate Answer-Pong.
        Pass Pong to cOwlManager.Answer()

        """

        try:
            # create cDOM from ascii-Ping
            domPing = cDOM.cDOM()
            domPing.ParseString(sPing)

            # create cNetPackage from DOM-Ping
            cPing = cNetPackage.cNetPackage('ping')
            cPing.ParseDOM(domPing)

            # set originator ip
            cPing.SetOriginatorIP(sOrigin)

            # log incoming ping
            pManager.manager.DebugStr('cNetManager '+ __version__ +': Incoming Ping from %s:%s.' %(str(cPing.GetOriginator()[0]), str(cPing.GetOriginator()[1])), 2)

            # pass ping to cOwlManager. If cOwlManager accepts ping, answer with pong
            pManager.manager.DebugStr('cNetManager '+ __version__ +': Distributing Ping.', 3)
            if self.cOwlManager.Distribute(cPing) == 'okay':
                # generate Pong
                try:
                    cPong = self.GeneratePong(cPing)
                except:
                    # Could not generate Pong
                    pManager.manager.DebugStr('cNetManager '+ __version__ +': Could not generate Pong.', 2)
                    return
                # pass Pong to cOlwManager
                pManager.manager.DebugStr('cNetManager '+ __version__ +': Answering with Pong.', 3)
                self.cOwlManager.Answer(cPong)
            else:
                # something was wrong with that Ping...
                pass
        except:
            # unknown error. log and forget.
            # get exception
            eType, eValue, eTraceback = sys.exc_info()

            # build stacktrace string
            tb = ''
            for line in traceback.format_tb(eTraceback, 15):
                tb = tb + line

            pManager.manager.DebugStr('pNetwork '+ __version__ +': Unhandled error in thread HandlePing(): Type: '+str(eType)+', value: '+str(eValue), 2)
            pManager.manager.DebugStr('pNetwork '+ __version__ +': Traceback:\n'+str(tb), 2)
Example #2
0
    def GeneratePing(self):
        """Generate and return a cNetPackage object"""

        # generate ping
        cPing = cNetPackage.cNetPackage('ping')
        # set unique id
        cPing.SetID(pManager.manager.GetUniqueNumber())
        # set originator
        cPing.SetOriginatorPort(self.cNetServer.GetListenPort())
        # set iOwl-Version
        cPing.SetOwlVersion(pManager.manager.GetVersion())
        # set network protocol version
        cPing.SetProtocolVersion(self.sProtocol)
        # set ttl
        cPing.SetTTL(self.iTTL)

        return cPing