From: TAKEMURA Masahiro Date: 2001-12-07T23:16:08+09:00 Subject: [ruby-dev:15393] net/protocol.rb Protocol#connect & pops.rb 武村といいます。 OpenSSL ライブラリを利用して POP3 over SSL での接続を行おうとして、 気になった事があります。 まず、私が作成した pops.rb は、以下のようになりました。 ----- require 'net/protocols' require 'net/pop' module Net class POP3s < POP3 protocol_param :port, '995' protocol_param :socket_type, '::Net::NetPrivate::SSLSocket' def connect conn_socket @address, @port on_connect conn_command @socket end def on_connect @socket.ssl_connect end end end ----- ここで、 Protocol#connect を再定義していますが、元々は ----- class Protocol def connect conn_socket @address, @port conn_command @socket on_connect end end ----- このようになっていました。 なぜこのように再定義したかというと、 conn_command @socket の中で POP3Command#initialize を行っているのですが、 その中ですでに通信が確立されていることが前提である Command#check_reply を呼んでいるのですが、SSL で通信する際には、(OpenSSLライブラリ中のhttps.rb を参考にして on_connect メソッドに書いた) @socket.ssl_connect が終らないと 接続できないため、そのままでは動作しないためです。 そこで質問になりますが、 Protocol#on_connect は、メソッド名のみ定義されて中は空であり、 on_connect の中身を実際に定義してつかっているクラスは、組み込み、添付 ライブラリの中にはありません。 OpenSSL ライブラリ中の https.rb では定義していますが、特に上記定義に 変更しても問題はなさそうです。 したがって、私がPOP3s中で定義しなおしたように、 Protocol#connect を 書き換えても影響はないのですが、書き直した方がいいと考えるべきでしょうか? もしくは、POP3Command#initialize から、通信がなりたっていることが前提となる メソッドを呼んでいるのが問題なのでしょうか? -- _/_/_/ 武村理弘 : /_/_/ Mas.TAKEMURA : mastk@nifty.com