Martin Liversage Martin Liversage - 5 months ago 26
C# Question

Customizing the FIX logon process in a QuickFIX acceptor

I'm using QuickFIX and C# to create a FIX acceptor (server). I want the client (the FIX initiator) to logon using a username and password. However, I'm not sure how I can do that in QuickFIX.

By debugging into the QuickFIX source code I have discovered the following sequence of events:


  • QuickFIX will call
    Session::verify
    to verify the logon.

  • Session::verify
    will perform various checks of things like comp ID's and sequence numbers and at some point determine that the logon received is valid.

  • Session::verify
    will then call the
    Application::fromAdmin
    callback which I assume is the natural place to customize things like logon.

  • However, at this point the logon has already been determined to be OK by QuickFIX and a corresponding logon message will be returned by the acceptor when the callback returns.



How do I customize the FIX logon process in an acceptor? Is modifying the QuickFIX code my only option?

Ani Ani
Answer Source

If you are using FIX 4.3 or later, the Logon message can have a Password tag. If you are using a previous version, make it a custom tag and add it to the dictionaries.

In the fromAdmin handler, check that the password is correct (from a lookup table or elsewhere). If it is not, throw a RejectLogon exception. If this exception isn't thrown, QuickFix will assume everything is a-ok and log the user on.

Example (needs more sanity checks):

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();
   }     
}