- { switch (ctx->negProtocolVersion)
- { case SSL_Version_Undetermined:
- case SSL_Version_3_0_With_2_0_Hello:
- case SSL_Version_2_0:
- if ((err = SSL2AdvanceHandshake(
- SSL2_MsgKickstart, ctx)) != 0)
- return err;
- break;
- case SSL_Version_3_0_Only:
- case SSL_Version_3_0:
- case TLS_Version_1_0_Only:
- case TLS_Version_1_0:
- if ((err = SSLAdvanceHandshake(SSL_HdskHelloRequest, ctx)) != 0)
- return err;
- break;
- default:
- sslErrorLog("Bad protocol version\n");
- return errSSLInternal;
- }
+ {
+ assert(ctx->negProtocolVersion == SSL_Version_Undetermined);
+ if(ctx->versionSsl2Enable && !cachedV3OrTls1) {
+ /* SSL2 client hello with possible upgrade */
+ err = SSL2AdvanceHandshake(SSL2_MsgKickstart, ctx);
+ }
+ else {
+ err = SSLAdvanceHandshake(SSL_HdskHelloRequest, ctx);
+ }