docs: private void rcvMFPExchange(CommsByteBuffer request, Conversation conversation, int requestNumber,
                                  boolean allocatedFromBufferPool, boolean partOfExchange) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "rcvMFPExchange",
                          new Object[]
                          {
                           request,
                           conversation,
                           Integer.valueOf(requestNumber),
                           Boolean.valueOf(allocatedFromBufferPool),
                           Boolean.valueOf(partOfExchange)
                          });
  
          CompHandshake ch = null;
          ConversationState convState = (ConversationState) conversation.getAttachment();
  
          // Store this connection away for MFP's benefit
          ClientConnection cc = new ServerSideConnection(conversation);
          convState.setCommsConnection(cc);
  
          // Get MFP Singleton
          try {
              ch = (CompHandshake) CompHandshakeFactory.getInstance();
  
              byte[] mfpRequestData = request.getRemaining();
  
              // Get hold of product version
              HandshakeProperties handshakeGroup = conversation.getHandshakeProperties();
              int productVersion = handshakeGroup.getMajorVersion();
  
              byte[] mfpReplyData = ch.compHandshakeData(cc, productVersion, mfpRequestData);
  
              CommsByteBuffer reply = poolManager.allocate();
              reply.wrap(mfpReplyData);
  
              conversation.send(reply,
                                JFapChannelConstants.SEG_MESSAGE_FORMAT_INFO,
                                requestNumber,
                                JFapChannelConstants.PRIORITY_HANDSHAKE,
                                true,
                                ThrottlingPolicy.BLOCK_THREAD,
                                null);
          } catch (SIException e) {
              FFDCFilter.processException(e,
                                          CLASS_NAME + ".rcvMFPExchange",
                                          CommsConstants.SERVERTRANSPORTRECEIVELISTENER_MFPEXCG_02,
                                          this);
  
              SibTr.error(tc, "COMMUNICATION_ERROR_SICO2019", e);
          } catch (Exception e1) {
              FFDCFilter.processException(e1, CLASS_NAME + ".rcvMFPExchange",
                                          CommsConstants.SERVERTRANSPORTRECEIVELISTENER_MFPEXCG_01, this);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(this, tc, "MFP unable to create CompHandshake Singleton", e1);
  
              StaticCATHelper.sendExceptionToClient(e1,
                                                    CommsConstants.SERVERTRANSPORTRECEIVELISTENER_MFPEXCG_01,
                                                    conversation, requestNumber);
          }
  
          request.release(allocatedFromBufferPool);
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "rcvMFPExchange");
      }