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)
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