在QuickFIX接受器中自定义FIX登录过程

Mar*_*age 7 c# quickfix fix-protocol

我正在使用QuickFIX和C#来创建一个FIX接受器(服务器).我希望客户端(FIX启动器)使用用户名和密码登录.但是,我不确定如何在QuickFIX中做到这一点.

通过调试QuickFIX源代码,我发现了以下事件序列:

  • QuickFIX将调用Session::verify以验证登录.
  • Session::verify 将执行各种检查,如comp ID和序列号,并在某些时候确定收到的登录是有效的.
  • Session::verify然后将调用Application::fromAdmin回调,我认为这是自定义登录等内容的地方.
  • 但是,此时QuickFIX已经确定登录正常,并且当回调返回时,接收器将返回相应的登录消息.

如何在接受器中自定义FIX登录过程?修改QuickFIX代码是我唯一的选择吗?

Ani*_*Ani 6

如果您使用的是FIX 4.3或更高版本,则登录消息可以具有密码标记.如果您使用的是以前的版本,请将其设为自定义标记并将其添加到词典中.

fromAdmin处理程序中,检查密码是否正确(从查找表或其他位置).如果不是,则抛出RejectLogon异常.如果没有抛出此异常,QuickFix将假设一切正常并记录用户.

示例(需要更多健全性检查):

public void fromAdmin(Message message, SessionID id)
{
   var logon = message as QuickFix44.Logon;

   if (logon != null)
   {
      string userName = logon.getUserName().getValue();
      string expectedPassword = PasswordsByUser[userName];

      string suppliedPassword = logon.getPassword().getValue();

      if(expectedPassword != suppliedPassword)
          throw new RejectLogon();
   }     
}
Run Code Online (Sandbox Code Playgroud)