Пример #1
0
        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}");
            }
        }
Пример #2
0
        public Service(TcpClient client, string databasePath)
        {
            myProgramBuilder = new GraphStructuredProgramBuilder();

            myClient       = client;
            myDatabasePath = databasePath;

            myResultsCache = new AnalyzesResultsCache();
            //myProgramHasChanged = true;
            myProgramLock = false;

            myQueuedCommits = new Queue <Action>();
        }
Пример #3
0
        //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());
            }
        }