Mercurial Hosting > luan
diff src/luan/modules/Rpc.luan @ 1204:5d0cbd908582
remove Io socket support
add SSL for Rpc
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 06 Mar 2018 19:48:15 -0700 |
parents | 7f4a12fb7716 |
children | 8f14426f8ada |
line wrap: on
line diff
--- a/src/luan/modules/Rpc.luan Tue Mar 06 13:29:56 2018 -0700 +++ b/src/luan/modules/Rpc.luan Tue Mar 06 19:48:15 2018 -0700 @@ -1,4 +1,8 @@ java() +local Socket = require "java:java.net.Socket" +local ServerSocket = require "java:java.net.ServerSocket" +local SSLSocketFactory = require "java:javax.net.ssl.SSLSocketFactory" +local SSLServerSocketFactory = require "java:javax.net.ssl.SSLServerSocketFactory" local RpcClient = require "java:luan.lib.rpc.RpcClient" local RpcServer = require "java:luan.lib.rpc.RpcServer" local RpcCall = require "java:luan.lib.rpc.RpcCall" @@ -27,6 +31,8 @@ Rpc.port = 9101 +Rpc.cipher_suite = "SSL_DH_anon_WITH_RC4_128_MD5" + local function java_args(list) for i,v in ipairs(list) do list[i] = JavaLuan.toJava(v) @@ -75,9 +81,8 @@ return binary_in, len_in end -function Rpc.caller(socket) - local java_socket = socket.java.socket - local client = RpcClient.new(java_socket) +local function rpc_caller(socket) + local client = RpcClient.new(socket) return function(fn_name,...) local args = {...} local binary_in, len_in = encode_binary(args) @@ -111,10 +116,8 @@ Rpc.functions = {} -function Rpc.responder(socket,fns) - fns = fns or Rpc.functions - local java_socket = socket.java.socket - local server = RpcServer.new(java_socket) +local function rpc_responder(socket,fns) + local server = RpcServer.new(socket) local responder = {} function responder.is_closed() return server.isClosed() @@ -156,9 +159,15 @@ return responder end_function -function Rpc.remote_socket(socket_uri) - local socket = Io.uri(socket_uri) - local call = Rpc.caller(socket) +function Rpc.remote(domain) + local socket + if Rpc.cipher_suite == nil then + socket = Socket.new(domain,Rpc.port) + else + socket = SSLSocketFactory.getDefault().createSocket(domain,Rpc.port) + socket.setEnabledCipherSuites{Rpc.cipher_suite} + end + local call = rpc_caller(socket) local mt = {} function mt.__index(_,key) return function(...) @@ -170,21 +179,24 @@ return t end_function -function Rpc.remote(domain) - local socket = "socket:"..domain..":"..Rpc.port - return Rpc.remote_socket(socket) -end_function - function Rpc.serve(port,fns) - local socket_server = Io.socket_server(port or Rpc.port) + port = port or Rpc.port + fns = fns or Rpc.functions + local socket_server + if Rpc.cipher_suite == nil then + socket_server = ServerSocket.new(port) + else + socket_server = SSLServerSocketFactory.getDefault().createServerSocket(port) + socket_server.setEnabledCipherSuites{Rpc.cipher_suite} + end while true do try { function() - local socket = socket_server() + local socket = socket_server.accept() local function server() try { function() - local responder = Rpc.responder(socket) + local responder = rpc_responder(socket,fns) while not responder.is_closed() do responder.respond() end