class PIRServerBasic(socketserver.ThreadingMixIn,socketserver.TCPServer): import os import os.path os.path lock = RLock() active_client = {} HELLO_INTERVAL = 20 TIME_TO_LIVE = 45 frameBuilder = FrameBuilder() dbLengthMB = 1 c_MB = 2**20 logging.basicConfig(level=logging.DEBUG,format='%(name)s: %(message)s',) lastReceivedQuery = "None" def __init__(self, log_name,server_address, handler_class=ThreadedRequestHandler): self.logger = logging.getLogger(log_name) self.logger.debug('__init__') self.file_savedDB = "bitArray_DB" self.b_DB = BitArray() self.loadDB() socketserver.TCPServer.__init__(self, server_address, handler_class) return def server_activate(self): self.logger.debug('server_activate') socketserver.TCPServer.server_activate(self) return def serve_forever(self, poll_interval=0.5): self.logger.debug('waiting for request') return socketserver.TCPServer.serve_forever(self) # def serve_forever(self): # self.logger.debug('waiting for request') # # self.logger.info('Handling requests, press <Ctrl-C> to quit') # while True: # self.handle_request() # return # def handle_request(self): self.logger.debug('handle_request') return socketserver.TCPServer.handle_request(self) def verify_request(self, request, client_address): # self.logger.debug('verify_request(%s, %s)', request, client_address) return socketserver.TCPServer.verify_request(self, request, client_address) def process_request_thread(self, request, client_address): # self.logger.debug('process_request_thread(%s, %s)', request, client_address) return socketserver.ThreadingMixIn.process_request_thread(self, request, client_address) def finish_request(self, request, client_address): # self.logger.debug('finish_request(%s, %s)', request, client_address) return socketserver.TCPServer.finish_request(self, request, client_address) def close_request(self, request_address): # self.logger.debug('close_request(%s)', request_address) return socketserver.TCPServer.close_request(self, request_address) def server_close(self): self.logger.debug('server_close') return socketserver.TCPServer.server_close(self) def shutdown(self): self.logger.debug('server_shutdown') return socketserver.TCPServer.shutdown(self) def activate(self,name,ipAddress,port): self.logger = logging.getLogger(name) self.logger.info("running at %s listens to port: %s ", ipAddress,port) def addClient(self,clientAddres): self.lock.acquire(blocking=True) self.active_client[self.active_client.__len__()] = (clientAddres,int(time.time()%1000000)) self.lock.release() def loadDB(self): PATH="./" + self.file_savedDB if os.path.isfile(PATH): self.logger.info( "DB File found, loading") with open(self.file_savedDB,'rb') as fileObject: self.b_DB = BitArray(bin = pickle.load(fileObject)) self.pirQuery = PIRQueryObject(1, self.b_DB.len) self.logger.info( "DB fully loaded") self.pirQuery.setDB(self.b_DB) # fileObject.close() else: self.logger.info("Either file is missing or is not readable") # open the file for writing our DB def getDBLength(self): return self.b_DB._getlength()