76 ExtensionType extType = ExtensionType.get(type); 77 HelloExtension extension; 78 if (extType == ExtensionType.EXT_SERVER_NAME) { 79 extension = new ServerNameExtension(s, extlen); 80 } else if (extType == ExtensionType.EXT_SIGNATURE_ALGORITHMS) { 81 extension = new SignatureAlgorithmsExtension(s, extlen); 82 } else if (extType == ExtensionType.EXT_SUPPORTED_GROUPS) { 83 extension = new SupportedGroupsExtension(s, extlen); 84 } else if (extType == ExtensionType.EXT_EC_POINT_FORMATS) { 85 extension = new EllipticPointFormatsExtension(s, extlen); 86 } else if (extType == ExtensionType.EXT_RENEGOTIATION_INFO) { 87 extension = new RenegotiationInfoExtension(s, extlen); 88 } else if (extType == ExtensionType.EXT_ALPN) { 89 extension = new ALPNExtension(s, extlen); 90 } else if (extType == ExtensionType.EXT_MAX_FRAGMENT_LENGTH) { 91 extension = new MaxFragmentLengthExtension(s, extlen); 92 } else if (extType == ExtensionType.EXT_STATUS_REQUEST) { 93 extension = new CertStatusReqExtension(s, extlen); 94 } else if (extType == ExtensionType.EXT_STATUS_REQUEST_V2) { 95 extension = new CertStatusReqListV2Extension(s, extlen); 96 } else { 97 extension = new UnknownExtension(s, extlen, extType); 98 } 99 extensions.add(extension); 100 len -= extlen + 4; 101 } 102 if (len != 0) { 103 throw new SSLProtocolException( 104 "Error parsing extensions: extra data"); 105 } 106 } 107 108 // Return the List of extensions. Must not be modified by the caller. 109 List<HelloExtension> list() { 110 return extensions; 111 } 112 113 void add(HelloExtension ext) { 114 if (extensions.isEmpty()) { 115 extensions = new ArrayList<HelloExtension>(); | 76 ExtensionType extType = ExtensionType.get(type); 77 HelloExtension extension; 78 if (extType == ExtensionType.EXT_SERVER_NAME) { 79 extension = new ServerNameExtension(s, extlen); 80 } else if (extType == ExtensionType.EXT_SIGNATURE_ALGORITHMS) { 81 extension = new SignatureAlgorithmsExtension(s, extlen); 82 } else if (extType == ExtensionType.EXT_SUPPORTED_GROUPS) { 83 extension = new SupportedGroupsExtension(s, extlen); 84 } else if (extType == ExtensionType.EXT_EC_POINT_FORMATS) { 85 extension = new EllipticPointFormatsExtension(s, extlen); 86 } else if (extType == ExtensionType.EXT_RENEGOTIATION_INFO) { 87 extension = new RenegotiationInfoExtension(s, extlen); 88 } else if (extType == ExtensionType.EXT_ALPN) { 89 extension = new ALPNExtension(s, extlen); 90 } else if (extType == ExtensionType.EXT_MAX_FRAGMENT_LENGTH) { 91 extension = new MaxFragmentLengthExtension(s, extlen); 92 } else if (extType == ExtensionType.EXT_STATUS_REQUEST) { 93 extension = new CertStatusReqExtension(s, extlen); 94 } else if (extType == ExtensionType.EXT_STATUS_REQUEST_V2) { 95 extension = new CertStatusReqListV2Extension(s, extlen); 96 } else if (extType == ExtensionType.EXT_EXTENDED_MASTER_SECRET) { 97 extension = new ExtendedMasterSecretExtension(s, extlen); 98 } else { 99 extension = new UnknownExtension(s, extlen, extType); 100 } 101 extensions.add(extension); 102 len -= extlen + 4; 103 } 104 if (len != 0) { 105 throw new SSLProtocolException( 106 "Error parsing extensions: extra data"); 107 } 108 } 109 110 // Return the List of extensions. Must not be modified by the caller. 111 List<HelloExtension> list() { 112 return extensions; 113 } 114 115 void add(HelloExtension ext) { 116 if (extensions.isEmpty()) { 117 extensions = new ArrayList<HelloExtension>(); |