mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
69 lines
2.6 KiB
Ruby
Executable File
69 lines
2.6 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
require "xmlrpc/server"
|
|
|
|
# NOTE: force the usage of the pure-ruby version of fcgi.
|
|
# - this is required by the workaround to get fcgi+xmlrpc working together
|
|
FCGI_PURE_RUBY=true
|
|
require 'fcgi'
|
|
|
|
require File.join(File.dirname(__FILE__), '../bt_cast/mdata_echo_server/bt_cast_mdata_server_t.rb')
|
|
|
|
################################################################################
|
|
################################################################################
|
|
# CGI handling for xmlrpc
|
|
################################################################################
|
|
################################################################################
|
|
# - for basic xmlrpc via CGI example
|
|
# - see http://www.ntecs.de/projects/xmlrpc4r/server.html#label-19
|
|
|
|
# create the directory needed for Neoip::Cast_mdata_server_t
|
|
Neoip::Cast_mdata_server_t.create_dir_ifneeded();
|
|
|
|
# init the cgi_server
|
|
cgi_server = XMLRPC::CGIServer.new
|
|
# register all the xmlrpc function
|
|
cgi_server.add_handler("set_cast_mdata_pull") do |web2srv_str, cast_name, cast_privtext, cast_id,
|
|
port_lview, port_pview, uri_pathquery|
|
|
Neoip::Cast_mdata_server_t.set_cast_mdata_pull(web2srv_str, cast_name, cast_privtext, cast_id,
|
|
port_lview, port_pview, uri_pathquery, ENV['REMOTE_ADDR']);
|
|
end
|
|
cgi_server.add_handler("set_cast_mdata_push") do |web2srv_str, cast_name, cast_privtext, cast_mdata|
|
|
Neoip::Cast_mdata_server_t.set_cast_mdata_push(web2srv_str, cast_name, cast_privtext, cast_mdata);
|
|
end
|
|
cgi_server.add_handler("get_cast_mdata") do |cast_name, cast_privhash|
|
|
Neoip::Cast_mdata_server_t.get_cast_mdata(cast_name, cast_privhash);
|
|
end
|
|
cgi_server.add_handler("del_cast_mdata") do |cast_name, cast_privtext|
|
|
Neoip::Cast_mdata_server_t.del_cast_mdata(cast_name, cast_privtext);
|
|
end
|
|
|
|
# handle the unknown/bad formered calls
|
|
cgi_server.set_default_handler do |name, *args|
|
|
raise XMLRPC::FaultException.new(-99, "Method #{name} missing" +
|
|
" or wrong number of parameters!")
|
|
end
|
|
|
|
# server the cgi_server
|
|
#cgi_server.serve
|
|
#exit
|
|
|
|
# experiment at using fast-cgi
|
|
FCGI.each_request do |request|
|
|
# XMLRPC::CGIServer expect some value in ENV[] but FCGI doesnt provides them
|
|
# - so working around by copying them by hand... dirty
|
|
ENV['REMOTE_ADDR'] = request.env['REMOTE_ADDR'];
|
|
ENV['REQUEST_METHOD'] = request.env['REQUEST_METHOD'];
|
|
ENV['CONTENT_TYPE'] = "text/xml";
|
|
ENV['CONTENT_LENGTH'] = "#{request.in.length}";
|
|
|
|
# copy the request in/out into the stdin/stdout to act as a CGI
|
|
$stdin = request.in
|
|
$stdout = request.out
|
|
|
|
# process the cgi itself
|
|
cgi_server.serve
|
|
|
|
# mark the request as finished
|
|
request.finish
|
|
end
|