@@ -59,38 +59,45 @@ public class SSL {
59
59
public static final long OP_NETSCAPE_CA_DN_BUG = 0x20000000L ;
60
60
public static final long OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG = 0x40000000L ;
61
61
62
- public static void createSSL (Ruby runtime , RubyModule ossl ) {
63
- RubyModule mSSL = ossl .defineModuleUnder ("SSL" );
64
- RubyClass openSSLError = ossl .getClass ("OpenSSLError" );
65
- RubyClass sslError = mSSL .defineClassUnder ("SSLError" ,openSSLError ,openSSLError .getAllocator ());
66
- RubyClass sslErrorWaitReadable = mSSL .defineClassUnder ("SSLErrorWaitReadable" ,sslError ,openSSLError .getAllocator ());
67
- sslErrorWaitReadable .include (new IRubyObject []{runtime .getIO ().getConstant ("WaitReadable" )});
68
- RubyClass sslErrorWaitWritable = mSSL .defineClassUnder ("SSLErrorWaitWritable" ,sslError ,openSSLError .getAllocator ());
69
- sslErrorWaitWritable .include (new IRubyObject []{runtime .getIO ().getConstant ("WaitWritable" )});
70
-
71
- SSLContext .createSSLContext (runtime ,mSSL );
72
- SSLSocket .createSSLSocket (runtime ,mSSL );
73
-
74
- mSSL .setConstant ("VERIFY_NONE" , runtime .newFixnum (VERIFY_NONE ));
75
- mSSL .setConstant ("VERIFY_PEER" , runtime .newFixnum (VERIFY_PEER ));
76
- mSSL .setConstant ("VERIFY_FAIL_IF_NO_PEER_CERT" , runtime .newFixnum (VERIFY_FAIL_IF_NO_PEER_CERT ));
77
- mSSL .setConstant ("VERIFY_CLIENT_ONCE" , runtime .newFixnum (VERIFY_CLIENT_ONCE ));
78
-
79
- mSSL .setConstant ("OP_ALL" , runtime .newFixnum (OP_ALL ));
80
- mSSL .setConstant ("OP_NO_TICKET" , runtime .newFixnum (OP_NO_TICKET ));
81
- mSSL .setConstant ("OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION" , runtime .newFixnum (OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION ));
82
- mSSL .setConstant ("OP_SINGLE_ECDH_USE" , runtime .newFixnum (OP_SINGLE_ECDH_USE ));
83
- mSSL .setConstant ("OP_SINGLE_DH_USE" , runtime .newFixnum (OP_SINGLE_DH_USE ));
84
- mSSL .setConstant ("OP_EPHEMERAL_RSA" , runtime .newFixnum (OP_EPHEMERAL_RSA ));
85
- mSSL .setConstant ("OP_CIPHER_SERVER_PREFERENCE" , runtime .newFixnum (OP_CIPHER_SERVER_PREFERENCE ));
86
- mSSL .setConstant ("OP_TLS_ROLLBACK_BUG" , runtime .newFixnum (OP_TLS_ROLLBACK_BUG ));
87
- mSSL .setConstant ("OP_NO_SSLv2" , runtime .newFixnum (OP_NO_SSLv2 ));
88
- mSSL .setConstant ("OP_NO_SSLv3" , runtime .newFixnum (OP_NO_SSLv3 ));
89
- mSSL .setConstant ("OP_NO_TLSv1" , runtime .newFixnum (OP_NO_TLSv1 ));
90
- mSSL .setConstant ("OP_PKCS1_CHECK_1" , runtime .newFixnum (OP_PKCS1_CHECK_1 ));
91
- mSSL .setConstant ("OP_PKCS1_CHECK_2" , runtime .newFixnum (OP_PKCS1_CHECK_2 ));
92
- mSSL .setConstant ("OP_NETSCAPE_CA_DN_BUG" , runtime .newFixnum (OP_NETSCAPE_CA_DN_BUG ));
93
- mSSL .setConstant ("OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG" , runtime .newFixnum (OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG ));
62
+ public static void createSSL (final Ruby runtime , final RubyModule ossl ) {
63
+ final RubyModule _SSL = ossl .defineModuleUnder ("SSL" );
64
+ final RubyClass _OpenSSLError = ossl .getClass ("OpenSSLError" );
65
+ RubyClass _SSLError = _SSL .defineClassUnder ("SSLError" , _OpenSSLError , _OpenSSLError .getAllocator ());
66
+
67
+ final IRubyObject _WaitReadable = runtime .getIO ().getConstant ("WaitReadable" );
68
+ if ( _WaitReadable != null ) { // since 2.0 (do not exist in 1.8 / 1.9)
69
+ _SSL .defineClassUnder ("SSLErrorWaitReadable" , _SSLError , _OpenSSLError .getAllocator ()).
70
+ include (new IRubyObject []{ _WaitReadable });
71
+ }
72
+ final IRubyObject _WaitWritable = runtime .getIO ().getConstant ("WaitWritable" );
73
+ if ( _WaitWritable != null ) { // since 2.0 (do not exist in 1.8 / 1.9)
74
+ _SSL .defineClassUnder ("SSLErrorWaitWritable" , _SSLError , _OpenSSLError .getAllocator ()).
75
+ include (new IRubyObject []{ _WaitWritable });
76
+ }
77
+
78
+ SSLContext .createSSLContext (runtime , _SSL );
79
+ SSLSocket .createSSLSocket (runtime , _SSL );
80
+
81
+ _SSL .setConstant ("VERIFY_NONE" , runtime .newFixnum (VERIFY_NONE ));
82
+ _SSL .setConstant ("VERIFY_PEER" , runtime .newFixnum (VERIFY_PEER ));
83
+ _SSL .setConstant ("VERIFY_FAIL_IF_NO_PEER_CERT" , runtime .newFixnum (VERIFY_FAIL_IF_NO_PEER_CERT ));
84
+ _SSL .setConstant ("VERIFY_CLIENT_ONCE" , runtime .newFixnum (VERIFY_CLIENT_ONCE ));
85
+
86
+ _SSL .setConstant ("OP_ALL" , runtime .newFixnum (OP_ALL ));
87
+ _SSL .setConstant ("OP_NO_TICKET" , runtime .newFixnum (OP_NO_TICKET ));
88
+ _SSL .setConstant ("OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION" , runtime .newFixnum (OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION ));
89
+ _SSL .setConstant ("OP_SINGLE_ECDH_USE" , runtime .newFixnum (OP_SINGLE_ECDH_USE ));
90
+ _SSL .setConstant ("OP_SINGLE_DH_USE" , runtime .newFixnum (OP_SINGLE_DH_USE ));
91
+ _SSL .setConstant ("OP_EPHEMERAL_RSA" , runtime .newFixnum (OP_EPHEMERAL_RSA ));
92
+ _SSL .setConstant ("OP_CIPHER_SERVER_PREFERENCE" , runtime .newFixnum (OP_CIPHER_SERVER_PREFERENCE ));
93
+ _SSL .setConstant ("OP_TLS_ROLLBACK_BUG" , runtime .newFixnum (OP_TLS_ROLLBACK_BUG ));
94
+ _SSL .setConstant ("OP_NO_SSLv2" , runtime .newFixnum (OP_NO_SSLv2 ));
95
+ _SSL .setConstant ("OP_NO_SSLv3" , runtime .newFixnum (OP_NO_SSLv3 ));
96
+ _SSL .setConstant ("OP_NO_TLSv1" , runtime .newFixnum (OP_NO_TLSv1 ));
97
+ _SSL .setConstant ("OP_PKCS1_CHECK_1" , runtime .newFixnum (OP_PKCS1_CHECK_1 ));
98
+ _SSL .setConstant ("OP_PKCS1_CHECK_2" , runtime .newFixnum (OP_PKCS1_CHECK_2 ));
99
+ _SSL .setConstant ("OP_NETSCAPE_CA_DN_BUG" , runtime .newFixnum (OP_NETSCAPE_CA_DN_BUG ));
100
+ _SSL .setConstant ("OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG" , runtime .newFixnum (OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG ));
94
101
}
95
102
96
103
@ Deprecated // confusing since it throws instead of returning
@@ -107,11 +114,19 @@ public static RaiseException newSSLError(Ruby runtime, String message) {
107
114
}
108
115
109
116
public static RaiseException newSSLErrorWaitReadable (Ruby runtime , String message ) {
110
- return Utils . newError (runtime , _SSL ( runtime ). getClass ( "SSLErrorWaitReadable" ) , message , false );
117
+ return newCustomSSLError (runtime , "SSLErrorWaitReadable" , message );
111
118
}
112
119
113
120
public static RaiseException newSSLErrorWaitWritable (Ruby runtime , String message ) {
114
- return Utils .newError (runtime , _SSL (runtime ).getClass ("SSLErrorWaitWritable" ), message , false );
121
+ return newCustomSSLError (runtime , "SSLErrorWaitWritable" , message );
122
+ }
123
+
124
+ private static RaiseException newCustomSSLError (final Ruby runtime , final String name , final String message ) {
125
+ RubyClass errorClass = _SSL (runtime ).getClass (name );
126
+ if ( errorClass == null ) { // < Ruby 2.0
127
+ errorClass = _SSL (runtime ).getClass ("SSLError" ); // fallback
128
+ }
129
+ return Utils .newError (runtime , errorClass , message , false );
115
130
}
116
131
117
132
static RubyModule _SSL (final Ruby runtime ) {
0 commit comments