def crun(self, csocket): """Authenticates client and handles its jobs""" mysocket = pptransport.CSocketTransport(csocket, self.socket_timeout) #send PP version mysocket.send(version) #generate a random string srandom = "".join( [random.choice(string.ascii_letters) for i in range(16)]) mysocket.send(srandom) answer = sha_new(ppc.b_(srandom + self.secret)).hexdigest() clientanswer = ppc.str_(mysocket.receive()) if answer != clientanswer: self.logger.warning( "Authentication failed, client host=%s, port=%i" % csocket.getpeername()) mysocket.send("FAILED") csocket.close() return else: mysocket.send("OK") ctype = ppc.str_(mysocket.receive()) self.logger.debug("Control message received: " + ctype) self.ncon_add(1) try: if ctype == "STAT": #reset time at each new connection self.get_stats()["local"].time = 0.0 #open('/tmp/pp.debug', 'a+').write('STAT: \n') mysocket.send(str(self.get_ncpus())) #open('/tmp/pp.debug', 'a+').write('STAT: get_ncpus\n') while 1: mysocket.receive() #open('/tmp/pp.debug', 'a+').write('STAT: recvd\n') mysocket.send(str(self.get_stats()["local"].time)) #open('/tmp/pp.debug', 'a+').write('STAT: _\n') elif ctype == "EXEC": while 1: #open('/tmp/pp.debug', 'a+').write('EXEC: \n') sfunc = mysocket.creceive() #open('/tmp/pp.debug', 'a+').write('EXEC: '+repr((sfunc,))+'\n') sargs = mysocket.receive() #open('/tmp/pp.debug', 'a+').write('EXEC: '+repr((sargs,))+'\n') fun = self.insert(sfunc, sargs) sresult = fun(True) #open('/tmp/pp.debug', 'a+').write('EXEC: '+repr((sresult,))+'\n') mysocket.send(sresult) #open('/tmp/pp.debug', 'a+').write('EXEC: _\n') except: if self._exiting: return if pp.SHOW_EXPECTED_EXCEPTIONS: self.logger.debug( "Exception in crun method (possibly expected)", exc_info=True) self.logger.debug("Closing client socket") csocket.close() self.ncon_add(-1)
def crun(self, csocket): """ Authenticates client and handles its jobs. """ mysocket = pptransport.CSocketTransport(csocket) # send PP version mysocket.send(version) # generate a random string srandom = "".join( [random.choice(string.ascii_letters) for i in xrange(16)]) mysocket.send(srandom) answer = sha_new(srandom + self.secret).hexdigest() cleintanswer = mysocket.receive() if answer != cleintanswer: logging.warning( "Authentification failed, client host=%s, port=%i" % csocket.getpeername()) mysocket.send("FAILED") csocket.close() return else: mysocket.send("OK") ctype = mysocket.receive() logging.debug("Control message received: " + ctype) self.ncon_add(1) try: if ctype == "STAT": # reset time at each new connection self.get_stats()["local"].time = 0.0 mysocket.send(str(self.get_ncpus())) while True: mysocket.receive() mysocket.send(str(self.get_stats()["local"].time)) elif ctype == "EXEC": while True: sfunc = mysocket.creceive() sargs = mysocket.receive() fun = self.insert(sfunc, sargs) sresult = fun(True) mysocket.send(sresult) except: # print sys.excepthook(*sys.exc_info()) logging.debug("Closing client socket") csocket.close() self.ncon_add(-1)