Esempio n. 1
0
        private void Build(Program program)
        {
            var eventListener = new FakeDecompilerEventListener();
            var sc            = new ServiceContainer();

            sc.AddService <DecompilerEventListener>(eventListener);
            var dfa  = new DataFlowAnalysis(program, null, sc);
            var ssts = dfa.UntangleProcedures();

            foreach (Procedure proc in program.Procedures.Values)
            {
                var sst = ssts.Single(s => s.SsaState.Procedure == proc);
                var ssa = sst.SsaState;

                Coalescer coa = new Coalescer(ssa);
                coa.Transform();

                DeadCode.Eliminate(ssa);

                LiveCopyInserter lci = new LiveCopyInserter(ssa);
                lci.Transform();

                WebBuilder web = new WebBuilder(program, ssa, new Dictionary <Identifier, LinearInductionVariable>(), eventListener);
                web.Transform();

                ssa.ConvertBack(false);
            }
        }
Esempio n. 2
0
 public static IHostBuilder CreateHostBuilder(string[] args) =>
 Host.CreateDefaultBuilder(args)
 .UseSerilog()
 .ConfigureWebHostDefaults(WebBuilder =>
 {
     WebBuilder.UseStartup <Startup>();
 });
        public async Task Can_serve_embedded_files()
        {
            var embeddedFiles = new EmbeddedFileProvider(typeof(EmbeddedFileProviderTests).Assembly, "Statik.Tests.Embedded");
            var webBuilder    = new WebBuilder(new HostBuilder());

            webBuilder.RegisterFileProvider(embeddedFiles);

            using (var host = webBuilder.BuildVirtualHost())
            {
                using (var client = host.CreateClient())
                {
                    var responseMessage = await client.GetAsync("/file1.txt");

                    responseMessage.EnsureSuccessStatusCode();
                    var response = await responseMessage.Content.ReadAsStringAsync();

                    Assert.Equal("file1content", response);

                    responseMessage = await client.GetAsync("/nested/nested2/file5.txt");

                    responseMessage.EnsureSuccessStatusCode();
                    response = await responseMessage.Content.ReadAsStringAsync();

                    Assert.Equal("file5content", response);
                }
            }

            using (var host = webBuilder.BuildVirtualHost("/appbase"))
            {
                using (var client = host.CreateClient())
                {
                    var responseMessage = await client.GetAsync("/file1.txt");

                    responseMessage.EnsureSuccessStatusCode();
                    var response = await responseMessage.Content.ReadAsStringAsync();

                    Assert.Equal("file1content", response);

                    responseMessage = await client.GetAsync("/nested/nested2/file5.txt");

                    responseMessage.EnsureSuccessStatusCode();
                    response = await responseMessage.Content.ReadAsStringAsync();

                    Assert.Equal("file5content", response);
                }
            }
        }
Esempio n. 4
0
        private void Build(Program program)
        {
            var eventListener    = new FakeDecompilerEventListener();
            DataFlowAnalysis dfa = new DataFlowAnalysis(program, null, eventListener);

            dfa.UntangleProcedures();
            foreach (Procedure proc in program.Procedures.Values)
            {
                Aliases alias = new Aliases(proc, program.Architecture);
                alias.Transform();
                var          gr  = proc.CreateBlockDominatorGraph();
                SsaTransform sst = new SsaTransform(dfa.ProgramDataFlow, proc, null, gr, new HashSet <RegisterStorage>());
                SsaState     ssa = sst.SsaState;

                ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa, program.Platform);
                cce.Transform();

                DeadCode.Eliminate(proc, ssa);

                var vp = new ValuePropagator(program.Architecture, ssa, eventListener);
                vp.Transform();

                DeadCode.Eliminate(proc, ssa);

                Coalescer coa = new Coalescer(proc, ssa);
                coa.Transform();

                DeadCode.Eliminate(proc, ssa);

                LiveCopyInserter lci = new LiveCopyInserter(proc, ssa.Identifiers);
                lci.Transform();

                WebBuilder web = new WebBuilder(proc, ssa.Identifiers, new Dictionary <Identifier, LinearInductionVariable>());
                web.Transform();

                ssa.ConvertBack(false);
            }
        }
Esempio n. 5
0
        DataSet IDataService.SaveData(DataSet dataSet, string sessionId, string circulatingId, bool updateVersion)
        {
            IDataManager dm = EntityManager.FromDataSetAndBaseService(dataSet, "MyDataService");

            IEntityManager em = dm as IEntityManager;

            var log = new AspectizeTaskLoggingHelper();

            var currentSessionId = circulatingId;

            var appName = "PlayGroundRT";

            Session session = null;

            var sessions = em.GetAllInstances <Session>();

            if (sessions.Count > 0)
            {
                session = sessions[0];
            }
            else
            {
                session = dm.GetEntity <Session>(circulatingId);
            }

            if (updateVersion)
            {
                NextId nextId        = null;
                var    nextIdSession = "";

                if (currentSessionId.Contains("-"))
                {
                    var parts = currentSessionId.Split('-');

                    nextIdSession = parts[0];
                }
                else
                {
                    nextIdSession = currentSessionId;
                }

                nextId = dm.GetEntity <NextId>(nextIdSession);

                if (nextId != null)
                {
                    nextId.Version++;
                }
                else
                {
                    nextId = em.CreateInstance <NextId>();

                    nextId.Id      = session.Id;
                    nextId.Version = 1;
                }

                currentSessionId = string.Format("{0}-{1}", nextId.Id, nextId.Version);

                session.Id      = currentSessionId;
                session.Persist = true;

                session.data.AcceptChanges();
                session.data.SetAdded();
            }

            var controlInfos = WebBuilder.BuildHtml(appName, session.Html, session.JSLibrary, log);

            string jsonControlInfos = JsonSerializer.Serialize(controlInfos);

            session.HtmlControlInfoJSON = jsonControlInfos;

            IFileService fs = ExecutingContext.GetService <IFileService>("MyFileService");

            var typeInfo = fs.Read("PlayGroundRT.Types.Intellisense.txt");

            System.IO.StreamReader reader = new System.IO.StreamReader(typeInfo);
            string allTypesInfo           = reader.ReadToEnd();

            //var typeInfoString = System.Text.Encoding.UTF8.GetString(text);

            var ctrinfos = WebBuilder.BuildTypeDefinitionControl(appName, controlInfos);

            var indexControls = allTypesInfo.IndexOf("aas:'Controls'") + "aas:'Controls'".Length;

            allTypesInfo = allTypesInfo.Substring(0, indexControls) + ctrinfos + allTypesInfo.Substring(indexControls);

            var javaScriptCommandInfos = WebTypeInfo.BuildJavascriptCommandInfo(session.js);

            var serviceInfos = WebBuilder.BuildTypeDefinitionBrowserServices(javaScriptCommandInfos);

            var indexBrowserServices = allTypesInfo.IndexOf("aas:'BrowserServices'") + "aas:'BrowserServices'".Length;

            allTypesInfo = allTypesInfo.Substring(0, indexBrowserServices) + serviceInfos + allTypesInfo.Substring(indexBrowserServices);

            var clientSchema = JavascriptEntityDeclaration.Translate(session.MainJS);

            var indexContextData = allTypesInfo.IndexOf("aas:'ContextData'") + "aas:'ContextData'".Length;

            allTypesInfo = allTypesInfo.Substring(0, indexContextData) + "," + clientSchema + allTypesInfo.Substring(indexContextData);

            var jsView = WebBuilder.BuildViews(appName, session.Bindings, allTypesInfo, log);

            session.JSView = jsView;

            var jsLibrary = WebBuilder.BuildJSLibrary(appName, session.js, log);

            session.JSLibrary     = jsLibrary;
            session.Log           = log.ToString();
            session.CirculatingId = currentSessionId;

            dm.SaveTransactional();

            //Create new Entity with same id for result

            IEntityManager emResult = EntityManager.FromDataSet(DataSetHelper.Create());

            Session sessionResult = emResult.CreateInstance <Session>();

            sessionResult.Id = sessionId;

            foreach (DataColumn dc in session.data.Table.Columns)
            {
                if (dc.ColumnName != PlayGround.Session.Fields.Id)
                {
                    sessionResult.data[dc.ColumnName] = session.data[dc.ColumnName];
                }
            }

            emResult.Data.AcceptChanges();

            return(emResult.Data);
        }