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");
    }
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 ( ) ; ClientConnection cc = new ServerSideConnection ( conversation ) ; convState . setCommsConnection ( cc ) ; try { ch = ( CompHandshake ) CompHandshakeFactory . getInstance ( ) ; byte [ ] mfpRequestData = request . getRemaining ( ) ; 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" ) ; }
Pass information from MFP on the client to MFP on the server. This will only be called by
comms when it receives a segment indicating that MFP has passed a WsByteBuffer of information
to be passed along to MFP.

@param request
@param conversation
@param requestNumber
@param allocatedFromBufferPool
@param partOfExchange