docs: protected void initiateCommsHandshakingImpl(final boolean serverMode, final ConversationUsageType usageType)
        throws SIConnectionLostException, SIConnectionDroppedException
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "initiateCommsHandshakingImpl",
                                             new Object[] {Boolean.valueOf(serverMode), usageType});
  
        // Get the conversation state and the Handshake group object from it
        // This group will hold all the information that is negotiated.
        final CATHandshakeProperties handshakeProperties = new CATHandshakeProperties();
  
        // Get the connection info so we can return that in any NLS messages
        String connectionInfo = "Unknown";
        CommsConnection cConn = getCommsConnection();
        if (cConn != null) connectionInfo = cConn.getConnectionInfo();
        
        // At this point we can work out the client capabilities
        short capabilities = getClientCapabilities();
  
        // Check the heartbeats are not being overriden by the SIB properties file
        short heartBeatInterval = (short)
           CommsUtils.getRuntimeIntProperty(CommsConstants.HEARTBEAT_INTERVAL_KEY,
                                            ""+getConversation().getHeartbeatInterval());
  
        short heartBeatTimeout = (short)
           CommsUtils.getRuntimeIntProperty(CommsConstants.HEARTBEAT_TIMEOUT_KEY,
                                            ""+getConversation().getHeartbeatTimeout());
        
        // Get the current FAP level, overriding from SIB properties if required
        short currentFapLevel = (short) 
                          CommsUtils.getRuntimeIntProperty(CommsConstants.CLIENT_FAP_LEVEL_KEY,
                                                           ""+CommsConstants.CURRENT_FAP_VERSION);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Client is FAP Level: " + currentFapLevel);
  
        // Build Handshaking Message consisting of:
        //
        //  Handshake Type                 0x01    Client
        //                                 0x02    ME - ME
        //
        // Then follows named fields which have a BIT16 ID, BIT16 Length and then data.
        // Each field requires 4 + length of storage. Not all fields are sent up as part
        // of the client / server handshake.
        //
        // Storage  | Details
        // ----------------------------
        //  6       |  Product Version      id=0x0001
        //  6       |  FAP Level            id=0x0002
        //  12      |  MaximumMessageSize   id=0x0003
        //  8       |  MaxumumTXSize        id=0x0004
        //  6       |  HeartbeatInterval    id=0x0005
        //  6       |  HeartbeatTimeout     id=0x000D (FAP 3 and higher only)
        //  6       |  Capabilities         id=0x0007 0x0001    Transactions are supported
        //          |                                 0x0002    Reliable messages supported
        //          |                                 0x0004    Assured messages supported
        //          |                                 0x00
        //          |                                 0xFFF8    Reserved
        //
        //  6       |  Product Id           id=0x000B 0x0001   Jetstream
        //          |                                 0x0002   WebSphere MQ
        //          |                                 0x0002   .NET
        //  36      |  Supported FAPS       id=0x000C 32 byte bit map with a 1 bit dentoting a
        //          |                                 supported level of the FAP.  Big-endian with
        //          |                                 LSB = FAP level 0.  This is only present on FAP
        //          |                                 level 3 and higher.
        //  4       |  Usage Type           id=0x000E Optional field which indicates how the conversation which initiated this handshake is to be used.
        //  4 + len |  Cell Name            id=0x000F The name of the WAS cell associated with this process if it is running in a server environment. Not sent if null.
        //  4 + len |  Node Name            id=0x0010 The name of the WAS node associated with this process if it is running in a server environment. Not sent if null.
        //  4 + len |  Server Name          id=0x0011 The name of the WAS server associated with this process if it is running in a server environment. Not sent if null.
        //  4 + len |  Cluster Name         id=0x0012 The name of the WAS cluster associated with this process if it is running in a server environment. Not sent if null.
        //
        // ----------------------------
  
        CommsByteBuffer hBuf = getCommsByteBuffer();
        
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "----- Sending the following handshake data ------");
  
        // Handshake type
        if (serverMode)
        {
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Handshake type    : ME");
           hBuf.put(CommsConstants.HANDSHAKE_ME);
        }
        else
        {
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Handshake type    : CLIENT");
           hBuf.put(CommsConstants.HANDSHAKE_CLIENT);
        }
  
        // Product Version
        byte productMajor = (byte) SIMPConstants.API_MAJOR_VERSION;
        byte productMinor = (byte) SIMPConstants.API_MINOR_VERSION;
  
        hBuf.putShort(CommsConstants.FIELDID_PRODUCT_VERSION);
        hBuf.putShort(2);
        hBuf.put(productMajor);
        hBuf.put(productMinor);
        handshakeProperties.setMajorVersion(productMajor);
        handshakeProperties.setMinorVersion(productMinor);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Product Version   : " + productMajor + "." + productMinor);
  
        // FAP version
        hBuf.putShort(CommsConstants.FIELDID_FAP_LEVEL);
        hBuf.putShort(2);
        hBuf.putShort(currentFapLevel);
        handshakeProperties.setFapLevel(currentFapLevel);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " FAP Version       : " + currentFapLevel);
  
        // Max Message Size
        hBuf.putShort(CommsConstants.FIELDID_MAX_MESSAGE_SIZE);
        hBuf.putShort(8);
        hBuf.putLong(CommsConstants.MAX_MESSAGE_SIZE);
        handshakeProperties.setMaxMessageSize(CommsConstants.MAX_MESSAGE_SIZE);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Max Msg Size      : " + CommsConstants.MAX_MESSAGE_SIZE);
  
        // Max transmission size
        hBuf.putShort(CommsConstants.FIELDID_MAX_TRANSMISSION_SIZE);
        hBuf.putShort(4);
        hBuf.putInt(CommsConstants.MAX_TRANSMISSION_SIZE);
        handshakeProperties.setMaxTransmissionSize(CommsConstants.MAX_TRANSMISSION_SIZE);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Max Tx Size       : " + CommsConstants.MAX_TRANSMISSION_SIZE);
  
        // Heartbeat Interval
        hBuf.putShort(CommsConstants.FIELDID_HEARTBEAT_INTERVAL);
        hBuf.putShort(2);
        hBuf.putShort(heartBeatInterval);
        handshakeProperties.setHeartbeatInterval(heartBeatInterval);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Heartbeat Interval: " + heartBeatInterval);
        
        // Heartbeat timeout - only FAP 4 and above
        if (currentFapLevel >= JFapChannelConstants.FAP_VERSION_5)
        {
           hBuf.putShort(CommsConstants.FIELDID_HEARTBEAT_TIMEOUT);
           hBuf.putShort(2);
           hBuf.putShort(heartBeatTimeout);
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Heartbeat Timeout : " + heartBeatTimeout);
        }
        // Always set it in the handshake properties even if we didn't negotiate it
        handshakeProperties.setHeartbeatTimeout(heartBeatTimeout);
  
        // Put the capabilities
        hBuf.putShort(CommsConstants.FIELDID_CAPABILITIES);
        hBuf.putShort(2);
        hBuf.putShort(capabilities);
        handshakeProperties.setCapabilites(capabilities);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Capabilities      : 0x" + Integer.toHexString(capabilities));
  
        // Product Id
        hBuf.putShort(CommsConstants.FIELDID_PRODUCT_ID);
        hBuf.putShort(2);
        hBuf.putShort(CommsConstants.PRODUCT_ID_JETSTREAM);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Product Id        : 0x" + Integer.toHexString(CommsConstants.PRODUCT_ID_JETSTREAM));
  
        // Supported FAP versions.  This is a bitmap of the supported FAP levels
        // with a 1 bit indicating support.  Big-endian (Java) byte ordering is
        // used and the LSB corresponds to FAP version 1.
        if (currentFapLevel >= JFapChannelConstants.FAP_VERSION_3)
        {
           byte[] fapBitmap = new byte[32];
           StringBuffer supportedFapLevels = null;
           
           for (int i=255; i >=0; --i)
           {
              // Determine if the bit is on or off
              boolean bitIsOn = CommsConstants.isFapLevelSupported(i+1);
  
              if (bitIsOn)
              {
                 // Find the index into the byte array bitmap where the bit
                 // is located.
                 int byteOffset = (255-i) / 8;
  
                 // Find the bit within this byte.
                 int bitOffset = i % 8;
  
                 // Work out the bit we want to set
                 byte bitSet = (byte)(0x01 << bitOffset);
  
                 // Add this bit into the array
                 fapBitmap[byteOffset] |= bitSet;
                 
                 // Update the text string buffer
                 if (supportedFapLevels == null) 
                 {
                    supportedFapLevels = new StringBuffer();
                    supportedFapLevels.append(i + 1);
                 }
                 else
                 {
                    supportedFapLevels.append(", ");
                    supportedFapLevels.append(i + 1);
                 }
              }
           }
  
           hBuf.putShort(CommsConstants.FIELDID_SUPORTED_FAPS);
           hBuf.putShort(fapBitmap.length);
           hBuf.put(fapBitmap);
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Supported FAP's   : " + supportedFapLevels);
        }
        
        //This is isn't a 'basic' JFAP handshake then indicate that this is the case.
        if(usageType != ConversationUsageType.JFAP)
        {
           hBuf.putShort(CommsConstants.FIELDID_CONVERSATION_USAGE_TYPE);
           hBuf.putShort(4);
           usageType.serialize(hBuf);
        }
        
        //If the cell name is not null or too big, send it.      
        if(cellName != null && cellNameLengthInBuffer <= Short.MAX_VALUE)
        {
           hBuf.putShort(CommsConstants.FIELDID_CELL_NAME);
           hBuf.putShort(cellNameLengthInBuffer);
           hBuf.putString(cellName);
        }
        
        //If the node name is not null or too big, send it.      
        if(nodeName != null && nodeNameLengthInBuffer <= Short.MAX_VALUE)
        {
           hBuf.putShort(CommsConstants.FIELDID_NODE_NAME);
           hBuf.putShort(nodeNameLengthInBuffer);
           hBuf.putString(nodeName);
        }
        
        //If the server name is not null or too big, send it.      
        if(serverName != null && serverNameLengthInBuffer <= Short.MAX_VALUE)
        {
           hBuf.putShort(CommsConstants.FIELDID_SERVER_NAME);
           hBuf.putShort(serverNameLengthInBuffer);
           hBuf.putString(serverName);
        }
        
        //If the cluster name is not null or too big, send it.      
        if(clusterName != null && clusterNameLengthInBuffer <= Short.MAX_VALUE)
        {
           hBuf.putShort(CommsConstants.FIELDID_CLUSTER_NAME);
           hBuf.putShort(clusterNameLengthInBuffer);
           hBuf.putString(clusterName);
        }
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "----- End of handshake data ---------------------");
        
        // Pass on call to server
        CommsByteBuffer buf = jfapExchange(hBuf, JFapChannelConstants.SEG_HANDSHAKE, 
                                           JFapChannelConstants.PRIORITY_MEDIUM, true);
  
        try
        {
           short err = buf.getCommandCompletionCode(JFapChannelConstants.SEG_HANDSHAKE);
           if (err != CommsConstants.SI_NO_EXCEPTION)
           {
              checkFor_SIConnectionDroppedException(buf, err);
              checkFor_SIConnectionLostException(buf, err);
              defaultChecker(buf, err);
           }
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "----- Received the following handshake data -----");
           
           // First get the connection type
           byte connectionType = buf.get();
           if ((serverMode && connectionType != CommsConstants.HANDSHAKE_ME) ||
               (!serverMode && connectionType != CommsConstants.HANDSHAKE_CLIENT))
           {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Unexpected connection type returned!",
                                                   Byte.toString(connectionType));
  
              throw new SIConnectionLostException(
                 nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)  // d192293
              );
           }
           
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
           {
              if (serverMode) SibTr.debug(this, tc, " Handshake type    : ME");
              else            SibTr.debug(this, tc, " Handshake type    : CLIENT");
           }
  
           // Now loop round through the data and get any overriden values.
           // Note that we could get nothing back here which would indicate that
           // the server is happy with our proposed values.
           while (buf.hasRemaining())
           {
              short fieldId = buf.getShort();
  
              switch (fieldId)
              {
              case CommsConstants.FIELDID_PRODUCT_VERSION:
  
                 short productVersionFieldLength = buf.getShort();
                 if (productVersionFieldLength != 2)
                 {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Invalid product version length: " + productVersionFieldLength);
                    throw new SIConnectionLostException(
                       nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)
                    );
                 }
                 byte upperProductVersion = buf.get();
                 byte lowerProductVersion = buf.get();
  
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Product Version   : " + upperProductVersion + "." + lowerProductVersion);
                 
                 // If the server replies saying that it has a higher major version,
                 // we need to save it away as in future version we may need to
                 // know that we are talking to a different server version
                 handshakeProperties.setMajorVersion(upperProductVersion);
                 handshakeProperties.setMinorVersion(lowerProductVersion);
  
                 break;
  
              case CommsConstants.FIELDID_FAP_LEVEL:
  
                 short fapLevelFieldLength = buf.getShort();
                 if (fapLevelFieldLength != 2)
                 {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Invalid FAP Field length: " + fapLevelFieldLength);
                    throw new SIConnectionLostException(
                       nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)
                    );
                 }
                 short fapLevel = buf.getShort();
  
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " FAP Version       : " + fapLevel);
  
                 // If the server replies with a higher FAP level, we cannot continue. Note this 
                 // should not happen unless the server malfunctions.
                 if( fapLevel > currentFapLevel)
                 {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "FAP level returned ("+fapLevel+") is greater than the requested FAP level ("+currentFapLevel+")");
                    throw new SIConnectionLostException(
                       nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)  // d192293
                    );
                 }
  
                 // Is the FAP level in the supported table of FAP levels?
                 if (!CommsConstants.isFapLevelSupported(fapLevel))
                 {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "FAP level returned ("+fapLevel+") is not supported");
                    throw new SIConnectionLostException(
                          nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)  // d192293
                       );
                 }
  
                 handshakeProperties.setFapLevel(fapLevel);
                 break;
  
              case CommsConstants.FIELDID_MAX_MESSAGE_SIZE:
  
                 short maxMessageFieldLength = buf.getShort();
                 if (maxMessageFieldLength != 8)
                 {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Invalid Max Message Field length: " + maxMessageFieldLength);
                    throw new SIConnectionLostException(
                       nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)
                    );
                 }
                 long maxMessageSize = buf.getLong();
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Max Msg Size      : " + maxMessageSize);
                 
                 handshakeProperties.setMaxMessageSize(Math.min(maxMessageSize, CommsConstants.MAX_MESSAGE_SIZE));
                 break;
  
              case CommsConstants.FIELDID_MAX_TRANSMISSION_SIZE:
  
                 short maxTransmissionLength = buf.getShort();
                 if (maxTransmissionLength != 4)
                 {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Invalid Max Transmission Field length: " + maxTransmissionLength);
                    throw new SIConnectionLostException(
                       nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)
                    );
                 }
                 int maxTransmissionSize = buf.getInt();
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Max Tx Size       : " + maxTransmissionSize);
                 
                 handshakeProperties.setMaxTransmissionSize(Math.min(maxTransmissionSize, CommsConstants.MAX_TRANSMISSION_SIZE));
                 break;
  
              case CommsConstants.FIELDID_HEARTBEAT_INTERVAL:
  
                 short heartbeatFieldLength = buf.getShort();
                 if (heartbeatFieldLength != 2)
                 {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Invalid Heartbeat Interval Field length: " + heartbeatFieldLength);
                    throw new SIConnectionLostException(
                       nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)
                    );
                 }
                 short heartbeatInterval = buf.getShort();
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Heartbeat Interval: " + heartbeatInterval);
                 
                 handshakeProperties.setHeartbeatInterval(heartbeatInterval);
                 
                 break;
                 
              case CommsConstants.FIELDID_HEARTBEAT_TIMEOUT:
  
                 short heartbeatTimeoutFieldLength = buf.getShort();
                 if (heartbeatTimeoutFieldLength != 2)
                 {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Invalid Heartbeat Timeout Field length: " + heartbeatTimeoutFieldLength);
                    throw new SIConnectionLostException(
                       nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)
                    );
                 }
                 short heartbeatTimeout = buf.getShort();
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Heartbeat Timeout : " + heartbeatTimeout);
                 
                 handshakeProperties.setHeartbeatTimeout(heartbeatTimeout);
                 
                 break;
  
              case CommsConstants.FIELDID_CAPABILITIES:
  
                short capabilityInterval = buf.getShort();
                if (capabilityInterval != 2)
                {
                   if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Invalid Capability Field length: " + capabilityInterval);
                   throw new SIConnectionLostException(
                      nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)
                   );
                }
                short capability = buf.getShort();
                if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Capabilities      : " + capability);
                
                handshakeProperties.setCapabilites(capability);
  
                break;
  
              case CommsConstants.FIELDID_PRODUCT_ID:
  
                 short productIdLength = buf.getShort();
                 if (productIdLength != 2)
                 {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Invalid Product Id Field length: " + productIdLength);
                    throw new SIConnectionLostException(
                       nls.getFormattedMessage("UNABLE_TO_NEGOTIATE_CONNECTION_SICO1023", new Object[] {connectionInfo}, null)
                    );
                 }
                 short productId = buf.getShort();
  
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " Server Product Id : " + productId);
                 
                 handshakeProperties.setPeerProductId(productId);
                 break;
  
              default:
                 
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, " ** Unknown Parameter received: **");
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Field Id: " + fieldId);
  
                 // We can throw this here as we have told the server what FAP version we
                 // are, and therefore it should not negotiate with us any values that we
                 // do not know about.
  
                 SIConnectionLostException e = new
                    SIConnectionLostException(nls.getFormattedMessage("INVALID_PROP_SICO8009", 
                                                                         new Object[]
                                                                         {"" + fieldId}, 
                                                                         null)
  
                 );
  
                 FFDCFilter.processException(e, CLASS_NAME + ".initiateHandshaking",
                                             CommsConstants.JFAPCOMMUNICATOR_INITIATEHANDSHAKING_03, this);
  
                 throw e;
              }
           }
           
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "----- End of handshake data ---------------------");
           
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Handshake properties:", handshakeProperties);
           
           // Now we have completed handshaking, set the heartbeating values to whatever were 
           // agreed upon
           getConversation().setHeartbeatInterval(handshakeProperties.getHeartbeatInterval());
           getConversation().setHeartbeatTimeout(handshakeProperties.getHeartbeatTimeout());
        }
        catch (SIException e)
        {
           FFDCFilter.processException(e, CLASS_NAME + ".initiateHandshaking",
                                       CommsConstants.JFAPCOMMUNICATOR_INITIATEHANDSHAKING_02, this);
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Caught an SIException", e);
           
           throw new SIConnectionLostException(
              nls.getFormattedMessage("UNKNOWN_CORE_EXCP_SICO8002", new Object[] { e }, null),
              e
           );
        }
        finally
        {
           // Release pooled objects
           if (buf != null) buf.release();
        }
        
        //Only set handshake properties if the usageType requires it.
        if(usageType.requiresNormalHandshakeProcessing())
        {
           getConversation().setHandshakeProperties(handshakeProperties);
        }
        
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "initiateCommsHandshakingImpl");
     }