@@ -44,6 +44,7 @@ class ZitiSSLSocket(val transport: Socket, val engine: SSLEngine) :
44
44
constructor (s: Socket , host: String , port: Int ): this (s, tls.createSSLEngine(host, port))
45
45
46
46
private val sslBuffer: ByteBuffer = ByteBuffer .allocate(32 * 1024 )
47
+ private val hsListeners = mutableListOf<HandshakeCompletedListener >()
47
48
48
49
init {
49
50
engine.useClientMode = true
@@ -114,7 +115,6 @@ class ZitiSSLSocket(val transport: Socket, val engine: SSLEngine) :
114
115
with (engine.unwrap(sslBuffer, plainBuffer)) {
115
116
sslBuffer.compact()
116
117
if (bytesProduced() > 0 ) {
117
- plainBuffer.flip()
118
118
return copyPlainText(out , off, len)
119
119
}
120
120
}
@@ -194,6 +194,12 @@ class ZitiSSLSocket(val transport: Socket, val engine: SSLEngine) :
194
194
}
195
195
}
196
196
197
+ val ev = HandshakeCompletedEvent (this , engine.session)
198
+ synchronized(hsListeners) {
199
+ hsListeners.forEach {
200
+ it.handshakeCompleted(ev)
201
+ }
202
+ }
197
203
}
198
204
199
205
override fun getSession (): SSLSession {
@@ -243,11 +249,21 @@ class ZitiSSLSocket(val transport: Socket, val engine: SSLEngine) :
243
249
override fun getSupportedProtocols (): Array <String > = engine.supportedProtocols
244
250
245
251
override fun addHandshakeCompletedListener (listener : HandshakeCompletedListener ? ) {
246
- error(" not implemented" )
252
+ listener?.let {
253
+ synchronized(hsListeners) {
254
+ hsListeners.add(it)
255
+ }
256
+ if (engine.handshakeStatus == SSLEngineResult .HandshakeStatus .NOT_HANDSHAKING )
257
+ listener.handshakeCompleted(HandshakeCompletedEvent (this , engine.session))
258
+ }
247
259
}
248
260
249
261
override fun removeHandshakeCompletedListener (listener : HandshakeCompletedListener ? ) {
250
- error(" not implemented" )
262
+ listener?.let {
263
+ synchronized(hsListeners) {
264
+ hsListeners.remove(it)
265
+ }
266
+ }
251
267
}
252
268
253
269
override fun setEnableSessionCreation (flag : Boolean ) {
0 commit comments