public virtual void ToAdmin(QuickFix.Message message, QuickFix.SessionID session)
        {
            try
            {
                logger.Debug("SND(Admin) --> type[" + message.GetType().ToString() + "] msg[" + message.ToString() + "]");
                //if (message.Header.GetField(QuickFix.Fields.Tags.MsgType) != QuickFix.Fields.MsgType.HEARTBEAT)
                //    this.Crack(message, session);
                // Complementa a mensagem de logon com a senha
                if (message.GetType() == typeof(Logon))
                {
                    Logon message2 = (Logon)message;
                    if (_channelUmdfConfig.LogonPassword != "")
                    {
                        message2.Set(new QuickFix.Fields.RawData(_channelUmdfConfig.LogonPassword));
                        message2.Set(new QuickFix.Fields.RawDataLength(_channelUmdfConfig.LogonPassword.Length));
                        if (_channelUmdfConfig.NewPassword != null && _channelUmdfConfig.NewPassword.Length > 0)
                        {
                            QuickFix.Fields.StringField newPassword = new QuickFix.Fields.StringField(925, _channelUmdfConfig.NewPassword.Trim());
                            message2.SetField(newPassword);
                        }
                    }

                    message2.Set(new QuickFix.Fields.HeartBtInt(_channelUmdfConfig.HeartBtInt));
                    message2.Set(new QuickFix.Fields.EncryptMethod(0));
                    message2.Set(new QuickFix.Fields.ResetSeqNumFlag(_channelUmdfConfig.ResetOnLogon));
                }

                logger.Debug("ToAdmin(). Session id : " + session.ToString() + " Msg: " + message.GetType().ToString());

                //if (message.getHeader().getField(MsgType.FIELD) != QuickFix.MsgType.Heartbeat)
                //    this.crack(message, session);
            }
            catch (Exception ex)
            {
                logger.Error("ToAdmin(): " + ex.Message, ex);
            }
        }
        public void CheckValidFormat()
        {
            QuickFix.DataDictionary.DataDictionary dd = new QuickFix.DataDictionary.DataDictionary();
            dd.LoadFIXSpec("FIX44");
            dd.CheckFieldsHaveValues = true;

            var goodFields = new QuickFix.Fields.StringField[] {
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Symbol, "foo"),                            // string
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Side, "2"),                                // char
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.LastQty, "123"),                           // int
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.AvgPx, "1.23"),                            // decimal
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ReportToExch, "Y"),                        // bool
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ContraTradeTime, "20011217-09:30:47.123"), // datetime
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryDate, "20030910"),                  // dateonly
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryTime, "13:20:00.123"),              // timeonly

                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Symbol, "")                                // string
            };

            foreach (var datum in goodFields)
            {
                Assert.DoesNotThrow(delegate { dd.CheckValidFormat(datum); });
            }

            var badFields = new QuickFix.Fields.StringField[]
            {
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Side, "toolong"),                // char
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.LastQty, "notint"),              // int
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.AvgPx, "notdec"),                // decimal
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ReportToExch, "notbool"),        // bool
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ContraTradeTime, "notdatetime"), // datetime
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryDate, "notdate"),         // dateonly
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryTime, "nottime")          // timeonly
            };

            foreach (var datum in badFields)
            {
                Assert.Throws(typeof(IncorrectDataFormat), delegate { dd.CheckValidFormat(datum); });
            }

            var emptyFields = new QuickFix.Fields.StringField[]
            {
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Side, ""),            // char
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.LastQty, ""),         // int
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.AvgPx, ""),           // decimal
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ReportToExch, ""),    // bool
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ContraTradeTime, ""), // datetime
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryDate, ""),     // dateonly
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryTime, "")      // timeonly
            };

            foreach (var datum in emptyFields)
            {
                Assert.Throws(typeof(IncorrectDataFormat), delegate { dd.CheckValidFormat(datum); });
            }

            // Setting change!
            dd.CheckFieldsHaveValues = false;
            foreach (var datum in emptyFields)
            {
                Assert.DoesNotThrow(delegate { dd.CheckValidFormat(datum); });
            }
        }