Files
linguist/samples/Ruby/mdata_server.fcgi
Arfon Smith 9e50e188a8 Merge branch 'master' into 1233-local
Conflicts:
	lib/linguist/language.rb
	lib/linguist/languages.yml
	lib/linguist/samples.json
2014-11-01 10:04:22 -05:00

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