Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(389)

Side by Side Diff: net/third_party/nss/patches/alpn.patch

Issue 22237002: NSS: move the first protocol to the end of the ALPN extension. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | net/third_party/nss/ssl/ssl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 diff -pu a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c 1 diff -pu a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c
2 --- a/nss/lib/ssl/ssl3con.c 2013-07-31 14:17:20.669282120 -0700 2 --- a/nss/lib/ssl/ssl3con.c 2013-07-31 14:17:20.669282120 -0700
3 +++ b/nss/lib/ssl/ssl3con.c 2013-07-31 14:28:56.549496061 -0700 3 +++ b/nss/lib/ssl/ssl3con.c 2013-07-31 14:28:56.549496061 -0700
4 @@ -9912,8 +9912,10 @@ ssl3_SendNextProto(sslSocket *ss) 4 @@ -9912,8 +9912,10 @@ ssl3_SendNextProto(sslSocket *ss)
5 int padding_len; 5 int padding_len;
6 static const unsigned char padding[32] = {0}; 6 static const unsigned char padding[32] = {0};
7 7
8 - if (ss->ssl3.nextProto.len == 0) 8 - if (ss->ssl3.nextProto.len == 0)
9 + if (ss->ssl3.nextProto.len == 0 || 9 + if (ss->ssl3.nextProto.len == 0 ||
10 + ss->ssl3.nextProtoState == SSL_NEXT_PROTO_SELECTED) { 10 + ss->ssl3.nextProtoState == SSL_NEXT_PROTO_SELECTED) {
11 return SECSuccess; 11 return SECSuccess;
12 + } 12 + }
13 13
14 PORT_Assert( ss->opt.noLocks || ssl_HaveXmitBufLock(ss)); 14 PORT_Assert( ss->opt.noLocks || ssl_HaveXmitBufLock(ss));
15 PORT_Assert( ss->opt.noLocks || ssl_HaveSSL3HandshakeLock(ss)); 15 PORT_Assert( ss->opt.noLocks || ssl_HaveSSL3HandshakeLock(ss));
16 diff -pu a/nss/lib/ssl/ssl3ext.c b/nss/lib/ssl/ssl3ext.c 16 diff -pu a/nss/lib/ssl/ssl3ext.c b/nss/lib/ssl/ssl3ext.c
17 --- a/nss/lib/ssl/ssl3ext.c 2013-07-31 14:10:00.342814862 -0700 17 --- a/nss/lib/ssl/ssl3ext.c 2013-07-31 14:10:00.342814862 -0700
18 +++ b/nss/lib/ssl/ssl3ext.c 2013-07-31 14:28:56.549496061 -0700 18 +++ b/nss/lib/ssl/ssl3ext.c 2013-07-31 14:28:56.549496061 -0700
19 @@ -52,8 +52,12 @@ static SECStatus ssl3_HandleRenegotiatio 19 @@ -53,8 +53,12 @@ static SECStatus ssl3_HandleRenegotiationInfoXtn(sslSocket *s s,
20 PRUint16 ex_type, SECItem *data); 20 PRUint16 ex_type, SECItem *data);
21 static SECStatus ssl3_ClientHandleNextProtoNegoXtn(sslSocket *ss, 21 static SECStatus ssl3_ClientHandleNextProtoNegoXtn(sslSocket *ss,
22 PRUint16 ex_type, SECItem *data); 22 PRUint16 ex_type, SECItem *data);
23 +static SECStatus ssl3_ClientHandleAppProtoXtn(sslSocket *ss, 23 +static SECStatus ssl3_ClientHandleAppProtoXtn(sslSocket *ss,
24 + PRUint16 ex_type, SECItem *data); 24 + PRUint16 ex_type, SECItem *data);
25 static SECStatus ssl3_ServerHandleNextProtoNegoXtn(sslSocket *ss, 25 static SECStatus ssl3_ServerHandleNextProtoNegoXtn(sslSocket *ss,
26 PRUint16 ex_type, SECItem *data); 26 PRUint16 ex_type, SECItem *data);
27 +static PRInt32 ssl3_ClientSendAppProtoXtn(sslSocket *ss, PRBool append, 27 +static PRInt32 ssl3_ClientSendAppProtoXtn(sslSocket *ss, PRBool append,
28 + PRUint32 maxBytes); 28 + PRUint32 maxBytes);
29 static PRInt32 ssl3_ClientSendNextProtoNegoXtn(sslSocket *ss, PRBool append, 29 static PRInt32 ssl3_ClientSendNextProtoNegoXtn(sslSocket *ss, PRBool append,
30 PRUint32 maxBytes); 30 PRUint32 maxBytes);
31 static PRInt32 ssl3_SendUseSRTPXtn(sslSocket *ss, PRBool append, 31 static PRInt32 ssl3_SendUseSRTPXtn(sslSocket *ss, PRBool append,
32 @@ -246,14 +250,15 @@ static const ssl3HelloExtensionHandler c 32 @@ -252,6 +256,7 @@ static const ssl3HelloExtensionHandler serverHelloHandlersTL S[] = {
33 /* These two tables are used by the client, to handle server hello 33 { ssl_session_ticket_xtn, &ssl3_ClientHandleSessionTicketXtn },
34 * extensions. */ 34 { ssl_renegotiation_info_xtn, &ssl3_HandleRenegotiationInfoXtn },
35 static const ssl3HelloExtensionHandler serverHelloHandlersTLS[] = { 35 { ssl_next_proto_nego_xtn, &ssl3_ClientHandleNextProtoNegoXtn },
36 - { ssl_server_name_xtn, &ssl3_HandleServerNameXtn }, 36 + { ssl_app_layer_protocol_xtn, &ssl3_ClientHandleAppProtoXtn },
37 + { ssl_server_name_xtn, &ssl3_HandleServerNameXtn }, 37 { ssl_use_srtp_xtn, &ssl3_HandleUseSRTPXtn },
38 /* TODO: add a handler for ssl_ec_point_formats_xtn */ 38 { ssl_channel_id_xtn, &ssl3_ClientHandleChannelIDXtn },
39 - { ssl_session_ticket_xtn, &ssl3_ClientHandleSessionTicketXtn }, 39 { ssl_cert_status_xtn, &ssl3_ClientHandleStatusRequestXtn },
40 - { ssl_renegotiation_info_xtn, &ssl3_HandleRenegotiationInfoXtn }, 40 @@ -271,18 +276,19 @@ static const ssl3HelloExtensionHandler serverHelloHandlers SSL3[] = {
41 - { ssl_next_proto_nego_xtn, &ssl3_ClientHandleNextProtoNegoXtn },
42 - { ssl_use_srtp_xtn, &ssl3_HandleUseSRTPXtn },
43 - { ssl_channel_id_xtn, &ssl3_ClientHandleChannelIDXtn },
44 - { ssl_cert_status_xtn, &ssl3_ClientHandleStatusRequestXtn },
45 + { ssl_session_ticket_xtn, &ssl3_ClientHandleSessionTicketXtn },
46 + { ssl_renegotiation_info_xtn, &ssl3_HandleRenegotiationInfoXtn },
47 + { ssl_next_proto_nego_xtn, &ssl3_ClientHandleNextProtoNegoXtn },
48 + { ssl_app_layer_protocol_xtn, &ssl3_ClientHandleAppProtoXtn },
49 + { ssl_use_srtp_xtn, &ssl3_HandleUseSRTPXtn },
50 + { ssl_channel_id_xtn, &ssl3_ClientHandleChannelIDXtn },
51 + { ssl_cert_status_xtn, &ssl3_ClientHandleStatusRequestXtn },
52 { -1, NULL }
53 };
54
55 @@ -270,17 +275,18 @@ static const ssl3HelloExtensionHandler s
56 */ 41 */
57 static const 42 static const
58 ssl3HelloExtensionSender clientHelloSendersTLS[SSL_MAX_EXTENSIONS] = { 43 ssl3HelloExtensionSender clientHelloSendersTLS[SSL_MAX_EXTENSIONS] = {
59 - { ssl_server_name_xtn, &ssl3_SendServerNameXtn }, 44 - { ssl_server_name_xtn, &ssl3_SendServerNameXtn },
60 - { ssl_renegotiation_info_xtn, &ssl3_SendRenegotiationInfoXtn }, 45 - { ssl_renegotiation_info_xtn, &ssl3_SendRenegotiationInfoXtn },
61 + { ssl_server_name_xtn, &ssl3_SendServerNameXtn }, 46 + { ssl_server_name_xtn, &ssl3_SendServerNameXtn },
62 + { ssl_renegotiation_info_xtn, &ssl3_SendRenegotiationInfoXtn }, 47 + { ssl_renegotiation_info_xtn, &ssl3_SendRenegotiationInfoXtn },
63 #ifdef NSS_ENABLE_ECC 48 #ifdef NSS_ENABLE_ECC
64 - { ssl_elliptic_curves_xtn, &ssl3_SendSupportedCurvesXtn }, 49 - { ssl_elliptic_curves_xtn, &ssl3_SendSupportedCurvesXtn },
65 - { ssl_ec_point_formats_xtn, &ssl3_SendSupportedPointFormatsXtn }, 50 - { ssl_ec_point_formats_xtn, &ssl3_SendSupportedPointFormatsXtn },
66 + { ssl_elliptic_curves_xtn, &ssl3_SendSupportedCurvesXtn }, 51 + { ssl_elliptic_curves_xtn, &ssl3_SendSupportedCurvesXtn },
67 + { ssl_ec_point_formats_xtn, &ssl3_SendSupportedPointFormatsXtn }, 52 + { ssl_ec_point_formats_xtn, &ssl3_SendSupportedPointFormatsXtn },
68 #endif 53 #endif
69 - { ssl_session_ticket_xtn, &ssl3_SendSessionTicketXtn }, 54 - { ssl_session_ticket_xtn, &ssl3_SendSessionTicketXtn },
70 - { ssl_next_proto_nego_xtn, &ssl3_ClientSendNextProtoNegoXtn }, 55 - { ssl_next_proto_nego_xtn, &ssl3_ClientSendNextProtoNegoXtn },
71 - { ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn }, 56 - { ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn },
72 - { ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn }, 57 - { ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn },
73 - { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn }, 58 - { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn },
59 - { ssl_signature_algorithms_xtn, &ssl3_ClientSendSigAlgsXtn }
74 + { ssl_session_ticket_xtn, &ssl3_SendSessionTicketXtn }, 60 + { ssl_session_ticket_xtn, &ssl3_SendSessionTicketXtn },
75 + { ssl_next_proto_nego_xtn, &ssl3_ClientSendNextProtoNegoXtn }, 61 + { ssl_next_proto_nego_xtn, &ssl3_ClientSendNextProtoNegoXtn },
76 + { ssl_app_layer_protocol_xtn, &ssl3_ClientSendAppProtoXtn }, 62 + { ssl_app_layer_protocol_xtn, &ssl3_ClientSendAppProtoXtn },
77 + { ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn }, 63 + { ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn },
78 + { ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn }, 64 + { ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn },
79 + { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn }, 65 + { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn },
80 { ssl_signature_algorithms_xtn, &ssl3_ClientSendSigAlgsXtn } 66 + { ssl_signature_algorithms_xtn, &ssl3_ClientSendSigAlgsXtn }
81 /* any extra entries will appear as { 0, NULL } */ 67 /* any extra entries will appear as { 0, NULL } */
82 }; 68 };
83 @@ -605,6 +611,11 @@ ssl3_ClientHandleNextProtoNegoXtn(sslSoc 69
70 @@ -606,6 +612,11 @@ ssl3_ClientHandleNextProtoNegoXtn(sslSocket *ss, PRUint16 e x_type,
84 71
85 PORT_Assert(!ss->firstHsDone); 72 PORT_Assert(!ss->firstHsDone);
86 73
87 + if (ssl3_ExtensionNegotiated(ss, ssl_app_layer_protocol_xtn)) { 74 + if (ssl3_ExtensionNegotiated(ss, ssl_app_layer_protocol_xtn)) {
88 + PORT_SetError(SEC_ERROR_LIBRARY_FAILURE); 75 + PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
89 + return SECFailure; 76 + return SECFailure;
90 + } 77 + }
91 + 78 +
92 rv = ssl3_ValidateNextProtoNego(data->data, data->len); 79 rv = ssl3_ValidateNextProtoNego(data->data, data->len);
93 if (rv != SECSuccess) 80 if (rv != SECSuccess)
94 return rv; 81 return rv;
95 @@ -638,6 +649,44 @@ ssl3_ClientHandleNextProtoNegoXtn(sslSoc 82 @@ -639,6 +650,44 @@ ssl3_ClientHandleNextProtoNegoXtn(sslSocket *ss, PRUint16 e x_type,
96 return SECITEM_CopyItem(NULL, &ss->ssl3.nextProto, &result); 83 return SECITEM_CopyItem(NULL, &ss->ssl3.nextProto, &result);
97 } 84 }
98 85
99 +static SECStatus 86 +static SECStatus
100 +ssl3_ClientHandleAppProtoXtn(sslSocket *ss, PRUint16 ex_type, SECItem *data) 87 +ssl3_ClientHandleAppProtoXtn(sslSocket *ss, PRUint16 ex_type, SECItem *data)
101 +{ 88 +{
102 + const unsigned char* d = data->data; 89 + const unsigned char* d = data->data;
103 + PRUint16 name_list_len; 90 + PRUint16 name_list_len;
104 + SECItem protocol_name; 91 + SECItem protocol_name;
105 + 92 +
(...skipping 24 matching lines...) Expand all
130 + 117 +
131 + SECITEM_FreeItem(&ss->ssl3.nextProto, PR_FALSE); 118 + SECITEM_FreeItem(&ss->ssl3.nextProto, PR_FALSE);
132 + ss->ssl3.nextProtoState = SSL_NEXT_PROTO_SELECTED; 119 + ss->ssl3.nextProtoState = SSL_NEXT_PROTO_SELECTED;
133 + ss->xtnData.negotiated[ss->xtnData.numNegotiated++] = ex_type; 120 + ss->xtnData.negotiated[ss->xtnData.numNegotiated++] = ex_type;
134 + return SECITEM_CopyItem(NULL, &ss->ssl3.nextProto, &protocol_name); 121 + return SECITEM_CopyItem(NULL, &ss->ssl3.nextProto, &protocol_name);
135 +} 122 +}
136 + 123 +
137 static PRInt32 124 static PRInt32
138 ssl3_ClientSendNextProtoNegoXtn(sslSocket * ss, PRBool append, 125 ssl3_ClientSendNextProtoNegoXtn(sslSocket * ss, PRBool append,
139 PRUint32 maxBytes) 126 PRUint32 maxBytes)
140 @@ -664,6 +713,44 @@ ssl3_ClientSendNextProtoNegoXtn(sslSocke 127 @@ -672,6 +721,70 @@ loser:
141 } else if (maxBytes < extension_length) { 128 return -1;
142 » return 0; 129 }
143 } 130
144 +
145 + return extension_length;
146 +
147 +loser:
148 + return -1;
149 +}
150 +
151 +static PRInt32 131 +static PRInt32
152 +ssl3_ClientSendAppProtoXtn(sslSocket * ss, PRBool append, PRUint32 maxBytes) 132 +ssl3_ClientSendAppProtoXtn(sslSocket * ss, PRBool append, PRUint32 maxBytes)
153 +{ 133 +{
154 + PRInt32 extension_length; 134 + PRInt32 extension_length;
135 + unsigned char *alpn_protos = NULL;
155 + 136 +
156 + /* Renegotiations do not send this extension. */ 137 + /* Renegotiations do not send this extension. */
157 + if (!ss->opt.nextProtoNego.data || ss->firstHsDone) { 138 + if (!ss->opt.nextProtoNego.data || ss->firstHsDone) {
158 + return 0; 139 + return 0;
159 + } 140 + }
160 + 141 +
161 + extension_length = 2 /* extension type */ + 2 /* extension length */ + 142 + extension_length = 2 /* extension type */ + 2 /* extension length */ +
162 + 2 /* protocol name list length */ + 143 + 2 /* protocol name list length */ +
163 + ss->opt.nextProtoNego.len; 144 + ss->opt.nextProtoNego.len;
164 + 145 +
165 + if (append && maxBytes >= extension_length) { 146 + if (append && maxBytes >= extension_length) {
147 + /* NPN requires that the client's fallback protocol is first in the
148 + * list. However, ALPN sends protocols in preference order. So we
149 + * allocate a buffer and move the first protocol to the end of the
150 + * list. */
166 + SECStatus rv; 151 + SECStatus rv;
152 + const unsigned int len = ss->opt.nextProtoNego.len;
153 +
154 + alpn_protos = PORT_Alloc(len);
155 + if (alpn_protos == NULL) {
156 + return SECFailure;
157 + }
158 + if (len > 0) {
159 + /* Each protocol string is prefixed with a single byte length. */
160 + unsigned int i = ss->opt.nextProtoNego.data[0] + 1;
161 + if (i <= len) {
162 + memcpy(alpn_protos, &ss->opt.nextProtoNego.data[i], len - i);
163 + memcpy(alpn_protos + len - i, ss->opt.nextProtoNego.data, i);
164 + } else {
165 + /* This seems to be invalid data so we'll send as-is. */
166 + memcpy(alpn_protos, ss->opt.nextProtoNego.data, len);
167 + }
168 + }
169 +
167 + rv = ssl3_AppendHandshakeNumber(ss, ssl_app_layer_protocol_xtn, 2); 170 + rv = ssl3_AppendHandshakeNumber(ss, ssl_app_layer_protocol_xtn, 2);
168 + if (rv != SECSuccess) 171 + if (rv != SECSuccess)
169 + goto loser; 172 + goto loser;
170 + rv = ssl3_AppendHandshakeNumber(ss, extension_length - 4, 2); 173 + rv = ssl3_AppendHandshakeNumber(ss, extension_length - 4, 2);
171 + if (rv != SECSuccess) 174 + if (rv != SECSuccess)
172 + goto loser; 175 + goto loser;
173 +» rv = ssl3_AppendHandshakeVariable(ss, ss->opt.nextProtoNego.data, 176 +» rv = ssl3_AppendHandshakeVariable(ss, alpn_protos, len, 2);
174 +» » » » » ss->opt.nextProtoNego.len, 2); 177 +» PORT_Free(alpn_protos);
178 +» alpn_protos = NULL;
175 + if (rv != SECSuccess) 179 + if (rv != SECSuccess)
176 + goto loser; 180 + goto loser;
177 + ss->xtnData.advertised[ss->xtnData.numAdvertised++] = 181 + ss->xtnData.advertised[ss->xtnData.numAdvertised++] =
178 + ssl_app_layer_protocol_xtn; 182 + ssl_app_layer_protocol_xtn;
179 + } else if (maxBytes < extension_length) { 183 + } else if (maxBytes < extension_length) {
180 + return 0; 184 + return 0;
181 + } 185 + }
182 186 +
183 return extension_length; 187 + return extension_length;
184 188 +
189 +loser:
190 + if (alpn_protos)
191 +» PORT_Free(alpn_protos);
192 + return -1;
193 +}
194 +
195 static SECStatus
196 ssl3_ClientHandleChannelIDXtn(sslSocket *ss, PRUint16 ex_type,
197 » » » SECItem *data)
185 diff -pu a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h 198 diff -pu a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h
186 --- a/nss/lib/ssl/ssl.h 2013-07-31 14:10:35.113325316 -0700 199 --- a/nss/lib/ssl/ssl.h 2013-07-31 14:10:35.113325316 -0700
187 +++ b/nss/lib/ssl/ssl.h 2013-07-31 14:28:56.589496647 -0700 200 +++ b/nss/lib/ssl/ssl.h 2013-07-31 14:28:56.589496647 -0700
188 @@ -203,6 +203,11 @@ SSL_IMPORT SECStatus SSL_SetNextProtoCal 201 @@ -203,6 +203,16 @@ SSL_IMPORT SECStatus SSL_SetNextProtoCal
189 * protocol in server-preference order. If no matching protocol is found it 202 * protocol in server-preference order. If no matching protocol is found it
190 * selects the first supported protocol. 203 * selects the first supported protocol.
191 * 204 *
192 + * Using this function also allows the client to transparently support ALPN. 205 + * Using this function also allows the client to transparently support ALPN.
193 + * The same set of protocols will be advertised via ALPN and, if the server 206 + * The same set of protocols will be advertised via ALPN and, if the server
194 + * uses ALPN to select a protocol, SSL_GetNextProto will return 207 + * uses ALPN to select a protocol, SSL_GetNextProto will return
195 + * SSL_NEXT_PROTO_SELECTED as the state. 208 + * SSL_NEXT_PROTO_SELECTED as the state.
196 + * 209 + *
210 + * Since NPN uses the first protocol as the fallback protocol, when sending an
211 + * ALPN extension, the first protocol is moved to the end of the list. This
212 + * indicates that the fallback protocol is the least preferred. The other
213 + * protocols should be in preference order.
214 + *
197 * The supported protocols are specified in |data| in wire-format (8-bit 215 * The supported protocols are specified in |data| in wire-format (8-bit
198 * length-prefixed). For example: "\010http/1.1\006spdy/2". */ 216 * length-prefixed). For example: "\010http/1.1\006spdy/2". */
199 SSL_IMPORT SECStatus SSL_SetNextProtoNego(PRFileDesc *fd, 217 SSL_IMPORT SECStatus SSL_SetNextProtoNego(PRFileDesc *fd,
200 @@ -212,7 +217,8 @@ SSL_IMPORT SECStatus SSL_SetNextProtoNeg 218 @@ -212,7 +217,8 @@ SSL_IMPORT SECStatus SSL_SetNextProtoNeg
201 typedef enum SSLNextProtoState { 219 typedef enum SSLNextProtoState {
202 SSL_NEXT_PROTO_NO_SUPPORT = 0, /* No peer support */ 220 SSL_NEXT_PROTO_NO_SUPPORT = 0, /* No peer support */
203 SSL_NEXT_PROTO_NEGOTIATED = 1, /* Mutual agreement */ 221 SSL_NEXT_PROTO_NEGOTIATED = 1, /* Mutual agreement */
204 - SSL_NEXT_PROTO_NO_OVERLAP = 2 /* No protocol overlap found */ 222 - SSL_NEXT_PROTO_NO_OVERLAP = 2 /* No protocol overlap found */
205 + SSL_NEXT_PROTO_NO_OVERLAP = 2, /* No protocol overlap found */ 223 + SSL_NEXT_PROTO_NO_OVERLAP = 2, /* No protocol overlap found */
206 + SSL_NEXT_PROTO_SELECTED = 3 /* Server selected proto (ALPN) */ 224 + SSL_NEXT_PROTO_SELECTED = 3 /* Server selected proto (ALPN) */
(...skipping 11 matching lines...) Expand all
218 ssl_session_ticket_xtn = 35, 236 ssl_session_ticket_xtn = 35,
219 ssl_next_proto_nego_xtn = 13172, 237 ssl_next_proto_nego_xtn = 13172,
220 ssl_channel_id_xtn = 30031, 238 ssl_channel_id_xtn = 30031,
221 ssl_renegotiation_info_xtn = 0xff01 /* experimental number */ 239 ssl_renegotiation_info_xtn = 0xff01 /* experimental number */
222 } SSLExtensionType; 240 } SSLExtensionType;
223 241
224 -#define SSL_MAX_EXTENSIONS 10 242 -#define SSL_MAX_EXTENSIONS 10
225 +#define SSL_MAX_EXTENSIONS 11 243 +#define SSL_MAX_EXTENSIONS 11
226 244
227 #endif /* __sslt_h_ */ 245 #endif /* __sslt_h_ */
OLDNEW
« no previous file with comments | « no previous file | net/third_party/nss/ssl/ssl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698