docs: public static void rcvCreateDurableSub(CommsByteBuffer request, Conversation conversation,
                                            int requestNumber,
                                            boolean allocatedFromBufferPool,
                                            boolean partOfExchange)
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(tc, "rcvCreateDurableSub",
                                             new Object[]
                                             {
                                                request,
                                                conversation,
                                                ""+requestNumber,
                                                ""+allocatedFromBufferPool
                                              });
  
        ConversationState convState = (ConversationState) conversation.getAttachment();
  
        short connectionObjectID = request.getShort();  // BIT16 ConnectionObjectId
        short consumerFlags = request.getShort();       // BIT16 Consumer Flags
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
        {
           SibTr.debug(tc, "ConnectionObjectId:", connectionObjectID);
           SibTr.debug(tc, "ConsumerFlags:", consumerFlags);
        }
  
        /**************************************************************/
        /* Consumer flags                                             */
        /**************************************************************/
        // Check if the flags are valid
        if (consumerFlags > 0x07)
        {
           // The flags appear to be invalid
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Consumer flags ("+consumerFlags+") > 0x07");
  
           SIErrorException e = new SIErrorException(
              nls.getFormattedMessage("INVALID_PROP_SICO8014", new Object[] {""+consumerFlags }, null)
           );
  
           FFDCFilter.processException(e, CLASS_NAME + ".rcvCreateDurableSub",
                                       CommsConstants.STATICCATSUBSCRIPTION_CREATE_03);
        }
  
        boolean noLocal                  = (consumerFlags & 0x02) != 0;
        boolean supportMultipleConsumers = (consumerFlags & 0x04) != 0;
  
        /**************************************************************/
        /* Destination Info                                           */
        /**************************************************************/
        SIDestinationAddress destAddress = request.getSIDestinationAddress(conversation.getHandshakeProperties().getFapLevel());
  
        /**************************************************************/
        /* Subscription Name                                          */
        /**************************************************************/
        String subscriptionName = request.getString();
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Subscription Name:", subscriptionName);
  
        /**************************************************************/
        /* Subscription Home                                          */
        /**************************************************************/
        String subscriptionHome = request.getString();
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Subscription Home:", subscriptionHome);
  
        /**************************************************************/
        /* SelectionCriteria                                          */
        /**************************************************************/
        SelectionCriteria criteria = request.getSelectionCriteria();
  
        SICoreConnection connection =
           ((CATConnection) convState.getObject(connectionObjectID)).getSICoreConnection();
  
        /**************************************************************/
        /* Alternate User Id                                          */
        /**************************************************************/
        String alternateUser = request.getString();
  
        try
        {
           connection.createDurableSubscription(subscriptionName,
                                                subscriptionHome,
                                                destAddress,
                                                criteria,
                                                supportMultipleConsumers,
                                                noLocal,
                                                alternateUser);
  
           try
           {
              conversation.send(poolManager.allocate(),
                                JFapChannelConstants.SEG_CREATE_DURABLE_SUB_R,
                                requestNumber,
                                JFapChannelConstants.PRIORITY_MEDIUM,
                                true,
                                ThrottlingPolicy.BLOCK_THREAD,
                                null);
           }
           catch (SIException e)
           {
              FFDCFilter.processException(e,
                                          CLASS_NAME + ".rcvCreateDurableSub",
                                          CommsConstants.STATICCATSUBSCRIPTION_CREATE_01);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, e.getMessage(), e);
  
              SibTr.error(tc, "COMMUNICATION_ERROR_SICO2025", e);
           }
        }
        catch (SINotAuthorizedException e)
        {
           // No FFDC Code Needed
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, e.getMessage(), e);
  
           StaticCATHelper.sendExceptionToClient(e,
                                                 null,
                                                 conversation, requestNumber);
        }
        catch (SIException e)
        {
           //No FFDC code needed
           //Only FFDC if we haven't received a meTerminated event.
           if(!convState.hasMETerminated())
           {
              FFDCFilter.processException(e,
                                          CLASS_NAME + ".rcvCreateDurableSub",
                                          CommsConstants.STATICCATSUBSCRIPTION_CREATE_02);
           }
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, e.getMessage(), e);
  
           StaticCATHelper.sendExceptionToClient(e,
                                                 CommsConstants.STATICCATSUBSCRIPTION_CREATE_02,        // d186970
                                                 conversation, requestNumber);                          // f172297
  
        }
  
        request.release(allocatedFromBufferPool);
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "rcvCreateDurableSub");
     }