phprpc 3.0.4 → 3.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/client.rb +11 -1
- data/lib/crypt/xxtea.rb +3 -3
- data/lib/php/formator.rb +45 -45
- data/lib/phprpc.rb +3 -3
- data/lib/phprpc/base_server.rb +78 -74
- data/lib/phprpc/cgi_server.rb +5 -5
- data/lib/phprpc/client.rb +138 -81
- data/lib/phprpc/ebb_server.rb +5 -5
- data/lib/phprpc/fake_server.rb +3 -3
- data/lib/phprpc/fcgi_server.rb +7 -7
- data/lib/phprpc/lsapi_server.rb +7 -7
- data/lib/phprpc/mongrel_server.rb +3 -3
- data/lib/phprpc/scgi_server.rb +3 -3
- data/lib/phprpc/server.rb +9 -8
- data/lib/phprpc/thin_server.rb +5 -5
- data/lib/phprpc/webrick_server.rb +9 -9
- data/lib/powmod.rb +3 -3
- metadata +2 -2
data/examples/client.rb
CHANGED
@@ -6,12 +6,22 @@ client.encryptmode = 2
|
|
6
6
|
client.keylength = 256
|
7
7
|
|
8
8
|
starttime = Time.now
|
9
|
+
|
9
10
|
10.times {
|
11
|
+
# synchronous invoke
|
10
12
|
puts client.add(1, 2)
|
11
13
|
puts client.hello('Ma Bingyao')
|
12
14
|
puts client.sub(1, 2)
|
13
15
|
puts client.use_session('Hello')
|
14
16
|
puts client.use_session(' andot')
|
17
|
+
|
18
|
+
# asynchronous invoke
|
19
|
+
client.add(1, 2) { |result| puts result }
|
20
|
+
client.hello('Ma Bingyao') { |result| puts result }
|
21
|
+
client.sub(1, 2) { |result| puts result }
|
22
|
+
client.use_session('Hello') { |result| puts result }
|
23
|
+
client.use_session(' andot') { |result| puts result }
|
15
24
|
}
|
25
|
+
Thread.list.each { |t| t.join if t != Thread.main }
|
16
26
|
endtime = Time.now
|
17
|
-
puts endtime - starttime
|
27
|
+
puts endtime - starttime
|
data/lib/crypt/xxtea.rb
CHANGED
@@ -4,8 +4,8 @@
|
|
4
4
|
# #
|
5
5
|
# xxtea.rb #
|
6
6
|
# #
|
7
|
-
# Release 3.0.
|
8
|
-
# Copyright
|
7
|
+
# Release 3.0.5 #
|
8
|
+
# Copyright by Team-PHPRPC #
|
9
9
|
# #
|
10
10
|
# WebSite: http://www.phprpc.org/ #
|
11
11
|
# http://www.phprpc.net/ #
|
@@ -23,7 +23,7 @@
|
|
23
23
|
#
|
24
24
|
# XXTEA encryption arithmetic library.
|
25
25
|
#
|
26
|
-
# Copyright
|
26
|
+
# Copyright: Ma Bingyao <andot@ujn.edu.cn>
|
27
27
|
# Version: 1.0
|
28
28
|
# LastModified: Sep 30, 2008
|
29
29
|
# This library is free. You can redistribute it and/or modify it.
|
data/lib/php/formator.rb
CHANGED
@@ -4,8 +4,8 @@
|
|
4
4
|
# #
|
5
5
|
# formator.rb #
|
6
6
|
# #
|
7
|
-
# Release 3.0.
|
8
|
-
# Copyright
|
7
|
+
# Release 3.0.5 #
|
8
|
+
# Copyright by Team-PHPRPC #
|
9
9
|
# #
|
10
10
|
# WebSite: http://www.phprpc.org/ #
|
11
11
|
# http://www.phprpc.net/ #
|
@@ -23,37 +23,37 @@
|
|
23
23
|
#
|
24
24
|
# PHP serialize/unserialize library.
|
25
25
|
#
|
26
|
-
# Copyright
|
26
|
+
# Copyright: Ma Bingyao <andot@ujn.edu.cn>
|
27
27
|
# Version: 1.3
|
28
|
-
# LastModified:
|
28
|
+
# LastModified: Feb 27, 2009
|
29
29
|
# This library is free. You can redistribute it and/or modify it.
|
30
|
-
|
30
|
+
|
31
31
|
require 'stringio'
|
32
32
|
|
33
33
|
module PHP
|
34
|
-
|
34
|
+
|
35
35
|
class Formator
|
36
|
-
|
36
|
+
|
37
37
|
class << self
|
38
|
-
|
38
|
+
|
39
39
|
public
|
40
|
-
|
40
|
+
|
41
41
|
def serialize(obj)
|
42
42
|
_serialize(obj, Array.new(1, nil))
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
def unserialize(str)
|
46
46
|
_unserialize(StringIO.new(str), Array.new)
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
private
|
50
|
-
|
50
|
+
|
51
51
|
@@classCache = Hash.new
|
52
|
-
|
52
|
+
|
53
53
|
def serialize_int(i)
|
54
|
-
(-2147483648..2147483647) === i ? "i:#{i};":
|
54
|
+
(-2147483648..2147483647) === i ? "i:#{i};": serialize_string(i.to_s)
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
def serialize_double(d)
|
58
58
|
case d.infinite?
|
59
59
|
when -1 then 'd:-INF;'
|
@@ -61,11 +61,11 @@ module PHP
|
|
61
61
|
else d.nan? ? 'd:NAN;' : "d:#{d};"
|
62
62
|
end
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
def serialize_string(s)
|
66
66
|
"s:#{s.length}:\"#{s}\";"
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
def serialize_time(time, obj_container)
|
70
70
|
obj_container.push(nil, nil, nil, nil, nil, nil, nil)
|
71
71
|
s = 'O:11:"PHPRPC_Date":7:{'
|
@@ -78,7 +78,7 @@ module PHP
|
|
78
78
|
s << serialize_string('millisecond') << serialize_int(time.usec / 1000)
|
79
79
|
s << '}'
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
def serialize_array(a, obj_container)
|
83
83
|
s = "a:#{a.size}:{"
|
84
84
|
a.each_with_index { |item, index|
|
@@ -86,7 +86,7 @@ module PHP
|
|
86
86
|
}
|
87
87
|
s << '}'
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
def serialize_hash(h, obj_container)
|
91
91
|
s = "a:#{h.size}:{"
|
92
92
|
h.each { |key, value|
|
@@ -98,7 +98,7 @@ module PHP
|
|
98
98
|
}
|
99
99
|
s << '}'
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
def serialize_struct(obj, obj_container)
|
103
103
|
classname = obj.class.to_s
|
104
104
|
classname['Struct::'] = ''
|
@@ -108,9 +108,9 @@ module PHP
|
|
108
108
|
members.each { |member|
|
109
109
|
s << "#{serialize_string(member)}#{_serialize(obj[member], obj_container)}"
|
110
110
|
}
|
111
|
-
s << '}'
|
111
|
+
s << '}'
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
def serialize_object(obj, obj_container)
|
115
115
|
classname = obj.class.to_s.split('::').join('_')
|
116
116
|
@@classCache[classname] = obj.class
|
@@ -142,7 +142,7 @@ module PHP
|
|
142
142
|
end
|
143
143
|
end
|
144
144
|
end
|
145
|
-
|
145
|
+
|
146
146
|
def _serialize(obj, obj_container = nil)
|
147
147
|
obj_id = obj_container.size
|
148
148
|
obj_container.push(nil)
|
@@ -205,15 +205,15 @@ module PHP
|
|
205
205
|
end
|
206
206
|
end
|
207
207
|
end
|
208
|
-
|
208
|
+
|
209
209
|
def get_class(name)
|
210
210
|
begin
|
211
|
-
name.split('.').inject(Object) {|x,y| x.const_get(y) }
|
211
|
+
name.split('.').inject(Object) {|x,y| x.const_get(y) }
|
212
212
|
rescue
|
213
213
|
nil
|
214
|
-
end
|
214
|
+
end
|
215
215
|
end
|
216
|
-
|
216
|
+
|
217
217
|
def get_class2(name, ps, i, c)
|
218
218
|
if i < ps.size then
|
219
219
|
p = ps[i]
|
@@ -227,7 +227,7 @@ module PHP
|
|
227
227
|
get_class(name)
|
228
228
|
end
|
229
229
|
end
|
230
|
-
|
230
|
+
|
231
231
|
def get_class_by_alias(name)
|
232
232
|
if @@classCache.has_key?(name) then
|
233
233
|
@@classCache[name]
|
@@ -249,7 +249,7 @@ module PHP
|
|
249
249
|
end
|
250
250
|
end
|
251
251
|
end
|
252
|
-
|
252
|
+
|
253
253
|
def read_number(string)
|
254
254
|
num = ''
|
255
255
|
loop do
|
@@ -259,7 +259,7 @@ module PHP
|
|
259
259
|
end
|
260
260
|
num
|
261
261
|
end
|
262
|
-
|
262
|
+
|
263
263
|
def unserialize_boolean(string)
|
264
264
|
string.read(1)
|
265
265
|
result = (string.read(1) == true)
|
@@ -282,36 +282,36 @@ module PHP
|
|
282
282
|
else (d.delete('.eE') == d) ? d.to_i : d.to_f
|
283
283
|
end
|
284
284
|
end
|
285
|
-
|
285
|
+
|
286
286
|
def unserialize_string(string)
|
287
287
|
len = unserialize_int(string)
|
288
288
|
string.read(len + 3)[1...-2]
|
289
289
|
end
|
290
|
-
|
290
|
+
|
291
291
|
def unserialize_escaped_string(string)
|
292
292
|
len = unserialize_int(string)
|
293
293
|
s = ''
|
294
294
|
string.read(1)
|
295
|
-
len.times {
|
295
|
+
len.times {
|
296
296
|
c = string.read(1)
|
297
297
|
s << (c == "\\" ? string.read(2).to_i(16).chr : c)
|
298
298
|
}
|
299
299
|
string.read(2)
|
300
300
|
return s
|
301
301
|
end
|
302
|
-
|
302
|
+
|
303
303
|
def unserialize_unicode_string(string)
|
304
304
|
len = unserialize_int(string)
|
305
305
|
s = ''
|
306
306
|
string.read(1)
|
307
|
-
len.times {
|
307
|
+
len.times {
|
308
308
|
c = string.read(1)
|
309
309
|
s << (c == "\\" ? [string.read(4).to_i(16)].pack("U") : c)
|
310
310
|
}
|
311
311
|
string.read(2)
|
312
312
|
return s
|
313
313
|
end
|
314
|
-
|
314
|
+
|
315
315
|
def unserialize_hash(string, obj_container)
|
316
316
|
count = unserialize_int(string)
|
317
317
|
obj = Hash.new
|
@@ -334,7 +334,7 @@ module PHP
|
|
334
334
|
string.read(1)
|
335
335
|
return obj
|
336
336
|
end
|
337
|
-
|
337
|
+
|
338
338
|
def unserialize_key(string)
|
339
339
|
tag = string.read(1)
|
340
340
|
if tag.nil? then
|
@@ -344,10 +344,10 @@ module PHP
|
|
344
344
|
when 's' then unserialize_string(string)
|
345
345
|
when 'S' then unserialize_escaped_string(string)
|
346
346
|
when 'U' then unserialize_unicode_string(string)
|
347
|
-
else raise 'Unexpected Tag: "' + tag + '".'
|
347
|
+
else raise 'Unexpected Tag: "' + tag + '".'
|
348
348
|
end
|
349
349
|
end
|
350
|
-
|
350
|
+
|
351
351
|
def unserialize_date(string, obj_container)
|
352
352
|
obj_id = obj_container.size
|
353
353
|
obj_container.push(nil)
|
@@ -362,7 +362,7 @@ module PHP
|
|
362
362
|
time = Time.mktime(h['year'], h['month'], h['day'], h['hour'], h['minute'], h['second'], h['millisecond'] * 1000)
|
363
363
|
obj_container[obj_id] = time
|
364
364
|
end
|
365
|
-
|
365
|
+
|
366
366
|
def unserialize_object(string, obj_container)
|
367
367
|
classname = unserialize_string(string)
|
368
368
|
string.pos -= 1
|
@@ -397,7 +397,7 @@ module PHP
|
|
397
397
|
obj
|
398
398
|
end
|
399
399
|
end
|
400
|
-
|
400
|
+
|
401
401
|
def unserialize_custom_object(string, obj_container)
|
402
402
|
classname = unserialize_string(string)
|
403
403
|
string.pos -= 1
|
@@ -415,7 +415,7 @@ module PHP
|
|
415
415
|
obj.unserialize(str)
|
416
416
|
obj
|
417
417
|
end
|
418
|
-
|
418
|
+
|
419
419
|
def _unserialize(string, obj_container)
|
420
420
|
tag = string.read(1)
|
421
421
|
if tag.nil? then
|
@@ -460,9 +460,9 @@ module PHP
|
|
460
460
|
end
|
461
461
|
obj
|
462
462
|
end
|
463
|
-
|
463
|
+
|
464
464
|
end # class self
|
465
|
-
|
465
|
+
|
466
466
|
end # class Formator
|
467
|
-
|
467
|
+
|
468
468
|
end # module PHP
|
data/lib/phprpc.rb
CHANGED
@@ -4,8 +4,8 @@
|
|
4
4
|
# #
|
5
5
|
# phprpc.rb #
|
6
6
|
# #
|
7
|
-
# Release 3.0.
|
8
|
-
# Copyright
|
7
|
+
# Release 3.0.5 #
|
8
|
+
# Copyright by Team-PHPRPC #
|
9
9
|
# #
|
10
10
|
# WebSite: http://www.phprpc.org/ #
|
11
11
|
# http://www.phprpc.net/ #
|
@@ -23,7 +23,7 @@
|
|
23
23
|
#
|
24
24
|
# PHPRPC library.
|
25
25
|
#
|
26
|
-
# Copyright
|
26
|
+
# Copyright: Ma Bingyao <andot@ujn.edu.cn>
|
27
27
|
# Version: 3.0
|
28
28
|
# LastModified: Sep 13, 2008
|
29
29
|
# This library is free. You can redistribute it and/or modify it.
|
data/lib/phprpc/base_server.rb
CHANGED
@@ -4,8 +4,8 @@
|
|
4
4
|
# #
|
5
5
|
# base_server.rb #
|
6
6
|
# #
|
7
|
-
# Release 3.0.
|
8
|
-
# Copyright
|
7
|
+
# Release 3.0.5 #
|
8
|
+
# Copyright by Team-PHPRPC #
|
9
9
|
# #
|
10
10
|
# WebSite: http://www.phprpc.org/ #
|
11
11
|
# http://www.phprpc.net/ #
|
@@ -23,9 +23,9 @@
|
|
23
23
|
#
|
24
24
|
# PHPRPC BaseServer library.
|
25
25
|
#
|
26
|
-
# Copyright
|
26
|
+
# Copyright: Ma Bingyao <andot@ujn.edu.cn>
|
27
27
|
# Version: 3.0
|
28
|
-
# LastModified:
|
28
|
+
# LastModified: Mar 8, 2009
|
29
29
|
# This library is free. You can redistribute it and/or modify it.
|
30
30
|
|
31
31
|
require "digest/md5"
|
@@ -34,7 +34,8 @@ require "crypt/xxtea"
|
|
34
34
|
require "powmod"
|
35
35
|
require "cgi"
|
36
36
|
require "cgi/session"
|
37
|
-
require
|
37
|
+
require "optparse"
|
38
|
+
require "thread"
|
38
39
|
|
39
40
|
module PHPRPC
|
40
41
|
|
@@ -46,7 +47,7 @@ module PHPRPC
|
|
46
47
|
|
47
48
|
# Standard internet newline sequence
|
48
49
|
EOL = CR + LF
|
49
|
-
|
50
|
+
|
50
51
|
class BaseServer
|
51
52
|
|
52
53
|
attr_accessor :charset, :debug
|
@@ -55,6 +56,7 @@ module PHPRPC
|
|
55
56
|
@methods = {}
|
56
57
|
@charset = 'utf-8'
|
57
58
|
@debug = $DEBUG
|
59
|
+
@mutex = Mutex.new
|
58
60
|
end
|
59
61
|
|
60
62
|
def add(methodname, obj = nil, aliasname = nil, &block)
|
@@ -84,54 +86,56 @@ module PHPRPC
|
|
84
86
|
body = ''
|
85
87
|
callback = ''
|
86
88
|
encode = true
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
encrypt
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
89
|
+
@mutex.synchronize {
|
90
|
+
session = (env['rack.session'].is_a?(Hash) ? env['rack.session'] : CGI::Session.new(request))
|
91
|
+
begin
|
92
|
+
params = request.params
|
93
|
+
callback = get_base64('phprpc_callback', params)
|
94
|
+
encode = get_boolean('phprpc_encode', params)
|
95
|
+
encrypt = get_encrypt(params)
|
96
|
+
cid = "phprpc_#{(params.key?('phprpc_id') ? params['phprpc_id'][0] : '0')}"
|
97
|
+
if params.key?('phprpc_func') then
|
98
|
+
func = params['phprpc_func'][0].downcase
|
99
|
+
if @methods.key?(func) then
|
100
|
+
hash = get_session(session, cid)
|
101
|
+
if hash.key?('key') then
|
102
|
+
key = hash['key']
|
103
|
+
elsif encrypt > 0 then
|
104
|
+
encrypt = 0
|
105
|
+
raise "Can't find the key for decryption."
|
106
|
+
end
|
107
|
+
ref = get_boolean('phprpc_ref', params)
|
108
|
+
args = get_args(params, key, encrypt)
|
109
|
+
result = encode_string(encrypt_string(PHP::Formator.serialize(invoke(func, args, session)), key, 2, encrypt), encode)
|
110
|
+
body << 'phprpc_result="' << result << '";' << EOL
|
111
|
+
if ref then
|
112
|
+
args = encode_string(encrypt_string(PHP::Formator.serialize(args), key, 1, encrypt), encode)
|
113
|
+
body << 'phprpc_args="' << args << '";' << EOL
|
114
|
+
end
|
115
|
+
else
|
116
|
+
raise "Can't find this function #{func}()."
|
111
117
|
end
|
118
|
+
write_error(body, 0, '', callback, encode)
|
119
|
+
elsif (encrypt != false) and (encrypt != 0) then
|
120
|
+
hash = get_session(session, cid)
|
121
|
+
keylen = get_keylength(params, hash)
|
122
|
+
key_exchange(body, env, request, hash, callback, encode, encrypt, keylen)
|
123
|
+
set_session(session, cid, hash)
|
112
124
|
else
|
113
|
-
|
125
|
+
write_functions(body, callback, encode)
|
114
126
|
end
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
body = ''
|
126
|
-
if @debug then
|
127
|
-
write_error(body, 1, e.backtrace.unshift(e.message).join(EOL), callback, encode)
|
128
|
-
else
|
129
|
-
write_error(body, 1, e.message, callback, encode)
|
127
|
+
rescue Exception => e
|
128
|
+
body = ''
|
129
|
+
if @debug then
|
130
|
+
write_error(body, 1, e.backtrace.unshift(e.message).join(EOL), callback, encode)
|
131
|
+
else
|
132
|
+
write_error(body, 1, e.message, callback, encode)
|
133
|
+
end
|
134
|
+
ensure
|
135
|
+
session.close if session.respond_to?(:close)
|
136
|
+
return [header(request, body), body]
|
130
137
|
end
|
131
|
-
|
132
|
-
session.close if session.respond_to?(:close)
|
133
|
-
return [header(request, body), body]
|
134
|
-
end
|
138
|
+
}
|
135
139
|
end
|
136
140
|
|
137
141
|
private
|
@@ -158,7 +162,7 @@ module PHPRPC
|
|
158
162
|
end
|
159
163
|
|
160
164
|
def encode_string(str, encode = true, flag = true)
|
161
|
-
return str if str == ''
|
165
|
+
return str if str == ''
|
162
166
|
encode ? [str].pack('m').delete!("\n") : add_js_slashes(str, flag)
|
163
167
|
end
|
164
168
|
|
@@ -169,7 +173,7 @@ module PHPRPC
|
|
169
173
|
def decrypt_string(str, key, level, encrypt)
|
170
174
|
(encrypt >= level) ? Crypt::XXTEA.decrypt(str, key) : str
|
171
175
|
end
|
172
|
-
|
176
|
+
|
173
177
|
def header(request, body)
|
174
178
|
h = {
|
175
179
|
'X-Powered-By' => 'PHPRPC Server/3.0',
|
@@ -181,12 +185,12 @@ module PHPRPC
|
|
181
185
|
}
|
182
186
|
output_cookies = request.instance_variable_get(:@output_cookies)
|
183
187
|
if not output_cookies.nil? then
|
184
|
-
h["Set-Cookie"] = output_cookies[0].to_s
|
188
|
+
h["Set-Cookie"] = output_cookies[0].to_s
|
185
189
|
request.instance_variable_set(:@output_cookies, nil)
|
186
190
|
end
|
187
191
|
return h
|
188
192
|
end
|
189
|
-
|
193
|
+
|
190
194
|
def write_url(body, env, request, encode)
|
191
195
|
output_hidden = request.instance_variable_get(:@output_hidden)
|
192
196
|
output_hidden = { env['rack.session.options'][:id] => env['rack.session.options'][:key] } if env['rack.session.options'].is_a?(Hash)
|
@@ -205,7 +209,7 @@ module PHPRPC
|
|
205
209
|
}
|
206
210
|
params = request.params
|
207
211
|
if (params.size > 0) then
|
208
|
-
params.each { |key, values|
|
212
|
+
params.each { |key, values|
|
209
213
|
values.each { |value|
|
210
214
|
url << "#{key}=#{CGI::escape(value)}&"
|
211
215
|
} if not key.index(/^phprpc_/i)
|
@@ -220,14 +224,14 @@ module PHPRPC
|
|
220
224
|
body << 'phprpc_functions="' << encode_string(PHP::Formator.serialize(@methods.keys), encode) << '";' << EOL
|
221
225
|
body << callback
|
222
226
|
end
|
223
|
-
|
227
|
+
|
224
228
|
def write_error(body, errno, errstr, callback, encode)
|
225
229
|
body << 'phprpc_errno="' << errno.to_s << '";' << EOL
|
226
230
|
body << 'phprpc_errstr="' << encode_string(errstr, encode, false) << '";' << EOL
|
227
231
|
body << 'phprpc_output="";' << EOL
|
228
232
|
body << callback
|
229
233
|
end
|
230
|
-
|
234
|
+
|
231
235
|
def get_boolean(name, params)
|
232
236
|
(params.key?(name) ? (params[name][0].downcase != "false") : true)
|
233
237
|
end
|
@@ -235,7 +239,7 @@ module PHPRPC
|
|
235
239
|
def get_base64(name, params)
|
236
240
|
(params.key?(name) ? params[name][0].unpack('m')[0] : '')
|
237
241
|
end
|
238
|
-
|
242
|
+
|
239
243
|
def get_encrypt(params)
|
240
244
|
if params.key?('phprpc_encrypt') then
|
241
245
|
encrypt = params['phprpc_encrypt'][0].downcase
|
@@ -248,7 +252,7 @@ module PHPRPC
|
|
248
252
|
0
|
249
253
|
end
|
250
254
|
end
|
251
|
-
|
255
|
+
|
252
256
|
def get_args(params, key, encrypt)
|
253
257
|
args = []
|
254
258
|
if params.key?('phprpc_args') then
|
@@ -259,7 +263,7 @@ module PHPRPC
|
|
259
263
|
end
|
260
264
|
return args
|
261
265
|
end
|
262
|
-
|
266
|
+
|
263
267
|
def set_session(session, cid, hash)
|
264
268
|
session[cid] = PHP::Formator.serialize(hash)
|
265
269
|
end
|
@@ -272,7 +276,7 @@ module PHPRPC
|
|
272
276
|
{}
|
273
277
|
end
|
274
278
|
end
|
275
|
-
|
279
|
+
|
276
280
|
def get_keylength(params, hash)
|
277
281
|
(params.key?('phprpc_keylen') ? params['phprpc_keylen'][0].to_i : ((hash.key?('keylen')) ? hash['keylen'] : 128))
|
278
282
|
end
|
@@ -297,18 +301,18 @@ module PHPRPC
|
|
297
301
|
end
|
298
302
|
body << callback
|
299
303
|
end
|
300
|
-
|
304
|
+
|
301
305
|
end # class BaseServer
|
302
306
|
|
303
307
|
class Request
|
304
308
|
|
305
309
|
attr_accessor :cookies
|
306
310
|
attr :params
|
307
|
-
|
311
|
+
|
308
312
|
def initialize(env)
|
309
313
|
@params = env["QUERY_STRING"] ? CGI::parse(env["QUERY_STRING"].to_s) : {}
|
310
314
|
if (env['REQUEST_METHOD'] == 'POST' and
|
311
|
-
(env['CONTENT_TYPE'].nil? or
|
315
|
+
(env['CONTENT_TYPE'].nil? or
|
312
316
|
env['CONTENT_TYPE'].split(/\s*[;,]\s*/, 2)[0].downcase ==
|
313
317
|
'application/x-www-form-urlencoded')) then
|
314
318
|
# fix ebb bug, the read method of ebb can't return all bytes from the I/O stream
|
@@ -321,7 +325,7 @@ module PHPRPC
|
|
321
325
|
end
|
322
326
|
@params.update(CGI::parse(input_body))
|
323
327
|
end
|
324
|
-
@cookies = if env["HTTP_COOKIE"] then CGI::Cookie::parse(env["HTTP_COOKIE"].to_s) else {} end
|
328
|
+
@cookies = if env["HTTP_COOKIE"] then CGI::Cookie::parse(env["HTTP_COOKIE"].to_s) else {} end
|
325
329
|
@output_cookies = nil
|
326
330
|
@output_hidden = nil
|
327
331
|
end
|
@@ -332,19 +336,19 @@ module PHPRPC
|
|
332
336
|
value = params[0]
|
333
337
|
if value then value else "" end
|
334
338
|
end
|
335
|
-
|
339
|
+
|
336
340
|
def []=(key, val)
|
337
341
|
@params[key] = val
|
338
342
|
end
|
339
|
-
|
343
|
+
|
340
344
|
def keys
|
341
345
|
@params.keys
|
342
346
|
end
|
343
|
-
|
347
|
+
|
344
348
|
def has_key?(key)
|
345
349
|
@params.has_key?(key)
|
346
350
|
end
|
347
|
-
|
351
|
+
|
348
352
|
alias key? has_key?
|
349
353
|
|
350
354
|
alias include? has_key?
|
@@ -353,15 +357,15 @@ module PHPRPC
|
|
353
357
|
|
354
358
|
|
355
359
|
class DHParams
|
356
|
-
|
360
|
+
|
357
361
|
class << self
|
358
|
-
|
362
|
+
|
359
363
|
def get(length)
|
360
364
|
length = get_nearest(length)
|
361
365
|
dhparams = @dhparams_gen[length]
|
362
366
|
[length, dhparams[rand(dhparams.size)]]
|
363
367
|
end
|
364
|
-
|
368
|
+
|
365
369
|
private
|
366
370
|
|
367
371
|
def init
|
@@ -385,9 +389,9 @@ module PHPRPC
|
|
385
389
|
}
|
386
390
|
return @lengths[j]
|
387
391
|
end
|
388
|
-
|
392
|
+
|
389
393
|
end # class self
|
390
|
-
|
394
|
+
|
391
395
|
end # class DHParams
|
392
396
|
|
393
397
|
end # module PHPRPC
|