protected void getAndRemoveIbmAlpnChoice ( SSLEngine engine , SSLConnectionLink link ) { if ( this . isIbmAlpnActive ( ) ) { try { // invoke ALPNJSSEExt.get(engine) String [ ] alpnResult = ( String [ ] ) ibmAlpnGet . invoke ( null , engine ) ; // invoke ALPNJSSEExt.delete(engine) ibmAlpnDelete . invoke ( null , engine ) ; if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) { StringBuilder sb = new StringBuilder ( ) ; sb . append ( "getAndRemoveIbmAlpnChoice" ) ; if ( alpnResult != null && alpnResult . length > 0 ) { sb . append ( " results:" ) ; for ( String s : alpnResult ) { sb . append ( " " + s ) ; } sb . append ( " " + engine ) ; } else { sb . append ( ": ALPN not used for " + engine ) ; } Tr . debug ( tc , sb . toString ( ) ) ; } if ( alpnResult != null && alpnResult . length == 1 && h2 . equals ( alpnResult [ 0 ] ) ) { if ( link . getAlpnProtocol ( ) == null ) { link . setAlpnProtocol ( h2 ) ; } } } catch ( InvocationTargetException ie ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) { Tr . debug ( tc , "getAndRemoveIbmAlpnChoice exception: " + ie . getTargetException ( ) ) ; } } catch ( Exception e ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) { Tr . debug ( tc , "getAndRemoveIbmAlpnChoice exception: " + e ) ; } } } }
Ask the JSSE ALPN provider for the protocol selected for the given SSLEngine then delete the engine from the ALPN provider s map . If the selected protocol was h2 set that as the protocol to use on the given link .