SkypeR 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,149 @@
1
+ Code, Description, Possible reasons
2
+ 1, General syntax error, Command missing (e.g. '' '' sent as command)
3
+ 2, Unknown command, Command spelled incorrect (e.g. 'GRT' send instead of 'GET')
4
+ 3, Search: unknown WHAT, Search target is missing or misspelled
5
+ 4, Empty target not allowed,
6
+ 5, Search CALLS: invalid target, An unpermitted character (e.g. '!'\, '#'\, '$' etc.) was used in the target username.
7
+ 6, SEARCH MISSEDCALLS: target not allowed, e.g. 'SEARCH MISSEDCALLS echo123'
8
+ 7, GET: invalid WHAT, Object/property name missing or misspelled
9
+ 8, Invalid user handle, USERNAME missing or includes a not permitted character (e.g. 'GET USER ! HANDLE')
10
+ 9, Unknown user,
11
+ 10, Invalid PROP, Property name and/or ID missing or misspelled
12
+ 11, Invalid call id, Call ID missing or misspelled (must be a numeric value)
13
+ 12, Unknown call, Nonexistant call ID used
14
+ 13, Invalid PROP, Returned to command GET CALL id PARTNER_DISPLAYNAME. Property name missing or misspelled
15
+ 14, Invalid message id, GET - Message ID missing or misspelled (must be a numeric value)
16
+ 15, Unknown message, Nonexistant message ID used in GET command
17
+ 16, Invalid PROP, Returned to command GET MESSAGE id PARTNER_DISPLAYNAME. Property name missing or misspelled
18
+ 17, (Not in use),
19
+ 18, SET: invalid WHAT, Property name missing or misspelled
20
+ 19, Invalid call id, Call ID missing or misspelled (must be a numeric value)
21
+ 20, Unknown call, Nonexistant call ID used
22
+ 21, Unknown/disallowed call prop, SET CALL value incorrect or misspelled (e.g. 'SET CALL 15 STATUS ONHOL')
23
+ 22, Cannot hold this call at the moment, Trying to hold a call that is not in progress.
24
+ 23, Cannot resume this call at the moment, Trying to resume/answer a call that is not in progress.
25
+ 24, Cannot hangup inactive call, Trying to hang up a call that is not in progress.
26
+ 25, Unknown WHAT, Property name missing or misspelled (e.g. 'SET CALL 15 STATU ONHOLD')
27
+ 26, Invalid user handle, Target username missing or includes not permitted symbols (e.g. 'MESSAGE ')
28
+ 27, Invalid version number, Invalid protocol number (e.g. 'PROTOCOL -12\,9')
29
+ 28, Unknown userstatus, Unknown or misspelled value for user status (e.g. 'SET USERSTATUS RICH')
30
+ 29, SEARCH what: target not allowed, Target is not permitted; e.g. 'SEARCH MISSEDMESSAGES echo123'
31
+ 30, Invalid message id, SET - Message ID missing or misspelled (must be a numeric value)
32
+ 31, Unknown message id, Nonexistant message ID used in SET command
33
+ 32, Invalid WHAT, Property missing or misspelled
34
+ 33, invalid parameter, Unknown or misspelled value for mute (e.g. 'SET MUTE O')
35
+ 34, invalid user handle, Target username/number missing (e.g. 'CALL ')
36
+ 35, Not connected,
37
+ 36, Not online,
38
+ 37, Not connected,
39
+ 38, Not online,
40
+ 39, user blocked, Destination user is blocked by caller. Also given\, if trying to call to a blocked user
41
+ 40, Unknown privilege, Privilege is either misspelled or does not exist (e.g. 'GET PRIVILEGE SkypeOut').
42
+ 41, Call not active, Trying to send DTMF\, when call is not active.
43
+ 42, Invalid DTMF code, Invalid DTMF code is sent. Valid symbols for DTMF codes are {0..9\,#\,*}
44
+ 43, cannot send empty message, Empty message is tried to sent\, e.g. 'MESSAGE echo123'.
45
+ 50, cannot set device, An error occurred when changing audio device
46
+ 51, invalid parameter, Parameter to READY command is not YES or NO
47
+ 52, invalid parameter, Parameter to HOOK command is not ON or OFF
48
+ 53, invalid value, Parameter to SET AUTOAWAY is not ON or OFF
49
+ 66, Not connected, Skype is not connected i.e. user status is 'LOGGEDOUT'
50
+ 67, Target not allowed with SEARCH FRIENDS, SEARCH FRIENDS had a parameter
51
+ 68, Access denied,
52
+ 69, Invalid open what, OPEN command had missing or misspelled TARGET e.g. 'OPEN IN'
53
+ 70, Invalid handle, OPEN IM parameter USERNAME is missing or contains not permitted symbols
54
+ 71, Invalid conference participant NO, Conference participant's number is either too large or invalid.
55
+ 72, Cannot create conference,
56
+ 73, too many participants, Conference is initiated to more than 4 people.
57
+ 74, Invalid key, Key name in BTN_PRESSED or BTN_RELEASED command is invalid
58
+ 91, call error, Cannot call an emergency number
59
+ 92, call error, The called number is not a valid PSTN number
60
+ 93, call error, Invalid Skype Name
61
+ 94, call error, Cannot call yourself
62
+ 95, Internal error, Destination user is blocked by caller right after call initialization
63
+ 96, Internal error, An outgoing call exists in ROUTING/RINGING/EARLYMEDIA state
64
+ 97, Internal error, Internal error
65
+ 98, Internal error, Internal error
66
+ 99, Internal error, Internal error
67
+ 100, Internal error, Internal error
68
+ 101, Internal error, A call to the destination user is already ongoing
69
+ 103, Cannot hold, Internal error
70
+ 104, Cannot resume, Internal error
71
+ 105, Invalid chat name, Chat name missing or misspelled
72
+ 106, Invalid PROP, Property name missing or misspelled for CHAT or CHATMESSAGE
73
+ 107, Target not allowed with CHATS, No parameters allowed to SEARCH CHATS
74
+ 108, User not contact, TRANSFER can only be initiated to contacts
75
+ 109, directory doesn't exist, Directory given as a parameter to TRANSFER command does not exist
76
+ 110, No voicemail capability, User given as a parameter to VOICEMAIL command doesn't have voicemail capability
77
+ 111, File not found, File given as argument to SET AVATAR or SET RINGTONE command doesn't exist
78
+ 112, Too many targets, Number of target users for OPEN FILETRANSFER command exceeds simultaneous filetransfer limit
79
+ 113, Close: invalid WHAT, Invalid argument to CLOSE command
80
+ 114, Invalid avatar, GET or SET AVATAR avatar index invalid
81
+ 115, Invalid ringtone, GET or SET RINGTONE ringtone index invalid
82
+ 500, CHAT: Invalid chat name given,
83
+ 501, CHAT: No chat found for given chat,
84
+ 502, CHAT: No action name given,
85
+ 503, CHAT: Invalid or unknown action,
86
+ 504, CHAT: action failed,
87
+ 505, CHAT: LEAVE does not take arguments,
88
+ 506, CHAT: ADDMEMBERS: invalid/missing user handle(s) as arguments,
89
+ 507, CHAT: CREATE: invalid/missing user handle(s) as argument,
90
+ 508, CHAT: CREATE: opening a dialog to the given user failed,
91
+ 509, No chat name given,
92
+ 510, Invalid/uknown chat name given,
93
+ 511, Sending a message to chat failes,
94
+ 512, Invalid voicemail id,
95
+ 513, Invalid voicemail object,
96
+ 514, No voicemail property given,
97
+ 515, Assigning speeddial property failed,
98
+ 516, Invalid value given to ISAUTHORIZED/ISBLOCKED,
99
+ 517, Changing ISAUTHORIZED/ISBLOCKED failed,
100
+ 518, Invalid status given for BUDDYSTATUS,
101
+ 519, Updating BUDDYSTATUS failed,
102
+ 520, CLEAR needs a target,
103
+ 521, Invalid/unknown CLEAR target,
104
+ 522, CLEAR CHATHISTORY takes no arguments,
105
+ 523, CLEAR VOICEMAILHISTORY takes no arguments,
106
+ 524, CLEAR CALLHISTORY: missing target argument,
107
+ 525, CLEAR CALLHISTORY: invalid handle argument,
108
+ 526, ALTER: no object type given,
109
+ 527, ALTER: unknown object type given,
110
+ 528, VOICEMAIL: No proper voicemail ID given,
111
+ 529, VOICEMAIL: Invalid voicemail ID given,
112
+ 530, VOICEMAIL: No action given,
113
+ 531, VOICEMAIL: Action failed,
114
+ 532, VOICEMAIL: Unknown action,
115
+ 534, SEARCH GREETING: invalid handle,
116
+ 535, SEARCH GREETING: unable to get greeting
117
+ 536, CREATE: no object type given,
118
+ 537, CREATE : Unknown object type given.,
119
+ 538, DELETE : no object type given.,
120
+ 539, DELETE : unknown object type given.,
121
+ 540, CREATE APPLICATION : missing of invalid name.,
122
+ 541, APPLICATION : Operation Failed.,
123
+ 542, DELETE APPLICATION : missing or invalid application name.,
124
+ 543, GET APPLICATION : missing or invalid application name.,
125
+ 544, GET APPLICATION : missing or invalid property name.,
126
+ 545, ALTER APPLICATION : missing or invalid action.,
127
+ 546, ALTER APPLICATION : Missing or invalid action,
128
+ 547, ALTER APPLICATION CONNECT: Invalid user handle,
129
+ 548, ALTER APPLICATION DISCONNECT: Invalid stream identifier,
130
+ 549, ALTER APPLICATION WRITE : Missing or invalid stream identifier,
131
+ 550, ALTER APPLICATION READ : Missing or invalid stream identifier,
132
+ 551, ALTER APPLICATION DATAGRAM : Missing or invalid stream identifier,property
133
+ 552, SET PROFILE : invalid property profile given,
134
+ 553, SET PROFILE CALL_SEND_TO_VM : no voicemail privledge\, can't forward to voicemail.,
135
+ 555, CALL: No proper call ID given,
136
+ 556, CALL: Invalid call ID given,
137
+ 557, CALL: No action given,
138
+ 558, CALL: Missing or invalid arguments,
139
+ 559, CALL: Action failed,
140
+ 560, CALL: Unknown action,
141
+ 561, SEARCH GROUPS: invalid target,
142
+ 562, SEARCH GROUPS: Invalid group id,
143
+ 563, SEARCH GROUPS: Invalid group object,
144
+ 564, SEARCH GROUPS: Invalid group property given,
145
+ 569, GET AEC: target not allowed,
146
+ 570, SET AEC: invalid value,
147
+ 571, GET AGC: target not allowed,
148
+ 572, SET AGC: invalid value,
149
+ 9901, Internal error,
Binary file
@@ -0,0 +1,16 @@
1
+ $:.unshift File.join(File.dirname(__FILE__))
2
+ require 'pstore'
3
+
4
+ module SkypeR
5
+ class Error
6
+ @@table = PStore.new('error.obj')
7
+
8
+ def self.lookup(num)
9
+ table = PStore.new('error.obj')
10
+ table.transaction do
11
+ p table[num]
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,79 @@
1
+ require 'date'
2
+
3
+ class Time
4
+ def to_datetime
5
+ seconds = sec + Rational(usec, 10**6)
6
+ offset = Rational(utc_offset, 60*60*24)
7
+ DateTime.new(year, month, day, hour, min, seconds, offset)
8
+ end
9
+ end
10
+
11
+
12
+ module SkypeR
13
+ module Object
14
+ class User
15
+ attr_accessor :handle, :fullname, :birthday, :sex, :language, :country, :buddystatus, :isauthorized, :isblocked, :onlinestatus, :lastonlinetimestamp, :can_leave_vm
16
+ def initialize(args={})
17
+ @handle = args[:handle] if args[:handle]
18
+ @fullname = args[:fullname] if args[:fullname]
19
+ @birthday = args[:birthday] if args[:birthday]
20
+ @sex = args[:sex] if args[:sex]
21
+ @language = args[:language] if args[:language]
22
+ @country = args[:country] if args[:country]
23
+ @buddystatus = args[:buddystatus] if args[:buddystatus]
24
+ @isauthorized = args[:isauthorized] if args[:isauthorized]
25
+ @isblocked = args[:isblocked] if args[:isblocked]
26
+ @onlinestatus = args[:onlinestatus] if args[:onlinestatus]
27
+ @lastonlinetimestamp = args[:lastonlinetimestamp] if args[:lastonlinetimestamp]
28
+ @can_leave_vm = args[:can_leave_vm] if args[:can_leave_vm]
29
+ end
30
+ end
31
+
32
+ class Profile
33
+ attr_accessor :pstn_balance, :fullname, :birthday, :sex, :languages, :timezone
34
+ def initialize(args={})
35
+ @pstn_balance = args[:pstn_balance] if args[:pstn_balance]
36
+ @fullname = args[:fullname] if args[:fullname]
37
+ @birthday = args[:birthday] if args[:birthday]
38
+ @sex = args[:sex] if args[:sex]
39
+ @languages = args[:languages] if args[:languages]
40
+ @timezone = args[:timezone] if args[:timezone]
41
+ end
42
+ end
43
+
44
+ class Call
45
+ attr_accessor :timestamp, :partner_handle, :partner_dispname, :target_identity, :conf_id, :type, :status, :video_status, :video_send_status, :failurereason, :subject, :pstn_number, :duration, :pstn_status, :conf_participants_count, :conf_participant, :vm_duration, :vm_allowed_duration, :rate, :rate_currency, :rate_precision, :input, :output, :capture_mic, :vaa_input_status, :forwarded_by, :transfer_active, :transfer_status, :transferred_by, :transferred_to
46
+
47
+ PROPERTIES = %w{TIMESTAMP PARTNER_HANDLE PARTNER_DISPNAME TARGET_IDENTITY CONF_ID TYPE STATUS VIDEO_STATUS VIDEO_SEND_STATUS FAILUREREASON SUBJECT PSTN_NUMBER DURATION PSTN_STATUS CONF_PARTICIPANTS_COUNT CONF_PARTICIPANT VM_DURATION VM_ALLOWED_DURATION RATE RATE_CURRENCY RATE_PRECISION INPUT OUTPUT CAPTURE_MIC VAA_INPUT_STATUS FORWARDED_BY TRANSFER_ACTIVE TRANSFER_STATUS TRANSFERRED_BY TRANSFERRED_TO}
48
+ def initialize
49
+ end
50
+ end
51
+
52
+ class Chat
53
+ def initialize(args={})
54
+ @name = args[:name] if args[:name]
55
+ @timestamp = args[:timestamp] if args[:timestamp]
56
+ @status = args[:status] if args[:status]
57
+ end
58
+ end
59
+
60
+ class ChatMessage
61
+ def initialize(args={})
62
+ @timestamp = args[:timestamp] if args[:timestamp]
63
+ @partner_handle = args[:partner_handle] if args[:partner_handle]
64
+ end
65
+ end
66
+
67
+ class Application
68
+ def initialize(args={})
69
+ @connectable = args[:connectable] if args[:connectable]
70
+ @streams = args[:streams] if args[:streams]
71
+ @sending = args[:sending] if args[:sending]
72
+ end
73
+ end
74
+
75
+ class VoiceMail
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,95 @@
1
+ $:.unshift File.join(File.dirname(__FILE__))
2
+ require 'rubygems'
3
+ #require_gem 'yaparc'
4
+ require 'yaparc'
5
+ require "logger"
6
+
7
+ =begin
8
+ (insert-image-file "~/develop/ruby/skyper/docs/parser.png")
9
+ =end
10
+
11
+ module SkypeR
12
+
13
+ module Parser
14
+ class Identifier < Yaparc::AbstractParser
15
+ def initialize
16
+ @parser = lambda do
17
+ Yaparc::Token.new(Yaparc::Ident.new)
18
+ end
19
+ end
20
+ end
21
+
22
+ class Comma < Yaparc::AbstractParser
23
+
24
+ def initialize
25
+ @parser = lambda do
26
+ Yaparc::Token.new(Yaparc::Char.new(','))
27
+ end
28
+ end
29
+ end
30
+
31
+ class OpenParen < Yaparc::AbstractParser
32
+ def initialize
33
+ @parser = lambda do
34
+ Token.new(Char.new('('))
35
+ end
36
+ end
37
+ end
38
+
39
+ class CloseParen < Yaparc::AbstractParser
40
+ def initialize
41
+ @parser = lambda do
42
+ Yaparc::Token.new(Yaparc::Char.new(')'))
43
+ end
44
+ end
45
+ end
46
+
47
+ class CommandID < Yaparc::AbstractParser
48
+ def initialize
49
+ @parser = lambda do
50
+ Yaparc::Token.new(Yaparc::RegexParser.new(/#[A-Z0-9]+/))
51
+ end
52
+ end
53
+ end
54
+
55
+ # <chat_id> # - chat identifier; string (usually looks like “#me/$target;012345679012345”)
56
+ class ChatID < Yaparc::AbstractParser
57
+ def initialize
58
+ @parser = lambda do
59
+ Yaparc::Token.new(Yaparc::RegexParser.new(/#[A-Za-z]*\/\$[A-Za-z]*;[0-9]*/))
60
+ end
61
+ end
62
+ end
63
+
64
+
65
+ class UserProperty < Yaparc::AbstractParser
66
+ def initialize
67
+ properties = %w{HANDLE FULLNAME BIRTHDAY SEX LANGUAGE COUNTRY PROVINCE CITY PHONE_HOME PHONE_OFFICE PHONE_MOBILE HOMEPAGE ABOUT HASCALLEQUIPMENT BUDDYSTATUS ISAUTHORIZED ISBLOCKED DISPLAYNAME ONLINESTATUS LASTONLINETIMESTAMP CAN_LEAVE_VM SPEEDDIAL RECEIVEDAUTHERREQUEST TIMEZONE IS_CF_ACTIVE}.map {|item| Yaparc::Symbol.new(item)}
68
+ @parser = lambda do
69
+ Yaparc::AltParser.new(*properties)
70
+ end
71
+ end
72
+ end
73
+
74
+ # <profile_property> := PSTN_BALANCE | FULLNAME | BIRTHDAY | SEX | LANGUAGES | TIMEZONE
75
+ class ProfileProperty < Yaparc::AbstractParser
76
+ def initialize
77
+ properties = %w{PSTN_BALANCE FULLNAME BIRTHDAY SEX LANGUAGES TIMEZONE}.map {|item| Yaparc::Symbol.new(item)}
78
+ @parser = lambda do
79
+ Yaparc::AltParser.new(*properties)
80
+ end
81
+ end
82
+ end
83
+
84
+ # <call_property> := TIMESTAMP | PARTNER_HANDLE | PARTNER_DISPNAME | TARGET_IDENTITY | CONF_ID | TYPE | STATUS | VIDEO_STATUS | VIDEO_SEND_STATUS | FAILUREREASON | SUBJECT | PSTN_NUMBER | DURATION | PSTN_STATUS | CONF_PARTICIPANTS_COUNT | CONF_PARTICIPANT | VM_DURATION | VM_ALLOWED_DURATION | RATE | RATE_CURRENCY | RATE_PRECISION | INPUT | OUTPUT | CAPTURE_MIC | VAA_INPUT_STATUS | FORWARDED_BY | TRANSFER_ACTIVE | TRANSFER_STATUS | TRANSFERRED_BY | TRANSFERRED_TO
85
+ class CallProperty < Yaparc::AbstractParser
86
+ def initialize
87
+ properties = SkypeR::Object::Call::PROPERTIES.map {|item| Yaparc::Symbol.new(item)}
88
+ @parser = lambda do
89
+ Yaparc::AltParser.new(*properties)
90
+ end
91
+ end
92
+ end
93
+
94
+ end # of Parser
95
+ end # of Skyper
@@ -0,0 +1,277 @@
1
+ $:.unshift File.join(File.dirname(__FILE__))
2
+ require 'rubygems'
3
+ #require_gem 'yaparc'
4
+ require 'yaparc'
5
+ require "logger"
6
+
7
+
8
+ =begin
9
+ (insert-image-file "~/develop/ruby/skyper/docs/parser.png")
10
+ =end
11
+
12
+ module SkypeR
13
+ module Parser
14
+ class ResponseBase < Yaparc::AbstractParser
15
+
16
+ end
17
+
18
+
19
+ # <response_statement> := [<command_id>] <response>
20
+ # | [<command_id>] error
21
+ class ResponseStatement < ResponseBase
22
+ def initialize
23
+ @parser = lambda do
24
+ Yaparc::AltParser.new(Yaparc::SeqParser.new(Yaparc::ZeroOneParser.new(CommandID.new),
25
+ Response.new) do |command_id, response|
26
+ response
27
+ end,
28
+ Yaparc::SeqParser.new(Yaparc::ZeroOneParser.new(CommandID.new),
29
+ Error.new) do |command_id, error|
30
+ error
31
+ end)
32
+ end
33
+ end
34
+ end
35
+
36
+ class AnyValue < ResponseBase
37
+ def initialize
38
+ @parser = lambda do
39
+ Yaparc::Token.new(Yaparc::RegexParser.new(/[a-zA-Z0-9]+/))
40
+ end
41
+ end
42
+ end
43
+
44
+ # <get_user_response> := USER <identifier> <user_property> <value>
45
+ class GetUserResponse < ResponseBase
46
+ def initialize
47
+ @parser = lambda do
48
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("USER"),
49
+ Yaparc::Identifier.new,
50
+ SkypeR::Parser::UserProperty.new,
51
+ AnyValue.new) do |_,identifier,property, value|
52
+ {:identifier => identifier, :property => property, :value => value}
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ # <get_userstatus_response> := USERSTATUS <value>
59
+ class GetUserstatusResponse < ResponseBase
60
+ def initialize
61
+ @parser = lambda do
62
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("USERSTATUS"),
63
+ AnyValue.new) do |_,value|
64
+ {:value => value}
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ # <get_profile_response> := PROFILE <profile_property> <value>
71
+ class GetProfileResponse < ResponseBase
72
+ def initialize
73
+ @parser = lambda do
74
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("PROFILE"),
75
+ ProfileProperty.new,
76
+ AnyValue.new) do |_,property, value|
77
+ {:property => property, :value => value}
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ # <get_call_response> := CALL <identifier> <call_property> <value>
84
+ class GetCallResponse < ResponseBase
85
+ def initialize
86
+ @parser = lambda do
87
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("CALL"),
88
+ Yaparc::Identifier.new,
89
+ CallProperty.new,
90
+ AnyValue.new) do |_,identifier, property, value|
91
+ {:identifier => identifier, :property => property, :value => value}
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ # <get_chat_chatmessages_response> := CHAT <chat_id> CHATMESSAGES <identifier_sequence>
98
+ class GetChatChatmessagesResponse < ResponseBase
99
+ def initialize
100
+ @parser = lambda do
101
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("CHAT"),
102
+ ChatID.new,
103
+ Yaparc::Symbol.new("CHATMESSAGES"),
104
+ Yaparc::ManyParser.new(
105
+ Yaparc::SeqParser.new(Yaparc::Symbol.new(','),
106
+ Target.new) do |_, target|
107
+ target
108
+ end
109
+ )
110
+ )
111
+ end
112
+ end
113
+ end
114
+
115
+ # <search_users_response> := USERS [<username>[,<username>]*]
116
+ # FIXME for multiple users response
117
+ class SearchUsersResponse < ResponseBase
118
+ def initialize
119
+ @parser = lambda do
120
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("USERS"),
121
+ Username.new,
122
+ Yaparc::ManyParser.new(
123
+ Yaparc::SeqParser.new(
124
+ Yaparc::Symbol.new(','),
125
+ Username.new) do |_, username|
126
+ [username]
127
+ end,
128
+ []
129
+ )
130
+ ) do |_,username,usernames|
131
+ {:usernames => [username] + usernames}
132
+ end
133
+ end
134
+ end
135
+ end
136
+
137
+ # <search_friends_response> := USERS [user[,user]*]
138
+ class SearchFriendsResponse < ResponseBase
139
+ def initialize
140
+ @parser = lambda do
141
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("USERS"),
142
+ Username.new,
143
+ Yaparc::ManyParser.new(
144
+ Yaparc::SeqParser.new(
145
+ Yaparc::Symbol.new(','),
146
+ Username.new) do |_, username|
147
+ [username]
148
+ end,
149
+ []
150
+ )
151
+ ) do |_,username,usernames|
152
+ {:usernames => [username] + usernames}
153
+ end
154
+ end
155
+ end
156
+ end
157
+
158
+ # <search_calls_response> := CALLS [<identifier_sequence>]
159
+ class SearchCallsResponse < ResponseBase
160
+ def initialize
161
+ @parser = lambda do
162
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("CALLS"),
163
+ Yaparc::Identifier.new,
164
+ Yaparc::ManyParser.new(
165
+ Yaparc::SeqParser.new(
166
+ Yaparc::Symbol.new(','),
167
+ Yaparc::Identifier.new) do |_, identifier|
168
+ [identifier]
169
+ end,
170
+ []
171
+ )
172
+ ) do |_,identifier,identifiers|
173
+ {:identifiers => [identifier] + identifiers}
174
+ end
175
+ end
176
+ end
177
+ end
178
+
179
+ # <search_activecalls_response> := CALLS [<identifier_sequence>]
180
+ class SearchActivecallsResponse < ResponseBase
181
+ def initialize
182
+ @parser = lambda do
183
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("CALLS"),
184
+ Yaparc::Identifier.new,
185
+ Yaparc::ManyParser.new(
186
+ Yaparc::SeqParser.new(
187
+ Yaparc::Symbol.new(','),
188
+ Yaparc::Identifier.new) do |_, identifier|
189
+ [identifier]
190
+ end,
191
+ []
192
+ )
193
+ ) do |_,identifier,identifiers|
194
+ {:identifiers => [identifier] + identifiers}
195
+ end
196
+ end
197
+ end
198
+ end
199
+
200
+ # <search_missedcalls_response> := CALLS [<identifier_sequence>]
201
+ class SearchMissedcallsResponse < ResponseBase
202
+ def initialize
203
+ @parser = lambda do
204
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("CALLS"),
205
+ Yaparc::Identifier.new,
206
+ Yaparc::ManyParser.new(
207
+ Yaparc::SeqParser.new(
208
+ Yaparc::Symbol.new(','),
209
+ Yaparc::Identifier.new) do |_, identifier|
210
+ [identifier]
211
+ end,
212
+ []
213
+ )
214
+ ) do |_,identifier,identifiers|
215
+ {:identifiers => [identifier] + identifiers}
216
+ end
217
+ end
218
+ end
219
+ end
220
+
221
+ # <search_userswaitingmyauthorization_response> := USERS [<identifier_sequence>]
222
+ # FIXME for multiple users response
223
+ class SearchUserswaitingmyauthorizationResponse < ResponseBase
224
+ def initialize
225
+ @parser = lambda do
226
+ Yaparc::SeqParser.new(Yaparc::Symbol.new("USERS"),
227
+ Yaparc::Identifier.new,
228
+ Yaparc::ManyParser.new(
229
+ Yaparc::SeqParser.new(
230
+ Yaparc::Symbol.new(','),
231
+ Yaparc::Identifier.new) do |_, identifier|
232
+ [identifier]
233
+ end,
234
+ []
235
+ )
236
+ ) do |_,identifier,identifiers|
237
+ {:identifiers => [identifier] + identifiers}
238
+ end
239
+ end
240
+ end
241
+ end
242
+
243
+ # <voicemail_response> := VOICEMAIL <id> STATUS <value>
244
+ class VoicemailResponse < ResponseBase
245
+ def initialize
246
+ @parser = lambda do
247
+ Yaparc::SeqParser.new(
248
+ Yaparc::Symbol.new("VOICEMAIL"),
249
+ CallId.new,
250
+ Yaparc::Symbol.new("STATUS"),
251
+ AnyValue.new
252
+ ) do |_,call_id,_,value|
253
+ {:call_id => call_id, :value => value}
254
+ end
255
+ end
256
+ end
257
+ end
258
+
259
+ # <chat_create_response> := CHAT <chat_id> STATUS <value>
260
+ class ChatCreateResponse < ResponseBase
261
+ def initialize
262
+ @parser = lambda do
263
+ Yaparc::SeqParser.new(
264
+ Yaparc::Symbol.new("CHAT"),
265
+ CallId.new,
266
+ Yaparc::Symbol.new("STATUS"),
267
+ AnyValue.new
268
+ ) do |_,call_id,_,value|
269
+ {:call_id => call_id, :value => value}
270
+ end
271
+ end
272
+ end
273
+ end
274
+
275
+
276
+ end # of Parser
277
+ end # of Skyper