docs: public static void rcvCreateBrowserSess(CommsByteBuffer request, Conversation conversation,
                                             int requestNumber, boolean allocatedFromBufferPool,
                                             boolean partOfExchange)
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(tc, "rcvCreateBrowserSess",
                                             new Object[]
                                             {
                                                request,
                                                conversation,
                                                ""+requestNumber,
                                                ""+allocatedFromBufferPool
                                              });
  
        // Obtain the state object for this conversation.
        ConversationState convState = (ConversationState)conversation.getAttachment();
  
        // Extract all the interesting bits out of the buffer we were passed.
        short connectionObjectID =        request.getShort(); // BIT16 ConnectionObjectId
        short clientSessionId =           request.getShort();
        int requestedBytes =              request.getInt();
        short destinationTypeShort =      request.getShort();
  
        boolean allowMessageGathering = false;                   //SIB0113.comms.1 start
        final HandshakeProperties handshakeProps = conversation.getHandshakeProperties();
        if (handshakeProps.getFapLevel() >= JFapChannelConstants.FAP_VERSION_9) {
          final short browserFlags = request.getShort();
  
          if (browserFlags > CommsConstants.BF_MAX_VALID)
          {
             // The flags appear to be invalid
             if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Browser flags ("+browserFlags+") > " + CommsConstants.BF_MAX_VALID);
  
             SIErrorException e = new SIErrorException(
                nls.getFormattedMessage("INVALID_PROP_SICO8017", new Object[] {""+browserFlags }, null)
             );
  
             FFDCFilter.processException(e, CLASS_NAME + ".rcvCreateBrowserSess",
                                         CommsConstants.STATICCATBROWSER_RCVCREATEBROWSERSESS_04);
  
             throw e;
          }
  
          allowMessageGathering = (browserFlags & CommsConstants.BF_ALLOW_GATHERING) != 0;
        }                                                        //SIB0113.comms.1 end
  
        SIDestinationAddress destAddr =   request.getSIDestinationAddress(conversation.getHandshakeProperties().getFapLevel());
        SelectionCriteria criteria =      request.getSelectionCriteria();
        String alternateUser =            request.getString();
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
           SibTr.debug(tc, "\nrcvCreateBrowserSess> connectionObjectID    = "+connectionObjectID+
                           "\nrcvCreateBrowserSess> clientSessionId       = "+clientSessionId+
                           "\nrcvCreateBrowserSess> requestedBytes        = "+requestedBytes+
                           "\nrcvCreateBrowserSess> destinationTypeShort  = "+destinationTypeShort+
                           "\nrcvCreateBrowserSess> allowMessageGathering = "+allowMessageGathering+
                           "\nrcvCreateBrowserSess> criteria              = "+criteria+
                           "\nrcvCreateBrowserSess> alternateUser         = "+alternateUser);
  
        // We are done with the buffer, so release it (if we can)
        request.release(allocatedFromBufferPool);
  
        // Convert from the destination type as a short to the correct enumerated value.
        DestinationType destinationType = null;
        if (destinationTypeShort != CommsConstants.NO_DEST_TYPE)
        {
           destinationType = DestinationType.getDestinationType(destinationTypeShort);
        }
  
        // Extract the Core API Connection object from the conversation state block
        SICoreConnection connection =
           ((CATConnection) convState.getObject(connectionObjectID)).getSICoreConnection();
  
        // Create the browser session.
        BrowserSession browserSession = null;
  
        try
        {
           browserSession =
                             connection.createBrowserSession(destAddr,
                                                             destinationType,
                                                             criteria,
                                                             alternateUser,
                                                             allowMessageGathering); //SIB0113.comms.1
        }
        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 + ".rcvCreateBrowserSess",
                                          CommsConstants.STATICCATBROWSER_RCVCREATEBROWSERSESS_01);
           }
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, e.getMessage(), e);
  
           StaticCATHelper.sendExceptionToClient(e,
                                                 CommsConstants.STATICCATBROWSER_RCVCREATEBROWSERSESS_01,  // d186970
                                                 conversation, requestNumber);
        }
  
        // Only continue of we successfully managed to create a browser session...
        if (browserSession != null)
        {
           // Create a main consumer object which represents the browser session and is
           // suitable for storing in the conversation state object
           CATMainConsumer mainConsumer = new CATMainConsumer(conversation, clientSessionId, browserSession);
  
           // Stash the browser session in  the conversation state object.
           try
           {
              short sessionId = (short) convState.addObject(mainConsumer);
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "browser session id = "+sessionId);
  
              // Use the CATBrowseConsumer's requestMsgs method to send a bunch of messages
              // down to the client.  Normally requestMsgs would be called when the client
              // is running low of messages on its proxy queue - however, in this case we
              // use it to "pre-load" the queue.
              mainConsumer.requestMsgs(requestNumber, 0, requestedBytes);
  
              StaticCATHelper.sendSessionCreateResponse(JFapChannelConstants.SEG_CREATE_BROWSER_SESS_R,
                                                        requestNumber,
                                                        conversation,
                                                        sessionId,
                                                        browserSession,
                                                        destAddr);
           }
           catch (ConversationStateFullException e)
           {
              FFDCFilter.processException(e, CLASS_NAME + ".rcvCreateBrowserSess",
                                          CommsConstants.STATICCATBROWSER_RCVCREATEBROWSERSESS_02);
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, e.getMessage(), e);
  
              StaticCATHelper.sendExceptionToClient(e,
                                                    CommsConstants.STATICCATBROWSER_RCVCREATEBROWSERSESS_03,  // d186970
                                                    conversation, requestNumber);
  
              // Attempt to clean up by closing the browse session we have already created.
              try
              {
                 browserSession.close();
              }
              catch (SIException coreException)
              {
                 //No FFDC code needed
                 //Only FFDC if we haven't received a meTerminated event.
                 if(!convState.hasMETerminated())
                 {
                    FFDCFilter.processException(coreException, CLASS_NAME + ".rcvCreateBrowserSess",
                                                CommsConstants.STATICCATBROWSER_RCVCREATEBROWSERSESS_03);
                 }
  
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, coreException.getMessage(), coreException);
  
                 // Can't do much here as we have already failed, so informing the client for
                 // a second time wouldn't buy us anything (and it would upset the client).
              }
           }
        }
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "rcvCreateBrowserSess");
     }