phprpc 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +13 -0
- data/LICENSE +165 -0
- data/README +46 -0
- data/examples/client.rb +15 -0
- data/examples/server.rb +17 -0
- data/lib/crypt/xxtea.rb +112 -0
- data/lib/dhparams/1024.dhp +1 -0
- data/lib/dhparams/128.dhp +1 -0
- data/lib/dhparams/1536.dhp +1 -0
- data/lib/dhparams/160.dhp +1 -0
- data/lib/dhparams/192.dhp +1 -0
- data/lib/dhparams/2048.dhp +1 -0
- data/lib/dhparams/256.dhp +1 -0
- data/lib/dhparams/3072.dhp +1 -0
- data/lib/dhparams/4096.dhp +1 -0
- data/lib/dhparams/512.dhp +1 -0
- data/lib/dhparams/768.dhp +1 -0
- data/lib/dhparams/96.dhp +1 -0
- data/lib/php/formator.rb +454 -0
- data/lib/phprpc.rb +65 -0
- data/lib/phprpc/base_server.rb +392 -0
- data/lib/phprpc/cgi_server.rb +46 -0
- data/lib/phprpc/client.rb +268 -0
- data/lib/phprpc/ebb_server.rb +89 -0
- data/lib/phprpc/fake_server.rb +50 -0
- data/lib/phprpc/fcgi_server.rb +125 -0
- data/lib/phprpc/lsapi_server.rb +101 -0
- data/lib/phprpc/mongrel_server.rb +168 -0
- data/lib/phprpc/scgi_server.rb +134 -0
- data/lib/phprpc/server.rb +55 -0
- data/lib/phprpc/thin_server.rb +161 -0
- data/lib/phprpc/webrick_server.rb +139 -0
- data/lib/powmod.rb +39 -0
- metadata +91 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
############################################################
|
2
|
+
# #
|
3
|
+
# The implementation of PHPRPC Protocol 3.0 #
|
4
|
+
# #
|
5
|
+
# server.rb #
|
6
|
+
# #
|
7
|
+
# Release 3.0.0 #
|
8
|
+
# Copyright (c) 2005-2008 by Team-PHPRPC #
|
9
|
+
# #
|
10
|
+
# WebSite: http://www.phprpc.org/ #
|
11
|
+
# http://www.phprpc.net/ #
|
12
|
+
# http://www.phprpc.com/ #
|
13
|
+
# http://sourceforge.net/projects/php-rpc/ #
|
14
|
+
# #
|
15
|
+
# Authors: Ma Bingyao <andot@ujn.edu.cn> #
|
16
|
+
# #
|
17
|
+
# This file may be distributed and/or modified under the #
|
18
|
+
# terms of the GNU Lesser General Public License (LGPL) #
|
19
|
+
# version 3.0 as published by the Free Software Foundation #
|
20
|
+
# and appearing in the included file LICENSE. #
|
21
|
+
# #
|
22
|
+
############################################################
|
23
|
+
#
|
24
|
+
# PHPRPC Server library.
|
25
|
+
#
|
26
|
+
# Copyright (C) 2005-2008 Ma Bingyao <andot@ujn.edu.cn>
|
27
|
+
# Version: 3.0
|
28
|
+
# LastModified: Sep 13, 2008
|
29
|
+
# This library is free. You can redistribute it and/or modify it.
|
30
|
+
|
31
|
+
module PHPRPC
|
32
|
+
|
33
|
+
autoload :CGIServer, 'phprpc/cgi_server'
|
34
|
+
autoload :MongrelServer, 'phprpc/mongrel_server'
|
35
|
+
autoload :ThinServer, 'phprpc/thin_server'
|
36
|
+
autoload :FCGIServer, 'phprpc/fcgi_server'
|
37
|
+
autoload :SCGIServer, 'phprpc/scgi_server'
|
38
|
+
autoload :LSAPIServer, 'phprpc/lsapi_server'
|
39
|
+
autoload :EbbServer, 'phprpc/ebb_server'
|
40
|
+
autoload :WEBrickServer, 'phprpc/webrick_server'
|
41
|
+
autoload :FakeServer, 'phprpc/fake_server'
|
42
|
+
|
43
|
+
ARGV[0] = '' if ARGV[0].nil?
|
44
|
+
Server = case ARGV[0].downcase
|
45
|
+
when 'mongrel' then MongrelServer
|
46
|
+
when 'thin' then ThinServer
|
47
|
+
when 'fcgi' then FCGIServer
|
48
|
+
when 'scgi' then SCGIServer
|
49
|
+
when 'lsapi' then LSAPIServer
|
50
|
+
when 'ebb' then EbbServer
|
51
|
+
when 'webrick' then WEBrickServer
|
52
|
+
else (ENV['GATEWAY_INTERFACE'] =~ /CGI\/\d.\d/ ? CGIServer : FakeServer)
|
53
|
+
end # class Server
|
54
|
+
|
55
|
+
end # module PHPRPC
|
@@ -0,0 +1,161 @@
|
|
1
|
+
############################################################
|
2
|
+
# #
|
3
|
+
# The implementation of PHPRPC Protocol 3.0 #
|
4
|
+
# #
|
5
|
+
# thin_server.rb #
|
6
|
+
# #
|
7
|
+
# Release 3.0.0 #
|
8
|
+
# Copyright (c) 2005-2008 by Team-PHPRPC #
|
9
|
+
# #
|
10
|
+
# WebSite: http://www.phprpc.org/ #
|
11
|
+
# http://www.phprpc.net/ #
|
12
|
+
# http://www.phprpc.com/ #
|
13
|
+
# http://sourceforge.net/projects/php-rpc/ #
|
14
|
+
# #
|
15
|
+
# Authors: Ma Bingyao <andot@ujn.edu.cn> #
|
16
|
+
# #
|
17
|
+
# This file may be distributed and/or modified under the #
|
18
|
+
# terms of the GNU Lesser General Public License (LGPL) #
|
19
|
+
# version 3.0 as published by the Free Software Foundation #
|
20
|
+
# and appearing in the included file LICENSE. #
|
21
|
+
# #
|
22
|
+
############################################################
|
23
|
+
#
|
24
|
+
# PHPRPC ThinServer library.
|
25
|
+
#
|
26
|
+
# Copyright (C) 2005-2008 Ma Bingyao <andot@ujn.edu.cn>
|
27
|
+
# Version: 3.0
|
28
|
+
# LastModified: Sep 14, 2008
|
29
|
+
# This library is free. You can redistribute it and/or modify it.
|
30
|
+
|
31
|
+
require 'thin'
|
32
|
+
require "phprpc/base_server"
|
33
|
+
|
34
|
+
module PHPRPC
|
35
|
+
|
36
|
+
class ThinServer < BaseServer
|
37
|
+
|
38
|
+
def initialize(options = {})
|
39
|
+
super()
|
40
|
+
@options = {
|
41
|
+
:address => '0.0.0.0',
|
42
|
+
:port => Thin::Server::DEFAULT_PORT,
|
43
|
+
:timeout => Thin::Server::DEFAULT_TIMEOUT,
|
44
|
+
:daemonize => false,
|
45
|
+
:log => 'log/thin.log',
|
46
|
+
:pid => 'log/thin.pid',
|
47
|
+
:max_conns => Thin::Server::DEFAULT_MAXIMUM_CONNECTIONS,
|
48
|
+
:max_persistent_conns => Thin::Server::DEFAULT_MAXIMUM_PERSISTENT_CONNECTIONS,
|
49
|
+
:threaded => false,
|
50
|
+
:chdir => Dir.pwd,
|
51
|
+
:session_mode => :file,
|
52
|
+
:path => "/",
|
53
|
+
:expire_after => 1800,
|
54
|
+
:debug => false,
|
55
|
+
:trace => false,
|
56
|
+
}.update(options)
|
57
|
+
@opts = OptionParser.new
|
58
|
+
@opts.banner = "Usage: #{@opts.program_name} thin [options]"
|
59
|
+
@opts.separator ""
|
60
|
+
@opts.separator "Server options:"
|
61
|
+
@opts.on("-a", "--address HOST", "Bind to HOST address (default: #{@options[:address]})") { |host| @options[:address] = host }
|
62
|
+
@opts.on("-p", "--port PORT", "Use PORT (default: #{@options[:port]})") { |port| @options[:port] = port.to_i }
|
63
|
+
@opts.on("-S", "--socket FILE", "Bind to unix domain socket") { |file| @options[:socket] = file }
|
64
|
+
@opts.on("-y", "--swiftiply [KEY]", "Run using swiftiply") { |key| @options[:swiftiply] = key }
|
65
|
+
@opts.on("-c", "--chdir DIR", "Change to dir before starting") { |dir| @options[:chdir] = File.expand_path(dir) }
|
66
|
+
@opts.on("--stats PATH", "Mount the Stats adapter under PATH") { |path| @options[:stats] = path }
|
67
|
+
unless Thin.win? # Daemonizing not supported on Windows
|
68
|
+
@opts.separator ""
|
69
|
+
@opts.separator "Daemon options:"
|
70
|
+
@opts.on("-d", "--daemonize", "Run daemonized in the background") { @options[:daemonize] = true }
|
71
|
+
@opts.on("-l", "--log FILE", "File to redirect output", "(default: #{@options[:log]})") { |file| @options[:log] = file }
|
72
|
+
@opts.on("-P", "--pid FILE", "File to store PID", "(default: #{@options[:pid]})") { |file| @options[:pid] = file }
|
73
|
+
@opts.on("-u", "--user NAME", "User to run daemon as (use with -g)") { |user| @options[:user] = user }
|
74
|
+
@opts.on("-g", "--group NAME", "Group to run daemon as (use with -u)") { |group| @options[:group] = group }
|
75
|
+
end
|
76
|
+
@opts.separator ""
|
77
|
+
@opts.separator "Tuning options:"
|
78
|
+
@opts.on("-b", "--backend CLASS", "Backend to use, full classname") { |name| @options[:backend] = name }
|
79
|
+
@opts.on("-t", "--timeout SEC", "Request or command timeout in sec", "(default: #{@options[:timeout]})") { |sec| @options[:timeout] = sec.to_i }
|
80
|
+
@opts.on("--max-conns NUM", "Maximum number of connections", "(default: #{@options[:max_conns]})",
|
81
|
+
"Might require sudo to set higher then 1024") { |num| @options[:max_conns] = num.to_i } unless Thin.win?
|
82
|
+
@opts.on("--max-persistent-conns NUM", "Maximum number of persistent connections",
|
83
|
+
"(default: #{@options[:max_persistent_conns]})") { |num| @options[:max_persistent_conns] = num.to_i }
|
84
|
+
@opts.on("--threaded", "Call the Rack application in threads", "[experimental]") { @options[:threaded] = true }
|
85
|
+
@opts.separator ""
|
86
|
+
@opts.separator "Session options:"
|
87
|
+
@opts.on('-s', '--session-mode MODE', [:file, :memcache, :pool], "Select Session mode (file, memcache, pool)", "(default: #{@options[:session_mode].to_s})") { |mode| @options[:session_mode] = mode }
|
88
|
+
@opts.on('-e','--expire-after TIME', Integer, "Session expire after (default: #{@options[:expire_after]})") { |time| @options[:expire_after] = time }
|
89
|
+
@opts.on('-m','--memcache_server SERVER', String, "Memcache server used by session in", "memcache mode (default: localhost:11211)") { |server| @options[:memcache_server] = server }
|
90
|
+
@opts.on('--prefix PATH', String, "Mount the PHPRPC Server under PATH", "(start with /)") { |path| @options[:path] = path }
|
91
|
+
@opts.separator ""
|
92
|
+
@opts.separator "Common options:"
|
93
|
+
@opts.on_tail("-D", "--debug", "Set debbuging on") { @options[:debug] = true }
|
94
|
+
@opts.on_tail("-V", "--trace", "Set tracing on (log raw request/response)") { @options[:trace] = true }
|
95
|
+
@opts.on_tail("-?", "-h", "--help", "Show this message") { puts @opts; exit }
|
96
|
+
@opts.on_tail('-v', '--version', "Show version") { puts Thin::SERVER; exit }
|
97
|
+
begin
|
98
|
+
@opts.parse!(ARGV)
|
99
|
+
rescue OptionParser::ParseError
|
100
|
+
puts @opts
|
101
|
+
exit
|
102
|
+
end
|
103
|
+
@app = PHPRPC::BaseServer.new
|
104
|
+
self.debug = @options[:debug]
|
105
|
+
end
|
106
|
+
|
107
|
+
def start()
|
108
|
+
@options[:backend] = eval(@options[:backend], TOPLEVEL_BINDING) if @options[:backend]
|
109
|
+
app = self
|
110
|
+
if [:memcache, :pool].include?(@options[:session_mode]) then
|
111
|
+
begin
|
112
|
+
require 'rack'
|
113
|
+
if @options[:session_mode] == :memcache then
|
114
|
+
app = Rack::Session::Memcache.new(self, @options)
|
115
|
+
else
|
116
|
+
app = Rack::Session::Pool.new(self, @options)
|
117
|
+
end
|
118
|
+
rescue Exception
|
119
|
+
app = self
|
120
|
+
end
|
121
|
+
end
|
122
|
+
Dir.chdir(@options[:chdir])
|
123
|
+
Thin::Logging.debug = @options[:debug]
|
124
|
+
Thin::Logging.trace = @options[:trace]
|
125
|
+
server = Thin::Server.new(@options[:socket] || @options[:address], # Server detects kind of socket
|
126
|
+
@options[:port], # Port ignored on UNIX socket
|
127
|
+
@options,
|
128
|
+
app)
|
129
|
+
|
130
|
+
# Set options
|
131
|
+
server.pid_file = @options[:pid]
|
132
|
+
server.log_file = @options[:log]
|
133
|
+
server.timeout = @options[:timeout]
|
134
|
+
server.maximum_connections = @options[:max_conns]
|
135
|
+
server.maximum_persistent_connections = @options[:max_persistent_conns]
|
136
|
+
server.threaded = @options[:threaded]
|
137
|
+
|
138
|
+
# Detach the process, after this line the current process returns
|
139
|
+
server.daemonize if @options[:daemonize]
|
140
|
+
|
141
|
+
# +config+ must be called before changing privileges since it might require superuser power.
|
142
|
+
server.config
|
143
|
+
|
144
|
+
server.change_privilege @options[:user], @options[:group] if @options[:user] && @options[:group]
|
145
|
+
|
146
|
+
# If a prefix is required, wrap in Rack URL mapper
|
147
|
+
server.app = Rack::URLMap.new(@options[:path] => server.app) if @options[:path]
|
148
|
+
|
149
|
+
# If a stats URL is specified, wrap in Stats adapter
|
150
|
+
server.app = Thin::Stats::Adapter.new(server.app, @options[:stats]) if @options[:stats]
|
151
|
+
|
152
|
+
# Register restart procedure which just start another process with same options,
|
153
|
+
# so that's why this is done here.
|
154
|
+
server.on_restart { Thin::Command.run(:start, @options) }
|
155
|
+
|
156
|
+
server.start
|
157
|
+
end
|
158
|
+
|
159
|
+
end # class ThinServer
|
160
|
+
|
161
|
+
end # module PHPRPC
|
@@ -0,0 +1,139 @@
|
|
1
|
+
############################################################
|
2
|
+
# #
|
3
|
+
# The implementation of PHPRPC Protocol 3.0 #
|
4
|
+
# #
|
5
|
+
# webrick_server.rb #
|
6
|
+
# #
|
7
|
+
# Release 3.0.0 #
|
8
|
+
# Copyright (c) 2005-2008 by Team-PHPRPC #
|
9
|
+
# #
|
10
|
+
# WebSite: http://www.phprpc.org/ #
|
11
|
+
# http://www.phprpc.net/ #
|
12
|
+
# http://www.phprpc.com/ #
|
13
|
+
# http://sourceforge.net/projects/php-rpc/ #
|
14
|
+
# #
|
15
|
+
# Authors: Ma Bingyao <andot@ujn.edu.cn> #
|
16
|
+
# #
|
17
|
+
# This file may be distributed and/or modified under the #
|
18
|
+
# terms of the GNU Lesser General Public License (LGPL) #
|
19
|
+
# version 3.0 as published by the Free Software Foundation #
|
20
|
+
# and appearing in the included file LICENSE. #
|
21
|
+
# #
|
22
|
+
############################################################
|
23
|
+
#
|
24
|
+
# PHPRPC WEBrickServer library.
|
25
|
+
#
|
26
|
+
# Copyright (C) 2005-2008 Ma Bingyao <andot@ujn.edu.cn>
|
27
|
+
# Version: 3.0
|
28
|
+
# LastModified: Sep 12, 2008
|
29
|
+
# This library is free. You can redistribute it and/or modify it.
|
30
|
+
|
31
|
+
require 'webrick'
|
32
|
+
require "phprpc/base_server"
|
33
|
+
|
34
|
+
module PHPRPC
|
35
|
+
|
36
|
+
class WEBrickServlet < BaseServer
|
37
|
+
|
38
|
+
def get_instance(*a)
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
def service(request, response)
|
43
|
+
env = request.meta_vars
|
44
|
+
env.delete_if { |k, v| v.nil? }
|
45
|
+
env["HTTPS"] = ENV["HTTPS"]
|
46
|
+
env["rack.input"] = StringIO.new(request.body.to_s)
|
47
|
+
env['rack.multithread'] = true # this variable only used for rack pool session on debug mode
|
48
|
+
env["rack.url_scheme"] = ["yes", "on", "1"].include?(ENV["HTTPS"]) ? "https" : "http"
|
49
|
+
env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
|
50
|
+
env["QUERY_STRING"] ||= ""
|
51
|
+
env["REQUEST_PATH"] ||= "/"
|
52
|
+
status, headers, body = @app.call(env)
|
53
|
+
response.status = status.to_i
|
54
|
+
headers.each { |k, v| response[k] = v }
|
55
|
+
response.body = body
|
56
|
+
end
|
57
|
+
|
58
|
+
end # class WEBrickServlet
|
59
|
+
|
60
|
+
class WEBrickServer < WEBrickServlet
|
61
|
+
|
62
|
+
def initialize(options = {})
|
63
|
+
super()
|
64
|
+
@app = self
|
65
|
+
@options = {
|
66
|
+
:BindAddress => '0.0.0.0',
|
67
|
+
:Port => 3000,
|
68
|
+
:Logger => nil,
|
69
|
+
:MaxClients => 100,
|
70
|
+
:RequestTimeout => 30,
|
71
|
+
:session_mode => :file,
|
72
|
+
:path => "/",
|
73
|
+
:expire_after => 1800,
|
74
|
+
}.update(options)
|
75
|
+
@opts = OptionParser.new
|
76
|
+
@opts.banner = "Usage: #{@opts.program_name} webrick [options]"
|
77
|
+
@opts.separator ""
|
78
|
+
@opts.separator "Server options:"
|
79
|
+
@opts.on('-a', '--address IP', String, "Address to bind to (default: #{@options[:BindAddress]})") { |ip| @options[:BindAddress] = ip }
|
80
|
+
@opts.on('-p', '--port PORT', Integer, "Which port to bind to (default: #{@options[:Port]})") { |port| @options[:Port] = port }
|
81
|
+
@opts.on('-l', '--log FILE', String, "File to redirect output") { |file| @options[:Logger] = WEBrick::Log.new(file); }
|
82
|
+
@opts.on('-L', '--accesslog FILE', String, "File to redirect access info") { |file|
|
83
|
+
file = open(file, "a+")
|
84
|
+
@options[:AccessLog] = [
|
85
|
+
[ file, WEBrick::AccessLog::COMMON_LOG_FORMAT ],
|
86
|
+
[ file, WEBrick::AccessLog::REFERER_LOG_FORMAT ]
|
87
|
+
]
|
88
|
+
}
|
89
|
+
@opts.separator ""
|
90
|
+
@opts.separator "Tuning options:"
|
91
|
+
@opts.on('-n', '--max-clients INT', Integer, "Maximum number of the concurrent", "connections (default: #{@options[:MaxClients]})") { |num| @options[:MaxClients] = num }
|
92
|
+
@opts.on('-t', '--timeout TIME', Integer, "Request timeout (in seconds)", "(default: #{@options[:RequestTimeout]})") { |time| @options[:RequestTimeout] = time }
|
93
|
+
@opts.separator ""
|
94
|
+
@opts.separator "Session options:"
|
95
|
+
@opts.on('-s', '--session-mode MODE', [:file, :memcache, :pool], "Select Session mode (file, memcache, pool)", "(default: #{@options[:session_mode].to_s})") { |mode| @options[:session_mode] = mode }
|
96
|
+
@opts.on('-e','--expire-after TIME', Integer, "Session expire after (default: #{@options[:expire_after]})") { |time| @options[:expire_after] = time }
|
97
|
+
@opts.on('-m','--memcache_server SERVER', String, "Memcache server used by session in", "memcache mode (default: localhost:11211)") { |server| @options[:memcache_server] = server }
|
98
|
+
@opts.on('--prefix PATH', String, "Mount the PHPRPC Server under PATH", "(start with /)") { |path| @options[:path] = path }
|
99
|
+
@opts.separator ""
|
100
|
+
@opts.separator "Common options:"
|
101
|
+
@opts.on_tail('-D', '--debug', "Set debbuging on (default: disabled)") { self.debug = true }
|
102
|
+
@opts.on_tail('-?', '-h', '--help', "Show this help message.") { puts @opts; exit }
|
103
|
+
@opts.on_tail('-v', '--version', "Show version") { puts "WEBrick/#{WEBrick::VERSION} (Ruby/#{RUBY_VERSION}/#{RUBY_RELEASE_DATE})"; exit }
|
104
|
+
begin
|
105
|
+
@opts.parse!(ARGV)
|
106
|
+
rescue OptionParser::ParseError
|
107
|
+
puts @opts
|
108
|
+
exit
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def start
|
113
|
+
if [:memcache, :pool].include?(@options[:session_mode]) then
|
114
|
+
old_app = @app
|
115
|
+
begin
|
116
|
+
require 'rubygems'
|
117
|
+
require 'rack'
|
118
|
+
if @options[:session_mode] == :memcache then
|
119
|
+
@app = Rack::Session::Memcache.new(@app, @options)
|
120
|
+
else
|
121
|
+
@app = Rack::Session::Pool.new(@app, @options)
|
122
|
+
end
|
123
|
+
rescue Exception
|
124
|
+
@app = old_app
|
125
|
+
end
|
126
|
+
end
|
127
|
+
@options.delete(:ServerType)
|
128
|
+
@options.delete(:DocumentRoot)
|
129
|
+
@options.delete(:RequestCallback)
|
130
|
+
@options.delete(:RequestHandler)
|
131
|
+
server = WEBrick::HTTPServer.new(@options)
|
132
|
+
server.mount(@options[:path], self)
|
133
|
+
trap(:INT) { server.shutdown }
|
134
|
+
server.start
|
135
|
+
end
|
136
|
+
|
137
|
+
end # class WEBrickServer
|
138
|
+
|
139
|
+
end # module PHPRPC
|
data/lib/powmod.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
############################################################
|
2
|
+
# #
|
3
|
+
# The implementation of PHPRPC Protocol 3.0 #
|
4
|
+
# #
|
5
|
+
# powmod.rb #
|
6
|
+
# #
|
7
|
+
# Release 3.0.0 #
|
8
|
+
# Copyright (c) 2005-2008 by Team-PHPRPC #
|
9
|
+
# #
|
10
|
+
# WebSite: http://www.phprpc.org/ #
|
11
|
+
# http://www.phprpc.net/ #
|
12
|
+
# http://www.phprpc.com/ #
|
13
|
+
# http://sourceforge.net/projects/php-rpc/ #
|
14
|
+
# #
|
15
|
+
# Authors: Ma Bingyao <andot@ujn.edu.cn> #
|
16
|
+
# #
|
17
|
+
# This file may be distributed and/or modified under the #
|
18
|
+
# terms of the GNU Lesser General Public License (LGPL) #
|
19
|
+
# version 3.0 as published by the Free Software Foundation #
|
20
|
+
# and appearing in the included file LICENSE. #
|
21
|
+
# #
|
22
|
+
############################################################
|
23
|
+
#
|
24
|
+
# Math.powmod
|
25
|
+
#
|
26
|
+
# Copyright (C) 2005-2008 Ma Bingyao <andot@ujn.edu.cn>
|
27
|
+
# Version: 1.0
|
28
|
+
# LastModified: Aug 21, 2008
|
29
|
+
# This library is free. You can redistribute it and/or modify it.
|
30
|
+
|
31
|
+
def Math.powmod(x, y, z)
|
32
|
+
r = 1
|
33
|
+
while y > 0
|
34
|
+
r = (r * x) % z if (y & 1) == 1
|
35
|
+
x = (x * x) % z
|
36
|
+
y >>= 1
|
37
|
+
end
|
38
|
+
return r
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: phprpc
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- MA Bingyao ( andot )
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-09-16 00:00:00 +08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: andot@ujn.edu.cn
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- examples/client.rb
|
26
|
+
- examples/server.rb
|
27
|
+
- lib/crypt
|
28
|
+
- lib/crypt/xxtea.rb
|
29
|
+
- lib/dhparams
|
30
|
+
- lib/dhparams/1024.dhp
|
31
|
+
- lib/dhparams/128.dhp
|
32
|
+
- lib/dhparams/1536.dhp
|
33
|
+
- lib/dhparams/160.dhp
|
34
|
+
- lib/dhparams/192.dhp
|
35
|
+
- lib/dhparams/2048.dhp
|
36
|
+
- lib/dhparams/256.dhp
|
37
|
+
- lib/dhparams/3072.dhp
|
38
|
+
- lib/dhparams/4096.dhp
|
39
|
+
- lib/dhparams/512.dhp
|
40
|
+
- lib/dhparams/768.dhp
|
41
|
+
- lib/dhparams/96.dhp
|
42
|
+
- lib/php
|
43
|
+
- lib/php/formator.rb
|
44
|
+
- lib/phprpc
|
45
|
+
- lib/phprpc/base_server.rb
|
46
|
+
- lib/phprpc/cgi_server.rb
|
47
|
+
- lib/phprpc/client.rb
|
48
|
+
- lib/phprpc/ebb_server.rb
|
49
|
+
- lib/phprpc/fake_server.rb
|
50
|
+
- lib/phprpc/fcgi_server.rb
|
51
|
+
- lib/phprpc/lsapi_server.rb
|
52
|
+
- lib/phprpc/mongrel_server.rb
|
53
|
+
- lib/phprpc/scgi_server.rb
|
54
|
+
- lib/phprpc/server.rb
|
55
|
+
- lib/phprpc/thin_server.rb
|
56
|
+
- lib/phprpc/webrick_server.rb
|
57
|
+
- lib/phprpc.rb
|
58
|
+
- lib/powmod.rb
|
59
|
+
- AUTHORS
|
60
|
+
- examples
|
61
|
+
- lib
|
62
|
+
- LICENSE
|
63
|
+
- README
|
64
|
+
has_rdoc: false
|
65
|
+
homepage: http://phprpc.rubyforge.org/
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: "0"
|
76
|
+
version:
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: "0"
|
82
|
+
version:
|
83
|
+
requirements: []
|
84
|
+
|
85
|
+
rubyforge_project: phprpc
|
86
|
+
rubygems_version: 1.2.0
|
87
|
+
signing_key:
|
88
|
+
specification_version: 2
|
89
|
+
summary: PHPRPC is a Remote Procedure Calling protocol that works over the Internet. It is secure and fast. It has a smaller overhead. It is powerful and easy to use. This project is the client and server implementations of the PHPRPC for Ruby.
|
90
|
+
test_files: []
|
91
|
+
|