question: private void parseSessionString ( ) { if ( isParsed ) { return ; } if ( isNull ( ) ) { throw new IllegalArgumentException ( "sid value is null or empty" ) ; } String serverID = null ; try { String sidString = encryptedString ; if ( isC66Encoded ( ) ) { sidString = c66DecodeCookieString ( encryptedString ) ; } int outerIndex = sidString . lastIndexOf ( "@" ) ; if ( outerIndex == - 1 ) { isParsed = true ; return ; } String outer = sidString . substring ( outerIndex + 1 ) ; int tailIndex = outer . indexOf ( "#" ) ; tail = outer . substring ( tailIndex + 1 ) ; if ( tailIndex != - 1 ) { String extensionPart = outer . substring ( 0 , tailIndex ) ; extensions = new DynamicSessionIDExtensions ( new LegacySessionIDExtensions ( extensionPart ) ) ; } else { extensions = new LegacySessionIDExtensions ( ) ; } serverID = extensions . getSiteID ( ) ; if ( serverID != null ) { setServerID ( serverID ) ; } } catch ( Exception e ) { debug . error ( "Invalid sessionid format:[" + encryptedString + "]" , e ) ; throw new IllegalArgumentException ( "Invalid sessionid format:[" + encryptedString + "]" + e ) ; } isParsed = true ; }
target:  Extracts the  server, protocol, port, extensions and tail from Session ID