rfetion 0.5.2 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/rfetion/contact.rb +1 -0
- data/lib/rfetion/fetion.rb +51 -14
- data/lib/rfetion/sipc_message.rb +101 -11
- data/rfetion.gemspec +2 -2
- data/spec/rfetion/fetion_spec.rb +139 -5
- data/spec/rfetion/sipc_message_spec.rb +245 -13
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.3
|
data/lib/rfetion/contact.rb
CHANGED
data/lib/rfetion/fetion.rb
CHANGED
@@ -8,8 +8,8 @@ require 'openssl'
|
|
8
8
|
require 'logger'
|
9
9
|
|
10
10
|
class Fetion
|
11
|
-
attr_accessor :mobile_no, :sid, :password
|
12
|
-
attr_reader :user_id, :
|
11
|
+
attr_accessor :mobile_no, :sid, :password, :seq, :ssic, :guid, :uri
|
12
|
+
attr_reader :user_id, :contacts, :buddy_lists, :response, :nickname, :receives
|
13
13
|
|
14
14
|
FETION_URL = 'http://221.176.31.39/ht/sd.aspx'
|
15
15
|
FETION_LOGIN_URL = 'https://uid.fetion.com.cn/ssiportal/SSIAppSignInV4.aspx?mobileno=%mobileno%sid=%sid%&domains=fetion.com.cn;m161.com.cn;www.ikuwa.cn&v4digest-type=1&v4digest=%digest%'
|
@@ -48,6 +48,16 @@ class Fetion
|
|
48
48
|
fetion.logout
|
49
49
|
end
|
50
50
|
|
51
|
+
def Fetion.keep_alive(options)
|
52
|
+
Fetion.open(options) do
|
53
|
+
get_contacts
|
54
|
+
keep_alive
|
55
|
+
sleep(15)
|
56
|
+
keep_alive
|
57
|
+
p receives
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
51
61
|
# options
|
52
62
|
# mobile_no
|
53
63
|
# sid
|
@@ -283,6 +293,31 @@ class Fetion
|
|
283
293
|
@logger.info "fetion logout success"
|
284
294
|
end
|
285
295
|
|
296
|
+
def create_session(sipc_response)
|
297
|
+
@logger.info "fetion create session"
|
298
|
+
|
299
|
+
sipc_response = curl_exec(SipcMessage.create_session(self, sipc_response))
|
300
|
+
pulse unless sipc_response
|
301
|
+
|
302
|
+
@logger.info "fetion create session success"
|
303
|
+
end
|
304
|
+
|
305
|
+
def session_connected(sipc_response)
|
306
|
+
@logger.info "fetion session connected"
|
307
|
+
|
308
|
+
curl_exec(SipcMessage.session_connected(self, sipc_response))
|
309
|
+
|
310
|
+
@logger.info "fetion session connected success"
|
311
|
+
end
|
312
|
+
|
313
|
+
def msg_received(message_response)
|
314
|
+
@logger.info "fetion msg received"
|
315
|
+
|
316
|
+
curl_exec(SipcMessage.msg_received(self, message_response))
|
317
|
+
|
318
|
+
@logger.info "fetion msg received success"
|
319
|
+
end
|
320
|
+
|
286
321
|
def parse_ssic(response)
|
287
322
|
raise Fetion::LoginException.new('Fetion Error: Login failed.') unless Net::HTTPSuccess === response
|
288
323
|
raise Fetion::LoginException.new('Fetion Error: No ssic found in cookie.') unless response['set-cookie'] =~ /ssic=(.*);/
|
@@ -332,9 +367,9 @@ class Fetion
|
|
332
367
|
sipc_response = SipcMessage.sipc_response(response.body, self)
|
333
368
|
|
334
369
|
if sipc_response
|
335
|
-
raise Fetion::SipcException.new(sipc_response, "request_url: #{url}, request_body: #{body}, sipc_response: #{sipc_response}") unless
|
370
|
+
raise Fetion::SipcException.new(sipc_response, "request_url: #{url}, request_body: #{body}, sipc_response: #{sipc_response}") unless sipc_response.class == expected
|
336
371
|
|
337
|
-
if sipc_response.
|
372
|
+
if sipc_response.first_line =~ /401/
|
338
373
|
# unauthorized, get nonce, key and signature
|
339
374
|
raise Fetion::NoNonceException.new("Fetion Error: No nonce found") unless response.body =~ /nonce="(.*?)",key="(.*?)",signature="(.*?)"/
|
340
375
|
@nonce = $1
|
@@ -346,6 +381,10 @@ class Fetion
|
|
346
381
|
@logger.debug "key: #{@key}"
|
347
382
|
@logger.debug "signature: #{@signature}"
|
348
383
|
@logger.debug "response: #{@response}"
|
384
|
+
elsif sipc_response.contain?('I')
|
385
|
+
create_session(sipc_response)
|
386
|
+
elsif sipc_response.contain?('O')
|
387
|
+
session_connected(sipc_response)
|
349
388
|
else
|
350
389
|
response.body.scan(%r{<results>.*?</results>}).each do |results|
|
351
390
|
doc = Nokogiri::XML(results)
|
@@ -355,11 +394,9 @@ class Fetion
|
|
355
394
|
end
|
356
395
|
doc.root.xpath("/results/user-info/contact-list/buddy-lists/buddy-list").each do |buddy_list|
|
357
396
|
@buddy_lists << Fetion::BuddyList.parse(buddy_list)
|
358
|
-
@logger.debug "buddy_lists: #{@buddy_lists.inspect}"
|
359
397
|
end
|
360
398
|
doc.root.xpath("/results/user-info/contact-list/buddies/b").each do |buddy|
|
361
399
|
@buddies << {:uri => buddy["u"]}
|
362
|
-
@logger.debug "buddies: #{@buddies.inspect}"
|
363
400
|
end
|
364
401
|
end
|
365
402
|
|
@@ -376,11 +413,11 @@ class Fetion
|
|
376
413
|
end
|
377
414
|
|
378
415
|
receive_messages = response.body.scan(%r{M #{@sid} SIP-C/4.0.*?BN}m)
|
379
|
-
receive_messages = response.body.scan(%r{M #{@sid} SIP-C/4.0.*?SIPP
|
416
|
+
receive_messages = response.body.scan(%r{M #{@sid} SIP-C/4.0.*?SIPP\r?\n?$}m) if receive_messages.empty?
|
380
417
|
receive_messages.each do |message_response|
|
381
|
-
message_header, message_content = message_response.split(
|
418
|
+
message_header, message_content = message_response.split(/\r\n\r\n/)
|
382
419
|
sip = sent_at = length = nil
|
383
|
-
message_header.split(
|
420
|
+
message_header.split(/\r\n/).each do |line|
|
384
421
|
case line
|
385
422
|
when /^F: sip:(.+)/ then sip = $1
|
386
423
|
when /^D: (.+)/ then sent_at = Time.parse($1)
|
@@ -389,10 +426,11 @@ class Fetion
|
|
389
426
|
end
|
390
427
|
text = message_content.slice(0, length)
|
391
428
|
@receives << Fetion::Message.new(sip, sent_at, text)
|
429
|
+
msg_received(message_response)
|
392
430
|
end
|
393
431
|
end
|
394
432
|
end
|
395
|
-
|
433
|
+
sipc_response
|
396
434
|
end
|
397
435
|
|
398
436
|
def next_url(t = 's')
|
@@ -440,11 +478,10 @@ class Fetion::AddBuddyException < FetionException; end
|
|
440
478
|
class Fetion::GetContactsException < FetionException; end
|
441
479
|
class Fetion::NoUserException < FetionException; end
|
442
480
|
class Fetion::SipcException < FetionException
|
443
|
-
attr_reader :
|
481
|
+
attr_reader :first_line, :message
|
444
482
|
|
445
483
|
def initialize(sipc_response, message)
|
446
|
-
@
|
447
|
-
@description = sipc_response.description
|
484
|
+
@first_line = sipc_response.first_line
|
448
485
|
@message = message
|
449
486
|
end
|
450
|
-
end
|
487
|
+
end
|
data/lib/rfetion/sipc_message.rb
CHANGED
@@ -58,29 +58,98 @@ class SipcMessage
|
|
58
58
|
sipc_create(:command => 'R', :F => fetion.sid, :I => 1, :Q => '3 R', :X => 0, :with_l => false)
|
59
59
|
end
|
60
60
|
|
61
|
+
def self.create_session(fetion, last_sipc_response)
|
62
|
+
header = {}
|
63
|
+
last_sipc_response.sections.each do |section|
|
64
|
+
sipc_header = section.split("\r\n\r\n").first
|
65
|
+
if sipc_header.split("\r\n").first =~ %r|I #{fetion.sid} SIP-C/4.0|
|
66
|
+
sipc_header.split("\r\n")[1..-1].each do |line|
|
67
|
+
key, value = line.split(': ', 2)
|
68
|
+
if key == 'K'
|
69
|
+
header['K'] ? header['K'] << value : header['K'] = [value]
|
70
|
+
else
|
71
|
+
header[key] = value
|
72
|
+
end
|
73
|
+
end
|
74
|
+
body = %Q|v=0\r\no=-0 0 IN 127.0.0.1:8001\r\ns=session\r\nc=IN IP4 127.0.0.1:8001\r\nt=0 0\r\nm=message 8001 sip sip:#{fetion.uri}\r\n|
|
75
|
+
return sipc_response_create(:I => header['I'], :Q => header['Q'], :F => header['F'], :K => header['K'], :body => body, :f_first => false)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.session_connected(fetion, last_sipc_response)
|
81
|
+
header = {}
|
82
|
+
last_sipc_response.sections.each do |section|
|
83
|
+
sipc_header = section.split("\r\n\r\n").first
|
84
|
+
if sipc_header.split("\r\n").first =~ %r|O #{fetion.sid} SIP-C/4.0|
|
85
|
+
sipc_header.split("\r\n")[1..-1].each do |line|
|
86
|
+
key, value = line.split(': ', 2)
|
87
|
+
header[key] = value
|
88
|
+
end
|
89
|
+
header['K'] = ['text/html-fragment', 'text/plain']
|
90
|
+
return sipc_response_create(:F => header['F'], :I => header['I'], :Q => header['Q'], :K => header['K'], :with_l => false)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.msg_received(fetion, message_response)
|
96
|
+
header = {}
|
97
|
+
message_response.split("\r\n\r\n").first.split("\r\n")[1..-1].each do |line|
|
98
|
+
key, value = line.split(': ', 2)
|
99
|
+
header[key] = value
|
100
|
+
end
|
101
|
+
sipc_response_create(:F => header['F'], :I => header['I'], :Q => header['Q'], :with_l => false)
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.close_session(fetion, receiver_uri)
|
105
|
+
sipc_create(:command => 'B', :F => fetion.sid, :I => fetion.next_call, :Q => '2 B', :T => "sip:#{receiver_uri}", :with_l => false)
|
106
|
+
end
|
107
|
+
|
61
108
|
def self.sipc_response(http_response_body, fetion)
|
62
109
|
return if http_response_body == Fetion::SIPP
|
63
110
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
111
|
+
sections = []
|
112
|
+
body = http_response_body
|
113
|
+
while true
|
114
|
+
index = body.index(%r{(BN|M|I|O) #{fetion.sid} SIP-C/4.0}, 1)
|
115
|
+
if index
|
116
|
+
sections << body[0...index]
|
117
|
+
body = body[index..-1]
|
118
|
+
else
|
119
|
+
sections << body
|
120
|
+
break
|
121
|
+
end
|
69
122
|
end
|
123
|
+
SipcMessage::Response.new(sections)
|
70
124
|
rescue NoMethodError
|
71
|
-
raise FetionException.new("Fetion error: No response to #{
|
125
|
+
raise FetionException.new("Fetion error: No response to #{sections.first.split("\r\n").first}")
|
72
126
|
end
|
73
127
|
|
74
128
|
class Response
|
75
|
-
attr_reader :
|
129
|
+
attr_reader :sections
|
130
|
+
|
131
|
+
def initialize(sections)
|
132
|
+
@sections = sections
|
133
|
+
end
|
76
134
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
135
|
+
def class
|
136
|
+
if first_line =~ %r|^SIP-C/4.0 (\d{3})|
|
137
|
+
RESPONSES[$1.to_i]
|
138
|
+
else
|
139
|
+
SipcMessage::OK
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def first_line
|
144
|
+
@sections.first.split("\r\n").first
|
145
|
+
end
|
146
|
+
|
147
|
+
def contain?(command)
|
148
|
+
@sections.find {|section| section.split("\r\n").first.index(%r|#{command} |) }
|
80
149
|
end
|
81
150
|
|
82
151
|
def to_s
|
83
|
-
"
|
152
|
+
@sections.first.split("\r\n").first
|
84
153
|
end
|
85
154
|
end
|
86
155
|
|
@@ -116,4 +185,25 @@ class SipcMessage
|
|
116
185
|
sipc += "\r\n#{body}#{Fetion::SIPP}"
|
117
186
|
sipc
|
118
187
|
end
|
188
|
+
|
189
|
+
def self.sipc_response_create(options)
|
190
|
+
options = {:body => '', :with_l => true, :f_first => true}.merge(options)
|
191
|
+
body = options.delete(:body)
|
192
|
+
with_l = options.delete(:with_l)
|
193
|
+
|
194
|
+
sorted_key = options.delete(:f_first) ? [:F, :I, :Q, :K] : [:I, :Q, :F, :K]
|
195
|
+
sipc = "SIP-C/4.0 200 OK\r\n"
|
196
|
+
sorted_key.each do |k|
|
197
|
+
if options[k]
|
198
|
+
if k == :K
|
199
|
+
sipc += options[:K].collect { |v| "#{k}: #{v}\r\n" }.join("")
|
200
|
+
else
|
201
|
+
sipc += "#{k}: #{options[k]}\r\n"
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
sipc += "L: #{body == '' ? 4 : body.size}\r\n" if with_l
|
206
|
+
sipc += "\r\n#{body}#{Fetion::SIPP}"
|
207
|
+
sipc
|
208
|
+
end
|
119
209
|
end
|
data/rfetion.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rfetion}
|
8
|
-
s.version = "0.5.
|
8
|
+
s.version = "0.5.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Richard Huang"]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-16}
|
13
13
|
s.description = %q{rfetion is a ruby gem for China Mobile fetion service that you can send SMS free.}
|
14
14
|
s.email = %q{flyerhzm@gmail.com}
|
15
15
|
s.executables = ["rfetion", "rfetion"]
|
data/spec/rfetion/fetion_spec.rb
CHANGED
@@ -69,6 +69,7 @@ W: Digest algorithm="SHA1-sess-v4",nonce="1104E253661D71141DFE3FB020143E5A",key=
|
|
69
69
|
|
70
70
|
SIPP
|
71
71
|
EOF
|
72
|
+
response_body.gsub!("\n", "\r\n")
|
72
73
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=3", :body => response_body)
|
73
74
|
@fetion.register_first
|
74
75
|
|
@@ -90,6 +91,7 @@ W: Digest algorithm="SHA1-sess-v4",nonce=""
|
|
90
91
|
|
91
92
|
SIPP
|
92
93
|
EOF
|
94
|
+
response_body.gsub!("\n", "\r\n")
|
93
95
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=3", :body => response_body)
|
94
96
|
lambda { @fetion.register_first }.should raise_exception(Fetion::NoNonceException)
|
95
97
|
end
|
@@ -120,6 +122,7 @@ L: 125
|
|
120
122
|
|
121
123
|
<events><event type="SyncUserInfo"><user-info><score value="3760" level="7" level-score="3718"/></user-info></event></events>SIPP
|
122
124
|
EOF
|
125
|
+
response_body.gsub!("\n", "\r\n")
|
123
126
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=5", :body => response_body)
|
124
127
|
@fetion.register_second
|
125
128
|
|
@@ -146,6 +149,7 @@ L: 59
|
|
146
149
|
|
147
150
|
<results><group-list version ="1" ></group-list></results>SIPP
|
148
151
|
EOF
|
152
|
+
response_body.gsub!("\n", "\r\n")
|
149
153
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=7", :body => "SIPP")
|
150
154
|
response_body =<<-EOF
|
151
155
|
SIP-C/4.0 200 OK
|
@@ -208,6 +212,7 @@ Q: 10 BN
|
|
208
212
|
|
209
213
|
<events><event type="MobileMailBoxChanged"><mail unread-count="1"/></event></events>SIPP
|
210
214
|
EOF
|
215
|
+
response_body.gsub!("\n", "\r\n")
|
211
216
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=8", :body => response_body)
|
212
217
|
response_body =<<-EOF
|
213
218
|
SIP-C/4.0 200 OK
|
@@ -217,6 +222,7 @@ L: 835
|
|
217
222
|
|
218
223
|
<results><topic-list event="RecommendGroupTopic" version="171" max-count="5"><topic title="陌上人如玉 韩庚世无双" url="http://group.fetion.com.cn/topic/common/31333572/196313?c=[c:m161.com.cn]" create-date="2010-5-6 15:36:30" id="171" topic-type="1" /><topic title="世博园10大最美景观" url="http://group.fetion.com.cn/topic/common/8249155/196251?c=[c:m161.com.cn]" create-date="2010-5-6 15:33:49" id="170" topic-type="1" /><topic title="诺基亚价值百万的手机" url="http://group.fetion.com.cn/topic/common/7366464/196288?c=[c:m161.com.cn]" create-date="2010-5-6 15:31:57" id="169" topic-type="1" /><topic title="选秀调查:伪娘的真相" url="http://group.fetion.com.cn/topic/common/30660603/196323?c=[c:m161.com.cn]" create-date="2010-5-6 15:22:51" id="168" topic-type="1" /></topic-list></results>SIPP
|
219
224
|
EOF
|
225
|
+
response_body.gsub!("\n", "\r\n")
|
220
226
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=9", :body => response_body)
|
221
227
|
response_body =<<-EOF
|
222
228
|
SIP-C/4.0 200 OK
|
@@ -226,12 +232,13 @@ L: 61
|
|
226
232
|
|
227
233
|
<results><contacts version="326661305" ></contacts></results>SIPP
|
228
234
|
EOF
|
235
|
+
response_body.gsub!("\n", "\r\n")
|
229
236
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=10", :body => response_body)
|
230
237
|
@fetion.get_contacts
|
231
238
|
@fetion.contacts.collect {|contact| contact.sid}.should == ["793401629", "737769829", "660250260", "926157269", "669700695", "760087520", "480867781", "572512981", "638993408"]
|
232
239
|
end
|
233
240
|
|
234
|
-
it "should get received msg" do
|
241
|
+
it "should get received msg while get contacts" do
|
235
242
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=6", :body => "SIPP")
|
236
243
|
response_body =<<-EOF
|
237
244
|
SIP-C/4.0 200 OK
|
@@ -241,6 +248,7 @@ L: 59
|
|
241
248
|
|
242
249
|
<results><group-list version ="1" ></group-list></results>SIPP
|
243
250
|
EOF
|
251
|
+
response_body.gsub!("\n", "\r\n")
|
244
252
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=7", :body => "SIPP")
|
245
253
|
response_body =<<-EOF
|
246
254
|
SIP-C/4.0 200 OK
|
@@ -311,6 +319,7 @@ Q: 11 BN
|
|
311
319
|
|
312
320
|
<events><event type="PresenceChanged"><contacts><c id="295098062"><p v="0" sid="638993408" su="sip:638993408@fetion.com.cn;p=2242" m="13634102006" c="CMCC" cs="0" s="1" l="0" svc="" n="梦妍" i="" p="0" sms="0.0:0:0" sp="0" sh="0"/><pr di="" b="0" d="" dt="" dc="0"/></c></contacts></event></events>SIPP
|
313
321
|
EOF
|
322
|
+
response_body.gsub!("\n", "\r\n")
|
314
323
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=8", :body => response_body)
|
315
324
|
response_body =<<-EOF
|
316
325
|
SIP-C/4.0 200 OK
|
@@ -320,6 +329,7 @@ L: 835
|
|
320
329
|
|
321
330
|
<results><topic-list event="RecommendGroupTopic" version="171" max-count="5"><topic title="陌上人如玉 韩庚世无双" url="http://group.fetion.com.cn/topic/common/31333572/196313?c=[c:m161.com.cn]" create-date="2010-5-6 15:36:30" id="171" topic-type="1" /><topic title="世博园10大最美景观" url="http://group.fetion.com.cn/topic/common/8249155/196251?c=[c:m161.com.cn]" create-date="2010-5-6 15:33:49" id="170" topic-type="1" /><topic title="诺基亚价值百万的手机" url="http://group.fetion.com.cn/topic/common/7366464/196288?c=[c:m161.com.cn]" create-date="2010-5-6 15:31:57" id="169" topic-type="1" /><topic title="选秀调查:伪娘的真相" url="http://group.fetion.com.cn/topic/common/30660603/196323?c=[c:m161.com.cn]" create-date="2010-5-6 15:22:51" id="168" topic-type="1" /></topic-list></results>SIPP
|
322
331
|
EOF
|
332
|
+
response_body.gsub!("\n", "\r\n")
|
323
333
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=9", :body => response_body)
|
324
334
|
response_body =<<-EOF
|
325
335
|
SIP-C/4.0 200 OK
|
@@ -329,7 +339,9 @@ L: 61
|
|
329
339
|
|
330
340
|
<results><contacts version="326661305" ></contacts></results>SIPP
|
331
341
|
EOF
|
342
|
+
response_body.gsub!("\n", "\r\n")
|
332
343
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=10", :body => response_body)
|
344
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=11", :body => "SIPP")
|
333
345
|
@fetion.get_contacts
|
334
346
|
@fetion.contacts.collect {|c| c.sid}.should == ["793401629", "737769829", "660250260", "926157269", "669700695", "760087520", "480867781", "572512981", "638993408"]
|
335
347
|
@fetion.receives.collect {|r| r.sip}.should == ["480867781@fetion.com.cn;p=16105"]
|
@@ -355,6 +367,7 @@ T: sip:638993408@fetion.com.cn;p=2242
|
|
355
367
|
|
356
368
|
SIPP
|
357
369
|
EOF
|
370
|
+
response_body.gsub!("\n", "\r\n")
|
358
371
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=12", :body => response_body)
|
359
372
|
@fetion.send_msg('sip:638993408@fetion.com.cn;p=2242', 'test')
|
360
373
|
end
|
@@ -375,6 +388,7 @@ Q: 1 M
|
|
375
388
|
|
376
389
|
SIPP
|
377
390
|
EOF
|
391
|
+
response_body.gsub!("\n", "\r\n")
|
378
392
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=12", :body => response_body)
|
379
393
|
@fetion.send_sms('sip:638993408@fetion.com.cn;p=2242', 'test')
|
380
394
|
end
|
@@ -395,6 +409,7 @@ L: 92
|
|
395
409
|
|
396
410
|
<results><schedule-sms-list version="36"/><schedule-sms id="2124923" version="1"/></results>SIPP
|
397
411
|
EOF
|
412
|
+
response_body.gsub!("\n", "\r\n")
|
398
413
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=12", :body => response_body)
|
399
414
|
@fetion.set_schedule_sms('sip:638993408@fetion.com.cn;p=2242', 'test', Time.at(Time.now + 24*60*60))
|
400
415
|
end
|
@@ -428,6 +443,7 @@ Q: 18 BN
|
|
428
443
|
|
429
444
|
<events><event type="PresenceChanged"><contacts><c id="295098062"><p v="326156919" sid="638993408" su="sip:638993408@fetion.com.cn;p=2242" m="13634102006" c="CMCC" cs="0" s="1" l="0" svc="" n="梦研" i="" p="0" sms="0.0:0:0" sp="0" sh="0"/><pr di="PCCL030333103486" b="400" d="" dt="PC" dc="17"/></c></contacts></event></events>SIPP
|
430
445
|
EOF
|
446
|
+
response_body.gsub!("\n", "\r\n")
|
431
447
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=13", :body => response_body)
|
432
448
|
@fetion.add_buddy(:friend_mobile => '13634102006')
|
433
449
|
end
|
@@ -448,6 +464,7 @@ L: 166
|
|
448
464
|
|
449
465
|
<results><contact uri="tel:15800681507" version="0" user-id="625007505" mobile-no="15800681507" basic-service-status="0" carrier="CMCC" carrier-status="0"/></results>SIPP
|
450
466
|
EOF
|
467
|
+
response_body.gsub!("\n", "\r\n")
|
451
468
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=13", :body => response_body)
|
452
469
|
@fetion.get_contact_info(:friend_mobile => '15800681507')
|
453
470
|
end
|
@@ -461,6 +478,7 @@ Q: 1 S
|
|
461
478
|
|
462
479
|
SIPP
|
463
480
|
EOF
|
481
|
+
response_body.gsub!("\n", "\r\n")
|
464
482
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=13", :body => response_body)
|
465
483
|
lambda {@fetion.get_contact_info(:friend_mobile => '15800681505')}.should raise_exception(Fetion::SipcException)
|
466
484
|
end
|
@@ -496,11 +514,130 @@ Q: 11 BN
|
|
496
514
|
|
497
515
|
<events><event type="PresenceChanged"><contacts><c id="295098062"><pr di="PCCL030340538483" b="400" d="" dt="PC" dc="17"/></c></contacts></event></events>SIPP
|
498
516
|
EOF
|
517
|
+
response_body.gsub!("\n", "\r\n")
|
499
518
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=11", :body => response_body)
|
500
519
|
@fetion.keep_alive
|
501
520
|
@fetion.contacts.find {|contact| contact.id == '295098062'}.status.should == "400"
|
502
521
|
end
|
503
522
|
|
523
|
+
|
524
|
+
it "should get receive msg for first session" do
|
525
|
+
response_body =<<-EOF
|
526
|
+
I 730020377 SIP-C/4.0
|
527
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
528
|
+
I: -13
|
529
|
+
K: text/plain
|
530
|
+
K: text/html-fragment
|
531
|
+
K: multiparty
|
532
|
+
K: nudge
|
533
|
+
Q: 14 I
|
534
|
+
L: 21
|
535
|
+
|
536
|
+
s=session
|
537
|
+
m=message SIPP
|
538
|
+
EOF
|
539
|
+
response_body.gsub!("\n", "\r\n")
|
540
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=11", :body => response_body)
|
541
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=12", :body => "SIPP")
|
542
|
+
response_body =<<-EOF
|
543
|
+
O 730020377 SIP-C/4.0
|
544
|
+
I: -13
|
545
|
+
Q: 2 O
|
546
|
+
K: text/plain
|
547
|
+
K: text/html-fragment
|
548
|
+
K: multiparty
|
549
|
+
K: nudge
|
550
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
551
|
+
|
552
|
+
A 730020377 SIP-C/4.0
|
553
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
554
|
+
I: -13
|
555
|
+
Q: 14 A
|
556
|
+
|
557
|
+
SIPP
|
558
|
+
EOF
|
559
|
+
response_body.gsub!("\n", "\r\n")
|
560
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=13", :body => response_body)
|
561
|
+
response_body =<<-EOF
|
562
|
+
M 730020377 SIP-C/4.0
|
563
|
+
I: -13
|
564
|
+
Q: 4 M
|
565
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
566
|
+
C: text/html-fragment
|
567
|
+
K: SaveHistory
|
568
|
+
L: 4
|
569
|
+
D: Sun, 16 May 2010 02:16:00 GMT
|
570
|
+
XI: 0dbdc4e81bff425dbcf8b591b497fe94
|
571
|
+
|
572
|
+
testSIPP
|
573
|
+
EOF
|
574
|
+
response_body.gsub!("\n", "\r\n")
|
575
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=14", :body => response_body)
|
576
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=15", :body => "SIPP")
|
577
|
+
@fetion.keep_alive
|
578
|
+
@fetion.receives.collect {|r| r.sip}.should == ["638993408@fetion.com.cn;p=2242"]
|
579
|
+
@fetion.receives.collect {|r| r.sent_at}.should == [Time.parse("Sun, 16 May 2010 02:16:00 GMT")]
|
580
|
+
@fetion.receives.collect {|r| r.text}.should == ["test"]
|
581
|
+
end
|
582
|
+
|
583
|
+
it "should get receive msg without pulse for first session" do
|
584
|
+
response_body =<<-EOF
|
585
|
+
I 730020377 SIP-C/4.0
|
586
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
587
|
+
I: -13
|
588
|
+
K: text/plain
|
589
|
+
K: text/html-fragment
|
590
|
+
K: multiparty
|
591
|
+
K: nudge
|
592
|
+
Q: 14 I
|
593
|
+
L: 21
|
594
|
+
|
595
|
+
s=session
|
596
|
+
m=message SIPP
|
597
|
+
EOF
|
598
|
+
response_body.gsub!("\n", "\r\n")
|
599
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=11", :body => response_body)
|
600
|
+
response_body =<<-EOF
|
601
|
+
O 730020377 SIP-C/4.0
|
602
|
+
I: -13
|
603
|
+
Q: 2 O
|
604
|
+
K: text/plain
|
605
|
+
K: text/html-fragment
|
606
|
+
K: multiparty
|
607
|
+
K: nudge
|
608
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
609
|
+
|
610
|
+
A 730020377 SIP-C/4.0
|
611
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
612
|
+
I: -13
|
613
|
+
Q: 14 A
|
614
|
+
|
615
|
+
SIPP
|
616
|
+
EOF
|
617
|
+
response_body.gsub!("\n", "\r\n")
|
618
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=12", :body => response_body)
|
619
|
+
response_body =<<-EOF
|
620
|
+
M 730020377 SIP-C/4.0
|
621
|
+
I: -13
|
622
|
+
Q: 4 M
|
623
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
624
|
+
C: text/html-fragment
|
625
|
+
K: SaveHistory
|
626
|
+
L: 4
|
627
|
+
D: Sun, 16 May 2010 02:16:00 GMT
|
628
|
+
XI: 0dbdc4e81bff425dbcf8b591b497fe94
|
629
|
+
|
630
|
+
testSIPP
|
631
|
+
EOF
|
632
|
+
response_body.gsub!("\n", "\r\n")
|
633
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=13", :body => response_body)
|
634
|
+
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=14", :body => "SIPP")
|
635
|
+
@fetion.keep_alive
|
636
|
+
@fetion.receives.collect {|r| r.sip}.should == ["638993408@fetion.com.cn;p=2242"]
|
637
|
+
@fetion.receives.collect {|r| r.sent_at}.should == [Time.parse("Sun, 16 May 2010 02:16:00 GMT")]
|
638
|
+
@fetion.receives.collect {|r| r.text}.should == ["test"]
|
639
|
+
end
|
640
|
+
|
504
641
|
it "should get receive msg" do
|
505
642
|
response_body =<<-EOF
|
506
643
|
M 730020377 SIP-C/4.0
|
@@ -515,11 +652,8 @@ XI: 7eb8bc4e9df742b2aa557f9e85c8d8af
|
|
515
652
|
|
516
653
|
testtesttestSIPP
|
517
654
|
EOF
|
655
|
+
response_body.gsub!("\n", "\r\n")
|
518
656
|
FakeWeb.register_uri(:post, "http://221.176.31.39/ht/sd.aspx?t=s&i=11", :body => response_body)
|
519
|
-
@fetion.keep_alive
|
520
|
-
@fetion.receives.collect {|r| r.sip}.should == ["638993408@fetion.com.cn;p=2242"]
|
521
|
-
@fetion.receives.collect {|r| r.sent_at}.should == [Time.parse("Tue, 11 May 2010 15:18:56 GMT")]
|
522
|
-
@fetion.receives.collect {|r| r.text}.should == ["testtesttest"]
|
523
657
|
end
|
524
658
|
end
|
525
659
|
end
|
@@ -10,6 +10,7 @@ describe SipcMessage do
|
|
10
10
|
@fetion.sid = "730020377"
|
11
11
|
@fetion.user_id = "390937727"
|
12
12
|
@fetion.mobile_no = "15800681509"
|
13
|
+
@fetion.uri = "730020377@fetion.com.cn;p=6907"
|
13
14
|
@fetion.response = "62E57A276EB9B7AAC233B8983A39941870CE74E3B2CD6480B5CA9DCF37C57DECEA250F261543CB4424EE9E72354C9F33C805EB9839BF96501D0261614E69BDF0DBDF484047750B3113DF8850FEF39428ADC17FE86E8800ED5A77AA7F6630F21AE8A24E6ECC2F003BF3B93E35051A7778D238F86D21581BC829679EBEAD36390F"
|
14
15
|
end
|
15
16
|
|
@@ -18,76 +19,307 @@ describe SipcMessage do
|
|
18
19
|
Guid.stubs(:new).returns(guid)
|
19
20
|
guid.stubs(:hexdigest).returns(hexdigest)
|
20
21
|
hexdigest.stubs(:upcase).returns("19D28D4978125CAA4F6E54277BA7D9EF")
|
21
|
-
sipc_message
|
22
|
+
sipc_message =<<-EOF
|
23
|
+
R fetion.com.cn SIP-C/4.0
|
24
|
+
F: 730020377
|
25
|
+
I: 1
|
26
|
+
Q: 1 R
|
27
|
+
CN: 19D28D4978125CAA4F6E54277BA7D9EF
|
28
|
+
CL: type="pc" ,version="3.6.2020"
|
29
|
+
|
30
|
+
SIPP
|
31
|
+
EOF
|
32
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
22
33
|
SipcMessage.register_first(@fetion).should == sipc_message
|
23
34
|
end
|
24
35
|
|
25
36
|
it "should get register_second" do
|
26
|
-
sipc_message
|
37
|
+
sipc_message =<<-EOF
|
38
|
+
R fetion.com.cn SIP-C/4.0
|
39
|
+
F: 730020377
|
40
|
+
I: 1
|
41
|
+
Q: 2 R
|
42
|
+
A: Digest response="62E57A276EB9B7AAC233B8983A39941870CE74E3B2CD6480B5CA9DCF37C57DECEA250F261543CB4424EE9E72354C9F33C805EB9839BF96501D0261614E69BDF0DBDF484047750B3113DF8850FEF39428ADC17FE86E8800ED5A77AA7F6630F21AE8A24E6ECC2F003BF3B93E35051A7778D238F86D21581BC829679EBEAD36390F",algorithm="SHA1-sess-v4"
|
43
|
+
AK: ak-value
|
44
|
+
L: 447
|
45
|
+
|
46
|
+
<args><device machine-code="B04B5DA2F5F1B8D01A76C0EBC841414C" /><caps value="ff" /><events value="7f" /><user-info mobile-no="15800681509" user-id="390937727"><personal version="0" attributes="v4default" /><custom-config version="0" /><contact-list version="0" buddy-attributes="v4default" /></user-info><credentials domains="fetion.com.cn;m161.com.cn;www.ikuwa.cn;games.fetion.com.cn" /><presence><basic value="400" desc="" /></presence></args>SIPP
|
47
|
+
EOF
|
48
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
27
49
|
SipcMessage.register_second(@fetion).should == sipc_message
|
28
50
|
end
|
29
51
|
|
30
52
|
it "should get group list" do
|
31
53
|
@fetion.call = 2
|
32
|
-
sipc_message
|
54
|
+
sipc_message =<<-EOF
|
55
|
+
S fetion.com.cn SIP-C/4.0
|
56
|
+
F: 730020377
|
57
|
+
I: 3
|
58
|
+
Q: 1 S
|
59
|
+
N: PGGetGroupList
|
60
|
+
L: 54
|
61
|
+
|
62
|
+
<args><group-list attributes="name;identity" /></args>SIPP
|
63
|
+
EOF
|
64
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
33
65
|
SipcMessage.get_group_list(@fetion).should == sipc_message
|
34
66
|
end
|
35
67
|
|
36
68
|
it "should presence" do
|
37
69
|
@fetion.call = 3
|
38
|
-
sipc_message
|
70
|
+
sipc_message =<<-EOF
|
71
|
+
SUB fetion.com.cn SIP-C/4.0
|
72
|
+
F: 730020377
|
73
|
+
I: 4
|
74
|
+
Q: 1 SUB
|
75
|
+
N: PresenceV4
|
76
|
+
L: 87
|
77
|
+
|
78
|
+
<args><subscription self="v4default;mail-count" buddy="v4default" version="0" /></args>SIPP
|
79
|
+
EOF
|
80
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
39
81
|
SipcMessage.presence(@fetion).should == sipc_message
|
40
82
|
end
|
41
83
|
|
42
84
|
it "should get group topic" do
|
43
85
|
@fetion.call = 4
|
44
|
-
sipc_message
|
86
|
+
sipc_message =<<-EOF
|
87
|
+
S fetion.com.cn SIP-C/4.0
|
88
|
+
F: 730020377
|
89
|
+
I: 5
|
90
|
+
Q: 1 S
|
91
|
+
N: PGGetGroupTopic
|
92
|
+
L: 27
|
93
|
+
|
94
|
+
<args><topic-list /></args>SIPP
|
95
|
+
EOF
|
96
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
45
97
|
SipcMessage.get_group_topic(@fetion).should == sipc_message
|
46
98
|
end
|
47
99
|
|
48
100
|
it "should get address list" do
|
49
101
|
@fetion.call = 5
|
50
|
-
sipc_message
|
102
|
+
sipc_message =<<-EOF
|
103
|
+
S fetion.com.cn SIP-C/4.0
|
104
|
+
F: 730020377
|
105
|
+
I: 6
|
106
|
+
Q: 1 S
|
107
|
+
N: GetAddressListV4
|
108
|
+
L: 37
|
109
|
+
|
110
|
+
<args><contacts version="0" /></args>SIPP
|
111
|
+
EOF
|
112
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
51
113
|
SipcMessage.get_address_list(@fetion).should == sipc_message
|
52
114
|
end
|
53
115
|
|
54
116
|
it "should send cat sms" do
|
55
117
|
@fetion.call = 8
|
56
|
-
sipc_message
|
118
|
+
sipc_message =<<-EOF
|
119
|
+
M fetion.com.cn SIP-C/4.0
|
120
|
+
F: 730020377
|
121
|
+
I: 9
|
122
|
+
Q: 1 M
|
123
|
+
T: sip:730020377@fetion.com.cn;p=6907
|
124
|
+
N: SendCatSMS
|
125
|
+
L: 4
|
126
|
+
|
127
|
+
testSIPP
|
128
|
+
EOF
|
129
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
57
130
|
SipcMessage.send_cat_sms(@fetion, 'sip:730020377@fetion.com.cn;p=6907', 'test').should == sipc_message
|
58
131
|
end
|
59
132
|
|
60
133
|
it "should send cat msg" do
|
61
134
|
@fetion.call = 8
|
62
|
-
sipc_message
|
135
|
+
sipc_message =<<-EOF
|
136
|
+
M fetion.com.cn SIP-C/4.0
|
137
|
+
F: 730020377
|
138
|
+
I: 9
|
139
|
+
Q: 2 M
|
140
|
+
T: sip:638993408@fetion.com.cn;p=2242
|
141
|
+
K: SaveHistory
|
142
|
+
N: CatMsg
|
143
|
+
L: 4
|
144
|
+
|
145
|
+
testSIPP
|
146
|
+
EOF
|
147
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
63
148
|
SipcMessage.send_cat_msg(@fetion, 'sip:638993408@fetion.com.cn;p=2242', 'test').should == sipc_message
|
64
149
|
end
|
65
150
|
|
66
151
|
it "should set schedule sms" do
|
67
152
|
@fetion.call = 8
|
68
|
-
sipc_message
|
153
|
+
sipc_message =<<-EOF
|
154
|
+
S fetion.com.cn SIP-C/4.0
|
155
|
+
F: 730020377
|
156
|
+
I: 9
|
157
|
+
Q: 1 S
|
158
|
+
N: SSSetScheduleCatSms
|
159
|
+
SV: 1
|
160
|
+
L: 182
|
161
|
+
|
162
|
+
<args><schedule-sms send-time="2010-05-08 15:50:00" type="0"><message>test</message><receivers><receiver uri="sip:638993408@fetion.com.cn;p=2242" /></receivers></schedule-sms></args>SIPP
|
163
|
+
EOF
|
164
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
69
165
|
SipcMessage.set_schedule_sms(@fetion, ['sip:638993408@fetion.com.cn;p=2242'], 'test', '2010-05-08 15:50:00').should == sipc_message
|
70
166
|
end
|
71
167
|
|
72
168
|
it "should get contact info" do
|
73
169
|
@fetion.call = 10
|
74
|
-
sipc_message
|
170
|
+
sipc_message =<<-EOF
|
171
|
+
S fetion.com.cn SIP-C/4.0
|
172
|
+
F: 730020377
|
173
|
+
I: 11
|
174
|
+
Q: 1 S
|
175
|
+
N: GetContactInfoV4
|
176
|
+
L: 46
|
177
|
+
|
178
|
+
<args><contact uri="tel:15800681507" /></args>SIPP
|
179
|
+
EOF
|
180
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
75
181
|
SipcMessage.get_contact_info(@fetion, "tel:15800681507").should == sipc_message
|
76
182
|
end
|
77
183
|
|
78
184
|
it "should add buddy" do
|
79
185
|
@fetion.call = 9
|
80
186
|
@fetion.instance_variable_set(:@nickname, 'flyerhzm')
|
81
|
-
sipc_message
|
187
|
+
sipc_message =<<-EOF
|
188
|
+
S fetion.com.cn SIP-C/4.0
|
189
|
+
F: 730020377
|
190
|
+
I: 10
|
191
|
+
Q: 1 S
|
192
|
+
N: AddBuddyV4
|
193
|
+
L: 175
|
194
|
+
|
195
|
+
<args><contacts><buddies><buddy uri="tel:13634102006" buddy-lists="" desc="flyerhzm" expose-mobile-no="1" expose-name="1" addbuddy-phrase-id="0" /></buddies></contacts></args>SIPP
|
196
|
+
EOF
|
197
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
82
198
|
SipcMessage.add_buddy(@fetion, :friend_mobile => "13634102006").should == sipc_message
|
83
199
|
|
84
200
|
@fetion.call = 9
|
85
|
-
sipc_message
|
201
|
+
sipc_message =<<-EOF
|
202
|
+
S fetion.com.cn SIP-C/4.0
|
203
|
+
F: 730020377
|
204
|
+
I: 10
|
205
|
+
Q: 1 S
|
206
|
+
N: AddBuddyV4
|
207
|
+
L: 136
|
208
|
+
|
209
|
+
<args><contacts><buddies><buddy uri="sip:638993408" buddy-lists="" desc="flyerhzm" addbuddy-phrase-id="0" /></buddies></contacts></args>SIPP
|
210
|
+
EOF
|
211
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
86
212
|
SipcMessage.add_buddy(@fetion, :friend_sip => "638993408").should == sipc_message
|
87
213
|
end
|
88
214
|
|
215
|
+
it "should create session" do
|
216
|
+
http_response_body =<<-EOF
|
217
|
+
I 730020377 SIP-C/4.0
|
218
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
219
|
+
I: -13
|
220
|
+
K: text/plain
|
221
|
+
K: text/html-fragment
|
222
|
+
K: multiparty
|
223
|
+
K: nudge
|
224
|
+
Q: 14 I
|
225
|
+
L: 21
|
226
|
+
|
227
|
+
s=session
|
228
|
+
m=message SIPP
|
229
|
+
EOF
|
230
|
+
http_response_body.gsub!("\n", "\r\n").chomp!
|
231
|
+
last_sipc_response = SipcMessage.sipc_response(http_response_body, @fetion)
|
232
|
+
sipc_message = %Q|SIP-C/4.0 200 OK\r\nI: -13\r\nQ: 14 I\r\nF: sip:638993408@fetion.com.cn;p=2242\r\nK: text/plain\r\nK: text/html-fragment\r\nK: multiparty\r\nK: nudge\r\nL: 129\r\n\r\nv=0\r\no=-0 0 IN 127.0.0.1:8001\r\ns=session\r\nc=IN IP4 127.0.0.1:8001\r\nt=0 0\r\nm=message 8001 sip sip:730020377@fetion.com.cn;p=6907\r\nSIPP|
|
233
|
+
SipcMessage.create_session(@fetion, last_sipc_response).should == sipc_message
|
234
|
+
end
|
235
|
+
|
236
|
+
it "shoud session connected" do
|
237
|
+
http_response_body =<<-EOF
|
238
|
+
O 730020377 SIP-C/4.0
|
239
|
+
I: -13
|
240
|
+
Q: 2 O
|
241
|
+
K: text/plain
|
242
|
+
K: text/html-fragment
|
243
|
+
K: multiparty
|
244
|
+
K: nudge
|
245
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
246
|
+
|
247
|
+
A 730020377 SIP-C/4.0
|
248
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
249
|
+
I: -13
|
250
|
+
Q: 14 A
|
251
|
+
|
252
|
+
SIPP
|
253
|
+
EOF
|
254
|
+
http_response_body.gsub!("\n", "\r\n").chomp!
|
255
|
+
last_sipc_response = SipcMessage.sipc_response(http_response_body, @fetion)
|
256
|
+
sipc_message =<<-EOF
|
257
|
+
SIP-C/4.0 200 OK
|
258
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
259
|
+
I: -13
|
260
|
+
Q: 2 O
|
261
|
+
K: text/html-fragment
|
262
|
+
K: text/plain
|
263
|
+
|
264
|
+
SIPP
|
265
|
+
EOF
|
266
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
267
|
+
SipcMessage.session_connected(@fetion, last_sipc_response).should == sipc_message
|
268
|
+
end
|
269
|
+
|
270
|
+
it "should msg_received" do
|
271
|
+
http_response_body =<<-EOF
|
272
|
+
M 730020377 SIP-C/4.0
|
273
|
+
I: -13
|
274
|
+
Q: 4 M
|
275
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
276
|
+
C: text/html-fragment
|
277
|
+
K: SaveHistory
|
278
|
+
L: 4
|
279
|
+
D: Sun, 16 May 2010 02:16:00 GMT
|
280
|
+
XI: 0dbdc4e81bff425dbcf8b591b497fe94
|
281
|
+
|
282
|
+
testSIPP
|
283
|
+
EOF
|
284
|
+
http_response_body.gsub!("\n", "\r\n").chomp!
|
285
|
+
sipc_message =<<-EOF
|
286
|
+
SIP-C/4.0 200 OK
|
287
|
+
F: sip:638993408@fetion.com.cn;p=2242
|
288
|
+
I: -13
|
289
|
+
Q: 4 M
|
290
|
+
|
291
|
+
SIPP
|
292
|
+
EOF
|
293
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
294
|
+
SipcMessage.msg_received(@fetion, http_response_body).should == sipc_message
|
295
|
+
end
|
296
|
+
|
297
|
+
it "should close session" do
|
298
|
+
@fetion.call = 5
|
299
|
+
sipc_message =<<-EOF
|
300
|
+
B fetion.com.cn SIP-C/4.0
|
301
|
+
F: 730020377
|
302
|
+
I: 6
|
303
|
+
Q: 2 B
|
304
|
+
T: sip:638993408@fetion.com.cn;p=2242
|
305
|
+
|
306
|
+
SIPP
|
307
|
+
EOF
|
308
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
309
|
+
SipcMessage.close_session(@fetion, "638993408@fetion.com.cn;p=2242").should == sipc_message
|
310
|
+
end
|
311
|
+
|
89
312
|
it "should logout" do
|
90
|
-
sipc_message
|
313
|
+
sipc_message =<<-EOF
|
314
|
+
R fetion.com.cn SIP-C/4.0
|
315
|
+
F: 730020377
|
316
|
+
I: 1
|
317
|
+
Q: 3 R
|
318
|
+
X: 0
|
319
|
+
|
320
|
+
SIPP
|
321
|
+
EOF
|
322
|
+
sipc_message.gsub!("\n", "\r\n").chomp!
|
91
323
|
SipcMessage.logout(@fetion).should == sipc_message
|
92
324
|
end
|
93
325
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rfetion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-05-
|
12
|
+
date: 2010-05-16 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|