Esempio n. 1
0
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()