def fetch_sniffer_session(self, session_id): try: debug_output("Fetching session {} from memory".format(session_id)) session = self.sessions.get(ObjectId(session_id)) except Exception as e: debug_output("An {} error occurred when fetching session '{}': {}".format(type(e).__name__, session_id, e), 'error') return # if not found, recreate it from the DB if not session: debug_output("Fetching session {} from DB".format(session_id)) s = self.model.get_sniffer_session(session_id) if not s: return None # TLS interception only possible if PCAP hasn't been generated yet intercept_tls = s['intercept_tls'] and not s['pcap'] if s: session = SnifferSession(s['name'], None, None, self, id=s['_id'], filter_restore=s['filter'], intercept_tls=intercept_tls) session.pcap = s['pcap'] session.public = s['public'] session.date_created = s['date_created'] self.sessions[session.id] = session session_data = bson_loads(s['session_data']) session.nodes = session_data['nodes'] session.edges = session_data['edges'] session.packet_count = s['packet_count'] session.flows = {} for flow in session_data['flows']: f = Flow.load_flow(flow) session.flows[f.fid] = f return session