docs: public byte[] mfpHandshakeExchange(byte[] mfpData)
        throws
           SIConnectionLostException,
           SIConnectionDroppedException,
           SIConnectionUnavailableException
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "mfpHandshakeExchange");
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.bytes(this, tc, mfpData);
  
        CommsByteBuffer request = getCommsByteBuffer();
        request.wrap(mfpData);
  
        // Pass on MFP data to server
        CommsByteBuffer reply = jfapExchange(request,
                                            JFapChannelConstants.SEG_MESSAGE_FORMAT_INFO,
                                            JFapChannelConstants.PRIORITY_MEDIUM,
                                            true);
        byte[] mfpReplyData;
  
        try
        {
           short err = reply.getCommandCompletionCode(JFapChannelConstants.SEG_MESSAGE_FORMAT_INFO);
           if (err != CommsConstants.SI_NO_EXCEPTION)
           {
              checkFor_SIConnectionLostException(reply, err);
              checkFor_SIConnectionDroppedException(reply, err);
              checkFor_SIConnectionUnavailableException(reply, err);
              checkFor_SIErrorException(reply, err);
              defaultChecker(reply, err);
           }
  
           mfpReplyData = reply.getRemaining();
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.bytes(this, tc, mfpReplyData);
        }
        finally
        {
           if (reply != null) reply.release();
        }
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "mfpHandshakeExchange");
        return mfpReplyData;
     }