private void RestoreProgram() { var serializer = new DataContractJsonSerializer( typeof(GraphStructuredProgramBuilderState), new [] { typeof(InternalStatement), typeof(ParameterIndicesSet) }); var directory = Path.GetDirectoryName(myDatabasePath); if (directory != null) { Directory.CreateDirectory(directory); } try { using (ZipArchive zip = ZipFile.OpenRead(myDatabasePath)) { ZipArchiveEntry e = zip.GetEntry("solution.db"); var state = (GraphStructuredProgramBuilderState)serializer.ReadObject(e.Open()); myProgramBuilder = new GraphStructuredProgramBuilder(state); } } catch (FileNotFoundException exception) { Logging.Log($"Database not found: \r\n {exception.Message}"); } }
public Service(TcpClient client, string databasePath) { myProgramBuilder = new GraphStructuredProgramBuilder(); myClient = client; myDatabasePath = databasePath; myResultsCache = new AnalyzesResultsCache(); //myProgramHasChanged = true; myProgramLock = false; myQueuedCommits = new Queue <Action>(); }
//TODO: Implement message processing via attribute-based processors declaration private Response ProcessMessage(Request request) { if (!myProgramLock) { while (myQueuedCommits.Count > 0) { var commit = myQueuedCommits.Dequeue(); commit(); } } switch (request) { case TaintClassFieldRequest taintClassFieldRequest: TaintClassField(taintClassFieldRequest); return(new SuccessResponse()); case UpdateFileRequest updateFileMessage: UpdateFile(updateFileMessage); return(new SuccessResponse()); case TerminatingRequest terminatingRequest: myIsProcessing = false; SaveProgram(); return(new SuccessResponse()); case PerformAnalysisRequest performAnalysisRequest: if (!myProgramLock) { RunAnalysis(performAnalysisRequest); } return(new SuccessResponse()); case AnalysisResultsRequest analysisResultsRequest: return(GetAnalysisResults(analysisResultsRequest)); case CheckIfTaintedRequest checkIfTaintedRequest: return(new TaintedFieldsResponse(Enumerable.Empty <bool>())); case DropCachesRequest _: myProgramBuilder = new GraphStructuredProgramBuilder(); myQueuedCommits.Clear(); return(new SuccessResponse()); default: return(new FailureResponse()); } }