-
-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add TLS and WebSocket support for NodeJS
- Loading branch information
1 parent
111ec0e
commit c12358e
Showing
6 changed files
with
95 additions
and
34 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,67 @@ | ||
package socket.tls | ||
|
||
import mqtt.broker.Broker | ||
import mqtt.broker.ClientConnection | ||
import socket.ServerSocket | ||
import socket.ServerSocketLoop | ||
import socket.tcp.Socket | ||
import socket.tcp.WebSocket | ||
import tls.TlsOptions | ||
|
||
actual class TLSServerSocket actual constructor( | ||
private val broker: Broker, | ||
private val selectCallback: (attachment: Any?, state: ServerSocketLoop.SocketState) -> Boolean | ||
) : ServerSocket(broker, selectCallback) { | ||
|
||
init { | ||
TODO("TLS in JS not yet implemented") | ||
private fun TlsOptions(): TlsOptions = js("{}") as TlsOptions | ||
|
||
private val tlsOptions = TlsOptions().apply { | ||
pfx = fs.readFileSync(broker.tlsSettings!!.keyStoreFilePath, null as String?) | ||
passphrase = broker.tlsSettings.keyStorePassword | ||
requestCert = broker.tlsSettings.requireClientCertificate | ||
} | ||
override lateinit var mqttSocket: net.Server | ||
|
||
override lateinit var mqttWebSocket: net.Server | ||
|
||
// TODO this duplication is necessary because overriding the properties, they would get initialized too late and get | ||
// undefined | ||
override fun initialize(broker: Broker) { | ||
mqttSocket = tls.createServer(tlsOptions) { socket: tls.TLSSocket -> | ||
val localSocket = createSocket(socket) | ||
val connection = ClientConnection(localSocket, broker) | ||
clients[socket.socketId()] = connection | ||
localSocket.setAttachment(connection) | ||
|
||
onConnect(socket) | ||
} | ||
|
||
mqttWebSocket = tls.createServer(tlsOptions) { socket: tls.TLSSocket -> | ||
val localSocket = createSocket(socket) | ||
val connection = ClientConnection(WebSocket(localSocket), broker) | ||
clients[socket.socketId()] = connection | ||
localSocket.setAttachment(connection) | ||
|
||
onConnect(socket) | ||
} | ||
|
||
mqttSocket.listen(broker.port, broker.host) | ||
|
||
if (broker.enableUdp) { | ||
TODO("UDP in JS not yet implemented") | ||
} | ||
|
||
if (broker.webSocketPort != null) { | ||
mqttWebSocket.listen(broker.webSocketPort, broker.host) | ||
} | ||
|
||
if (broker.cluster != null) { | ||
TODO("Cluster in JS not yet implemented") | ||
} | ||
} | ||
|
||
override fun createSocket(socket: net.Socket): Socket { | ||
TODO("TLS in JS not yet implemented") | ||
private fun tls.TLSSocket.socketId(): String = "$remoteAddress:$remotePort" | ||
|
||
private fun createSocket(socket: tls.TLSSocket): TLSSocket { | ||
return TLSSocket(socket, selectCallback) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters