trackingd and the right IP addresses.
This commit is contained in:
parent
492a4dae34
commit
4ba0b805a2
@ -108,20 +108,6 @@ def ws_http_upgrade(client)
|
||||
Context.context.is_json[client.fd] = false
|
||||
end
|
||||
|
||||
# TODO: if trackerd, send the IP address of the client
|
||||
# if req_service == "tracker"
|
||||
# puts "tracker - sending the IP address"
|
||||
# puts "connection from #{client.remote_address}"
|
||||
# sfd = Context.context.switchtable[client.fd]
|
||||
# # message = IPC::Message.from_json(JSON).to_packet
|
||||
# # => JSON has to include these attributes: mtype, utype, payload
|
||||
# # message = IPC::Message.new mtype, utype, payload
|
||||
# remote_address = client.remote_address.address
|
||||
# message = IPC::Message.new 1, 1.to_u8, "{\"ipaddress\": \"#{remote_address}\"}"
|
||||
# serv = WrappedTCPFileDescriptor.new(fd: sfd, family: Socket::Family::INET)
|
||||
# serv.send message.to_packet
|
||||
# end
|
||||
|
||||
# puts "#{headers_header}\n#{headers.to_s}\r\n"
|
||||
client.send "#{headers_header}\n#{headers.to_s}\r\n"
|
||||
|
||||
@ -134,7 +120,7 @@ def ws_http_upgrade(client)
|
||||
Context.context.fd_to_socket[client.fd] = client
|
||||
Context.context.fd_to_websocket[client.fd] = wsclient
|
||||
|
||||
req_service
|
||||
return req_service, request
|
||||
rescue e
|
||||
puts "#{CRED}Exception in ws_http_upgrade#{CRESET}: #{CBLUE}#{e}#{CRESET}"
|
||||
raise "DROP IT"
|
||||
@ -147,20 +133,46 @@ def handle_new_clients(service, server)
|
||||
client = server.accept
|
||||
|
||||
# 2. upgrade HTTP connections and get the service name in the URI path.
|
||||
req_service = ws_http_upgrade client
|
||||
req_service, request = ws_http_upgrade client
|
||||
|
||||
# 3. connect to the service via ipc_connection_switched
|
||||
serverfd = 0
|
||||
serverfd : Int32 = 0
|
||||
# LibIPC.ipc_connection_switched service.pointer, req_service, client.fd, Pointer(Libc::Int).null
|
||||
LibIPC.ipc_connection_switched service.pointer, req_service, client.fd, pointerof (serverfd)
|
||||
|
||||
proc_cb_in = ->ws_cb_in(Int32, Pointer(LibIPC::Message), Int16*)
|
||||
proc_cb_out = ->ws_cb_out(Int32, Pointer(LibIPC::Message))
|
||||
spointer = pointerof(serverfd)
|
||||
if req_service == "tracker"
|
||||
req_service = "tracking"
|
||||
end
|
||||
LibIPC.ipc_connection_switched service.pointer, req_service, client.fd, spointer
|
||||
if serverfd == 0
|
||||
raise "Could not connect to #{req_service}"
|
||||
end
|
||||
|
||||
# 4. change client callbacks via ipc_switching_callbacks
|
||||
# only the client callbacks are changed, since the associated server is a simple libipc service
|
||||
proc_cb_in = ->ws_cb_in(Int32, Pointer(LibIPC::Message), Int16*)
|
||||
proc_cb_out = ->ws_cb_out(Int32, Pointer(LibIPC::Message))
|
||||
|
||||
LibIPC.ipc_switching_callbacks service.pointer, client.fd, proc_cb_in, proc_cb_out
|
||||
|
||||
# 5. In case the requested service is trackingd,
|
||||
# the websocketd has to provide the IP address as the first message.
|
||||
if req_service == "tracking"
|
||||
# The proxy is configured to provide the X-Real-IP in the headers.
|
||||
# If not found, we use the client address from the socket.
|
||||
real_ip_address = request.headers["X-Real-IP"] || client.remote_address.address
|
||||
|
||||
puts "trackingd - sending the IP address #{real_ip_address} to fd #{serverfd}"
|
||||
# sfd = Context.context.switchtable[client.fd]
|
||||
# message = IPC::Message.from_json(JSON).to_packet
|
||||
# => JSON has to include these attributes: mtype, utype, payload
|
||||
# message = IPC::Message.new mtype, utype, payload
|
||||
# remote_address = client.remote_address.address
|
||||
message = IPC::Message.new serverfd, 1, 1.to_u8, "{\"ipaddress\": \"#{real_ip_address}\"}"
|
||||
service.send message
|
||||
# serv = WrappedTCPFileDescriptor.new(fd: serverfd, family: Socket::Family::INET)
|
||||
# serv.send message.to_packet
|
||||
end
|
||||
|
||||
info "#{CBLUE}new client:#{CRESET} #{client.fd}"
|
||||
rescue e
|
||||
puts "Exception in handle_new_client: #{CRED}#{e}#{CRESET}"
|
||||
|
Loading…
Reference in New Issue
Block a user