Пример #1
0
 public void Setup()
 {
     arch     = new IntelArchitecture(ProcessorMode.Real);
     platform = new MsdosPlatform(null, arch);
     sigser   = new X86ProcedureSerializer(arch, new TypeLibraryLoader(platform, true), "stdapi");
     argser   = new ArgumentSerializer(sigser, arch, arch.CreateFrame(), null);
 }
Пример #2
0
        public override ProcedureSignature Deserialize(SerializedSignature ss, Core.Frame frame)
        {
            if (ss == null)
            {
                return(null);
            }
            var        argser = new ArgumentSerializer(this, Architecture, frame, ss.Convention);
            Identifier ret    = null;

            if (ss.ReturnValue != null)
            {
                ret = argser.DeserializeReturnValue(ss.ReturnValue);
            }

            var args = new List <Identifier>();

            this.gr = 0;
            if (ss.Arguments != null)
            {
                for (int iArg = 0; iArg < ss.Arguments.Length; ++iArg)
                {
                    var        sArg = ss.Arguments[iArg];
                    Identifier arg  = DeserializeArgument(argser, sArg);
                    args.Add(arg);
                }
            }

            var sig = new ProcedureSignature(ret, args.ToArray());

            return(sig);
        }
Пример #3
0
        public void Setup()
        {
            this.sc = new ServiceContainer();
            sc.AddService <IFileSystemService>(new FileSystemServiceImpl());
            this.arch     = new X86ArchitectureReal("x86-real-16");
            this.platform = new MsdosPlatform(sc, arch);

            ArgumentSerializer argSer = new ArgumentSerializer(arch);

            svc = new SerializedService
            {
                Name        = "msdos_ioctl_get_device_info",
                SyscallInfo = new SyscallInfo_v1
                {
                    Vector         = "21",
                    RegisterValues = new[] {
                        new SerializedRegValue("ah", "44"),
                        new SerializedRegValue("al", "00"),
                    }
                },
                Signature = new SerializedSignature
                {
                    ReturnValue = argSer.Serialize(
                        new Identifier("C", PrimitiveType.Bool,
                                       new FlagGroupStorage(Registers.eflags, (uint)FlagM.CF, "C", PrimitiveType.Byte)))
                }
            };
        }
Пример #4
0
        public ProcedureSignature Deserialize(SerializedSignature ss, Frame frame)
        {
            ArgumentSerializer argser = new ArgumentSerializer(this, arch, frame);
            Identifier         ret    = null;

            if (ss.ReturnValue != null)
            {
                ret = argser.Deserialize(ss.ReturnValue);
            }
            ArrayList args = new ArrayList();

            if (ss.Arguments != null)
            {
                foreach (SerializedArgument arg in ss.Arguments)
                {
                    args.Add(argser.Deserialize(arg));
                }
            }
            ProcedureSignature sig = new ProcedureSignature(
                ret, (Identifier [])args.ToArray(typeof(Identifier)));

            ApplyConvention(ss, sig);

            return(sig);
        }
        public void Boolean_property_with_no_value_is_set_to_true_by_default()
        {
            var serializer = new ArgumentSerializer();

            var result = serializer.Deserialize<TestArgs1>(@"-switch");
            Assert.IsNotNull(result);
            Assert.IsTrue(result.Switch);
        }
        public void Filename()
        {
            var serializer = new ArgumentSerializer();

            var result = serializer.Deserialize<TestArgs1>(@"-switch -genericstring=blah C:\filename.txt");
            Assert.IsNotNull(result);
            Assert.IsTrue(result.Switch);
            Assert.AreEqual("blah", result.GenericString);
        }
Пример #7
0
        public override ProcedureSignature Deserialize(SerializedSignature ss, Frame frame)
        {
            if (ss == null)
            {
                return(null);
            }
            this.argser = new ArgumentSerializer(this, Architecture, frame, ss.Convention);
            Identifier ret      = null;
            int        fpuDelta = FpuStackOffset;

            FpuStackOffset = 0;
            if (ss.ReturnValue != null)
            {
                ret       = argser.DeserializeReturnValue(ss.ReturnValue);
                fpuDelta += FpuStackOffset;
            }

            FpuStackOffset = 0;
            var args = new List <Identifier>();

            if (ss.Arguments != null)
            {
                if (ss.Convention == "pascal")
                {
                    for (int iArg = ss.Arguments.Length - 1; iArg >= 0; --iArg)
                    {
                        var sArg = ss.Arguments[iArg];
                        var arg  = DeserializeArgument(sArg, iArg, ss.Convention);
                        args.Add(arg);
                    }
                    args.Reverse();
                }
                else
                {
                    for (int iArg = 0; iArg < ss.Arguments.Length; ++iArg)
                    {
                        var sArg = ss.Arguments[iArg];
                        var arg  = DeserializeArgument(sArg, iArg, ss.Convention);
                        args.Add(arg);
                    }
                }
                fpuDelta -= FpuStackOffset;
            }
            FpuStackOffset = fpuDelta;
            var sig = new ProcedureSignature(ret, args.ToArray());

            ApplyConvention(ss, sig);
            return(sig);
        }
Пример #8
0
        public void Setup()
        {
            svc                               = new SerializedService();
            svc.Name                          = "msdos_ioctl_get_device_info";
            svc.SyscallInfo                   = new SerializedSyscallInfo();
            svc.SyscallInfo.Vector            = "21";
            svc.SyscallInfo.RegisterValues    = new SerializedRegValue[2];
            svc.SyscallInfo.RegisterValues[0] = new SerializedRegValue("ah", "44");
            svc.SyscallInfo.RegisterValues[1] = new SerializedRegValue("al", "00");
            svc.Signature                     = new SerializedSignature();
            ArgumentSerializer argSer = new ArgumentSerializer(null, arch, null, null);

            svc.Signature.ReturnValue = argSer.Serialize(new Identifier("C", PrimitiveType.Bool,
                                                                        new FlagGroupStorage((uint)FlagM.CF, "C", PrimitiveType.Byte)));
        }
Пример #9
0
        public void PCEFromClientCall()
        {
            string filePath = "C:\\workspace\\FX_Project\\MTM_test\\strip_test\\Strip2\\xxx.xml";
            string outPath  = "C:\\workspace\\FX_Project\\MTM_test\\strip_test\\Strip2\\blob.xml";
            string result   = null;
            ArgumentContainer <string, object> argumentList = new ArgumentContainer <string, object>();

            try
            {
                //deserialize from file
                argumentList = ArgumentSerializer.Deserialize(LoadXMLFileToString(filePath));

                var settleDates   = ArrayOrItemToList <DateTime>((Array)argumentList["SettleDate"]);
                var recAmounts    = ArrayOrItemToList <decimal>((Array)argumentList["RecAmount"]);
                var recCurrencies = ArrayOrItemToList <string>((Array)argumentList["RecCurrency"]);
                var payAmounts    = ArrayOrItemToList <decimal>((Array)argumentList["PayAmount"]);
                var payCurrencies = ArrayOrItemToList <string>((Array)argumentList["PayCurrency"]);

                DateTime evaluationDate         = (DateTime)argumentList["EvaluationDate"];
                String   pceCalculationCurrency = (string)argumentList["PCECalculationCurrency"];

                ITrade[] trades = ToMultipleFxForwardTrades(settleDates.ToArray(), recAmounts.ToArray(), recCurrencies.ToArray(), payAmounts.ToArray(),
                                                            payCurrencies.ToArray());
                result = BrTradeBlobReaderHelper.SaveTradeBlob(trades);

                //save result
                //write output
                using (FileStream fs = new FileStream(outPath, FileMode.Create, FileAccess.Write))
                {
                    using (StreamWriter sw = new StreamWriter(fs))
                    {
                        sw.WriteLine(result);
                    }
                }
            }
            catch (Exception e)
            {
                //do nothing
            }

            Assert.IsTrue(true);
        }
Пример #10
0
        private Identifier DeserializeArgument(ArgumentSerializer argser, Argument_v1 sArg)
        {
            Identifier arg;

            if (sArg.Kind != null)
            {
                return(sArg.Kind.Accept(argser));
            }

            var dtArg = sArg.Type.Accept(TypeLoader);
            var prim  = dtArg as PrimitiveType;

            //if (prim != null && prim.Domain == Domain.Real)
            //{
            //    if (this.fr > 8)
            //    {
            //        arg = argser.Deserialize(sArg, new StackVariable_v1());
            //    }
            //    else
            //    {
            //        arg = argser.Deserialize(sArg, new Register_v1("f" + this.fr));
            //        ++this.fr;
            //    }
            //    return arg;
            //}
            if (dtArg.Size <= 4)
            {
                if (this.gr > 3)
                {
                    arg = argser.Deserialize(sArg, new StackVariable_v1());
                }
                else
                {
                    arg = argser.Deserialize(sArg, new Register_v1("r" + gr));
                    ++this.gr;
                }
                return(arg);
            }
            if (dtArg.Size <= 8)
            {
                if (this.gr > 9)
                {
                    arg = argser.Deserialize(sArg, new StackVariable_v1());
                }
                else
                {
                    if ((gr & 1) == 0)
                    {
                        ++gr;
                    }
                    arg = argser.Deserialize(sArg, new SerializedSequence
                    {
                        Registers = new Register_v1[] {
                            new Register_v1("r" + gr),
                            new Register_v1("r" + (gr + 1))
                        }
                    });
                    gr += 2;
                }
                return(arg);
            }
            throw new NotImplementedException();
        }
Пример #11
0
 public void Setup()
 {
     argser = new ArgumentSerializer(null);
 }
Пример #12
0
        protected override bool ActionBody(BaseProcess action)
        {
            bool isProcessed = true;

            try {
                messageGenerator = GetService <IMercuryMessageBodyGenerator>();

                int  pageSize     = GetValue <int>(ARG_PAGE_SIZE);
                int  pageCount    = GetValue <int>(ARG_PAGE_COUNT);
                int  pageStart    = GetValue <int>(ARG_PAGE_START);
                Guid enterpriseId = GetValue <Guid>(ARG_PAGE_ENTERPRISE_ID);
                operationName = GetValue <string>(ARG_OPERATION_NAME);
                mercuryLogin  = GetValue <string>(ARG_MERCURY_LOGIN);
                string suffix    = GetValue <string>(ARG_SUFFIX);
                int?   iteration = GetValue <int?>(ARG_ITERATION);

                DateTimeOffset?beginDate = GetValue <DateTimeOffset?>(ARG_BEGIN_DATE);
                DateTimeOffset?endDate   = GetValue <DateTimeOffset?>(ARG_END_DATE);

                LocalContext.SaveLog($"{MoscowDateTimeOffset().ToString()} Начало формирования запросов в систему Меркурий.");

                #region Проверка параметров
                if (pageCount <= 0)
                {
                    isProcessed = false;
                    LocalContext.SaveLog($" Количество страниц должно быть > 0.");
                    AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.RTE_MAKE_REQUEST, "Количество страниц должно быть > 0");
                }
                if (pageSize <= 0)
                {
                    isProcessed = false;
                    LocalContext.SaveLog($" Размер страниц должно быть > 0.");
                    AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.RTE_MAKE_REQUEST, "Размер страниц должно быть > 0");
                }
                if (pageStart <= 0)
                {
                    isProcessed = false;
                    LocalContext.SaveLog($" Начальная страница должна быть > 0.");
                    AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.RTE_MAKE_REQUEST, "Начальная страница должна быть > 0");
                }
                Document enterpriseDoc = LocalReader.LoadDocumentByType(enterpriseId, "Enterprise");

                string enterpriseGUID = (string)enterpriseDoc["GUID"];
                string enterpriseCode = (string)enterpriseDoc["Code"];

                if (enterpriseDoc == null)
                {
                    isProcessed = false;
                    AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.VALID_NO_ENTERPRISE, $"Не найдена площадка с ИД {enterpriseId.ToString()}/{enterpriseId.ToStringNumber()}");
                    LocalContext.SaveLog($" Не найдена площадка с ИД {enterpriseId.ToString()}/{enterpriseId.ToStringNumber()}.");
                }
                #endregion

                if (isProcessed)
                {
                    List <StepContext> steps = new List <StepContext>();
                    LocalContext.SaveLog($" Площадка для формирования запросов {enterpriseCode}.");
                    LocalContext.SaveLog($" Стартовая страница {pageStart}, количество страниц для получения {pageCount}, размер страницы {pageSize}.");
                    for (int i = 0; i < pageCount; i++)
                    {
                        LocalContext.SaveLog($" Формирование страницы {(i + pageStart - 1) * pageSize} - {(i + pageStart) * pageSize}.");

                        StepContext requestContext = CreateStep(QueryId, MQSOperationType.COMMUNICATE);
                        requestContext.MercuryQueueStep.Status = MQSStatus.NEW;
                        if (iteration.HasValue)
                        {
                            requestContext.MercuryQueueStep.StepId = "0.0_" + iteration.Value.ToString("D3");
                        }
                        else
                        {
                            requestContext.MercuryQueueStep.StepId = "0.0";
                        }
                        requestContext.MercuryQueueStep.StepNo         = LocalContext.MercuryQueueStep.StepNo + 1;
                        requestContext.MercuryQueueStep.StepName       = Consts.STEP_NAME_MERCURY_COMMUNICATE;
                        requestContext.MercuryQueueStep.Description    = "Сформирован запрос";
                        requestContext.MercuryQueueStep.OperationGroup = Consts.OP_GROUP_CHECK_FOR_COMPLETED_OUTBOUND + suffix;
                        requestContext.GenerateFileNames(operationName);
                        var req = GenerateRequest(i + pageStart, pageSize, LocalContext.MercurySettings, mercuryLogin,
                                                  enterpriseGUID, enterpriseCode, beginDate, endDate);
                        requestContext.SaveRequest(req);
                        var args = new Dictionary <string, ActionArgument>();
                        args.Add("PageNo", new ActionArgument(typeof(int), "PageNo", i));
                        requestContext.MercuryQueueStep.Parameters = ArgumentSerializer.SerializeArguments(args);
                        steps.Add(requestContext);
                        LocalContext.SaveLog($" Страница {i + pageStart - 1} сформирована.");
                    }

                    // Сохранение информации о сгенерированных запросах
                    using (IDatabaseConnector connector = GetService <IDatabaseConnector>()) {
                        IMercuryQueueStepService transactionPersist = this.GetService <IMercuryQueueStepService>(connector);
                        transactionPersist.RegisterSteps(steps);
                        transactionPersist.SaveFinish(LocalContext.MercuryQueueStep.Id, MQSStatus.COMPLETE, "Выполнено формирование запросов.", DateTimeOffset.UtcNow);
                        connector.Commit();
                        breakAutosave = true;
                        SetValue("Status", MQSStatus.COMPLETE);
                    }
                }
                else
                {
                    LocalContext.SaveLog($" Заданы не все параметры для формирования запроса(-ов).");
                    LocalContext.SaveLog($" Операция отменена.");
                    ResultDescription = "Ошибка. Не верные параметры.";
                }
            } catch (Exception e) {
                isProcessed = false;
                AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_MIP, UserErrorConsts.StockList.RTE_MAKE_REQUEST, UserErrorConsts.DEFAULT_LAS_SUPPRT_ERROR);
                ResultDescription = "Ошибка процесса формирования запросов в систему 'Меркурий'.";
                LocalContext.SaveLog(e.ToString());
            }
            LocalContext.SaveLog($"{MoscowDateTimeOffset().ToString()} Окончание формирования запросов в систему 'Меркурий'.");
            return(isProcessed);
        }