mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +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
 |