social_stream 0.21.4 → 0.22.0
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/README.rdoc +11 -5
- data/base/app/assets/stylesheets/cheesecake.css.scss +1 -0
- data/base/app/views/cheesecake/_cheesecake.html.erb +3 -0
- data/base/app/views/cheesecake/_index.html.erb +88 -41
- data/base/app/views/cheesecake/_sector_form.html.erb +12 -12
- data/base/lib/social_stream/base/version.rb +1 -1
- data/base/lib/social_stream/test_helpers/controllers.rb +19 -2
- data/base/lib/tasks/db/populate.rake +190 -165
- data/base/social_stream-base.gemspec +1 -1
- data/base/spec/controllers/posts_controller_spec.rb +19 -1
- data/lib/social_stream/version.rb +1 -1
- data/presence/app/assets/images/status/chat.png +0 -0
- data/presence/app/assets/javascripts/chat_interface_manager.js.erb +42 -45
- data/presence/app/assets/javascripts/chat_parser.js +5 -5
- data/presence/app/assets/javascripts/chat_persistence.js +25 -26
- data/presence/app/assets/javascripts/chat_utilities.js +15 -11
- data/presence/app/assets/javascripts/chat_window_manager.js +129 -26
- data/presence/app/assets/javascripts/jquery.ui.chatbox.sstreampresence.js +22 -3
- data/presence/app/assets/javascripts/social_stream-presence.js +1 -0
- data/presence/app/assets/javascripts/videochat.js.erb +459 -0
- data/presence/app/assets/javascripts/xmpp_client_management.js.erb +303 -65
- data/presence/app/assets/stylesheets/chat.css.scss +42 -1
- data/presence/app/controllers/xmpp_controller.rb +20 -3
- data/presence/app/views/chat/_index.html.erb +7 -2
- data/presence/app/views/xmpp/getOpenTokSessionIDAndToken.xml.builder +6 -0
- data/presence/config/locales/en.yml +22 -1
- data/presence/config/locales/es.yml +23 -2
- data/presence/config/routes.rb +2 -0
- data/presence/ejabberd/conf/ssconfig_example.cfg +4 -3
- data/presence/ejabberd/ejabberd_files.zip +0 -0
- data/presence/ejabberd/ejabberd_scripts/authentication_script +22 -12
- data/presence/ejabberd/ejabberd_scripts/development_scripts/show_config.sh +9 -10
- data/presence/ejabberd/ejabberd_scripts/emanagement +275 -178
- data/presence/ejabberd/ejabberd_scripts/manageWebDomains +164 -0
- data/presence/ejabberd/ejabberd_scripts/rest_api_client_script +75 -32
- data/presence/ejabberd/ejabberd_scripts/synchronize_presence_script +81 -34
- data/presence/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
- data/presence/ejabberd/mod_sspresence/mod_sspresence.erl +27 -23
- data/presence/lib/OpenTok/Exceptions.rb +11 -0
- data/presence/lib/OpenTok/OpenTokSDK.rb +184 -0
- data/presence/lib/OpenTok/Session.rb +27 -0
- data/presence/lib/generators/social_stream/presence/templates/initializer.rb +8 -2
- data/presence/lib/open_tok.rb +31 -0
- data/presence/lib/opentok.rb +29 -0
- data/presence/lib/social_stream-presence.rb +4 -0
- data/presence/lib/social_stream/presence/models/buddy_manager.rb +1 -1
- data/presence/lib/social_stream/presence/version.rb +1 -1
- data/presence/lib/social_stream/presence/xmpp_server_order.rb +96 -76
- data/presence/lib/social_stream/presence/xmpp_ssclient.rb +54 -0
- data/presence/lib/tasks/presence/multidomain.rake +45 -0
- data/presence/lib/tasks/presence/synchronize.rake +18 -4
- data/presence/vendor/assets/javascripts/TB.min.js +4329 -0
- data/social_stream.gemspec +2 -2
- metadata +40 -30
- data/presence/ejabberd/ejabberd_scripts/reset_connection_script +0 -300
- data/presence/ejabberd/ejabberd_scripts/set_script_header.sh +0 -112
@@ -3,7 +3,6 @@
|
|
3
3
|
////////////////////
|
4
4
|
var domain = '<%=SocialStream::Presence.domain%>';
|
5
5
|
|
6
|
-
|
7
6
|
////////////////////
|
8
7
|
//Hash tables
|
9
8
|
////////////////////
|
@@ -34,7 +33,32 @@ statusIcons['away'] = "away";
|
|
34
33
|
statusIcons['xa'] = "away";
|
35
34
|
statusIcons['dnd'] = "dnd";
|
36
35
|
|
36
|
+
//Contact information
|
37
|
+
var contactsInfo = new Array();
|
38
|
+
//contactsInfo['slug'] = "[Object chatContact]";
|
39
|
+
|
40
|
+
//Manage contact information
|
41
|
+
function chatContact(domain,resource,client,version) {
|
42
|
+
this.domain=domain
|
43
|
+
this.resource=resource
|
44
|
+
this.client=client;
|
45
|
+
this.version=version;
|
46
|
+
//Sender: disconnected, negotiating , connecting , waiting, establishing, connected
|
47
|
+
//Receiver: disconnected , pending , establishing, connected
|
48
|
+
this.videoChatStatus = "disconnected";
|
49
|
+
this.session_id=null;
|
50
|
+
this.user_token=null;
|
51
|
+
this.guest_token=null;
|
52
|
+
this.session=null;
|
53
|
+
this.publisher=null;
|
54
|
+
}
|
55
|
+
|
37
56
|
|
57
|
+
//IQsIDs
|
58
|
+
var iqStanzaID = new Array();
|
59
|
+
iqStanzaID['cinfo'] = "versionID";
|
60
|
+
iqStanzaID['videochatRequest'] = "videochatRequestID";
|
61
|
+
iqStanzaID['videochatRequestCancel'] = "videochatRequestCancelID";
|
38
62
|
|
39
63
|
////////////////////
|
40
64
|
//Connect functions
|
@@ -42,35 +66,39 @@ statusIcons['dnd'] = "dnd";
|
|
42
66
|
|
43
67
|
function connectToChat(user_jid,cookie,password){
|
44
68
|
|
45
|
-
if (
|
69
|
+
if (isUserConnected()){
|
70
|
+
log("USer already connected")
|
46
71
|
return true;
|
47
72
|
}
|
48
73
|
|
49
74
|
if (authByCookie()){
|
50
75
|
if (connectToServerWithCookie(user_jid, cookie)==false){
|
51
|
-
|
76
|
+
updateChatWindow();
|
52
77
|
}
|
53
78
|
} else {
|
54
79
|
if (connectToServerWithPassword(user_jid,password)==false){
|
55
|
-
|
80
|
+
updateChatWindow();
|
56
81
|
}
|
57
82
|
}
|
58
83
|
}
|
59
84
|
|
60
85
|
|
61
86
|
function isStropheConnected(){
|
62
|
-
if((
|
87
|
+
if((strophe_connection!=null)&&(strophe_connection.connected)){
|
63
88
|
return true;
|
64
89
|
} else {
|
65
90
|
return false;
|
66
91
|
}
|
67
92
|
}
|
68
93
|
|
94
|
+
function isUserConnected(){
|
95
|
+
return ((isStropheConnected()) && (userStatus!="offline") && (!disconnectionFlag));
|
96
|
+
}
|
69
97
|
|
70
98
|
function connectToServerWithCookie(user_jid, cookie){
|
71
99
|
try {
|
72
|
-
|
73
|
-
|
100
|
+
strophe_connection = new Strophe.Connection(BOSH_SERVICE);
|
101
|
+
strophe_connection.connect(user_jid, cookie, onConnect);
|
74
102
|
} catch (err) {
|
75
103
|
//"Handle errors"
|
76
104
|
return false;
|
@@ -93,8 +121,8 @@ function connectToServerWithPassword(user_jid, chatPassword){
|
|
93
121
|
|
94
122
|
try {
|
95
123
|
//Connect actual user to the chat
|
96
|
-
|
97
|
-
|
124
|
+
strophe_connection = new Strophe.Connection(BOSH_SERVICE);
|
125
|
+
strophe_connection.connect(user_jid, password, onConnect);
|
98
126
|
} catch (err) {
|
99
127
|
//"Handle errors"
|
100
128
|
return false;
|
@@ -125,21 +153,15 @@ function authByPassword(){
|
|
125
153
|
//Global variables
|
126
154
|
var userStatus;
|
127
155
|
var awayTimerPeriod = 60000;
|
128
|
-
var timerPeriod = 5000;
|
129
|
-
var refreshMinTime = 3*timerPeriod;
|
130
156
|
var awayTime = 10*60000; //10 minutes
|
131
157
|
var awayCounter = 0;
|
132
|
-
var
|
133
|
-
var connection = null;
|
158
|
+
var strophe_connection = null;
|
134
159
|
var reconnectAttempts = 3;
|
135
160
|
var awayTimer;
|
136
|
-
var timer;
|
137
161
|
var reconnectTimer;
|
138
|
-
var disconnectionFlag =
|
162
|
+
var disconnectionFlag = false;
|
139
163
|
var afterNewConnectionFlag = false;
|
140
164
|
var afterFirstConnectionFlag = true;
|
141
|
-
var requestContacts=false;
|
142
|
-
var cyclesToRefresh = (refreshMinTime/timerPeriod);
|
143
165
|
|
144
166
|
|
145
167
|
function onConnect(status) {
|
@@ -156,7 +178,12 @@ function onConnect(status) {
|
|
156
178
|
|
157
179
|
log('Strophe onConnect callback call with status ' + status);
|
158
180
|
|
159
|
-
if (status == Strophe.Status.
|
181
|
+
if (status == Strophe.Status.ERROR){
|
182
|
+
log('Strophe connection error');
|
183
|
+
return;
|
184
|
+
}
|
185
|
+
|
186
|
+
if (status == Strophe.Status.ATTACHED){
|
160
187
|
log('Strophe connection attached');
|
161
188
|
return;
|
162
189
|
}
|
@@ -174,9 +201,11 @@ function onConnect(status) {
|
|
174
201
|
if (status == Strophe.Status.DISCONNECTING) {
|
175
202
|
log('Strophe is disconnecting.');
|
176
203
|
return;
|
177
|
-
}
|
204
|
+
}
|
178
205
|
|
179
|
-
|
206
|
+
if(typeof initialTimer != 'undefined'){
|
207
|
+
clearTimeout(initialTimer);
|
208
|
+
}
|
180
209
|
|
181
210
|
if (status == Strophe.Status.CONNFAIL) {
|
182
211
|
log('Strophe failed to connect.');
|
@@ -195,7 +224,7 @@ function onConnect(status) {
|
|
195
224
|
log('Strophe is disconnected.');
|
196
225
|
disconnectionFlag = true;
|
197
226
|
clearTimeout(awayTimer);
|
198
|
-
|
227
|
+
updateInterfaceAfterUsersDisconnect();
|
199
228
|
reconnectTimer = setTimeout ("onReconnect()", 5000);
|
200
229
|
} else if (status == Strophe.Status.CONNECTED) {
|
201
230
|
//AFTER CONNECT ACTIONS
|
@@ -205,15 +234,13 @@ function onConnect(status) {
|
|
205
234
|
clearTimeout(reconnectTimer);
|
206
235
|
|
207
236
|
//addHandler:(callback, namespace to match, stanza name, stanza type, stanza id , stanza from, options)
|
208
|
-
|
209
|
-
|
210
|
-
|
237
|
+
strophe_connection.addHandler(onMessage, null, 'message', null, null, null);
|
238
|
+
strophe_connection.addHandler(onPresence, null, 'presence', null, null, null);
|
239
|
+
strophe_connection.addHandler(onIQStanza,null, "iq", null, null);
|
211
240
|
|
212
|
-
|
213
241
|
disconnectionFlag = false;
|
214
242
|
afterNewConnectionFlag = true;
|
215
243
|
|
216
|
-
log('Presenze stanza send for:' + connection.jid);
|
217
244
|
userStatus = getRestoreUserChatStatus();
|
218
245
|
if(userStatus=="offline"){
|
219
246
|
userStatus="chat";
|
@@ -221,7 +248,6 @@ function onConnect(status) {
|
|
221
248
|
sendStatus(userStatus);
|
222
249
|
|
223
250
|
awayTimer = setInterval("awayTimerFunction()", awayTimerPeriod);
|
224
|
-
timer = setInterval("timerFunction()", timerPeriod);
|
225
251
|
}
|
226
252
|
|
227
253
|
updateChatWindow();
|
@@ -254,8 +280,8 @@ function disconnectStrophe(){
|
|
254
280
|
setStatusWidgetTitle("offline");
|
255
281
|
|
256
282
|
if(isStropheConnected()){
|
257
|
-
|
258
|
-
|
283
|
+
strophe_connection.send($pres({type: "unavailable"}).tree());
|
284
|
+
strophe_connection.disconnect();
|
259
285
|
}
|
260
286
|
}
|
261
287
|
|
@@ -287,9 +313,9 @@ function onMessage(msg) {
|
|
287
313
|
//Manage Presence stanzas
|
288
314
|
///////
|
289
315
|
function onPresence(presence) {
|
290
|
-
|
291
|
-
|
292
|
-
|
316
|
+
|
317
|
+
log(presence)
|
318
|
+
|
293
319
|
//Check presence stanza type
|
294
320
|
var ptype = $(presence).attr('type');
|
295
321
|
|
@@ -317,13 +343,14 @@ function processAvailablePresenceStanza(presence){
|
|
317
343
|
var slug = from.split("@")[0];
|
318
344
|
|
319
345
|
if (slug != user_slug) {
|
346
|
+
storeContactInformation(presence);
|
320
347
|
if (getConnectionBoxFromSlug(slug)!=null){
|
321
348
|
var status = $(presence).find('show').text();
|
322
349
|
setUserIconStatus(slug,status);
|
323
350
|
updateInterfaceAfterPresenceStanza(slug,true);
|
324
351
|
} else {
|
325
352
|
if(! isAdminSlug(slug)){
|
326
|
-
|
353
|
+
updateChatWindow();
|
327
354
|
}
|
328
355
|
}
|
329
356
|
}
|
@@ -340,76 +367,287 @@ function processUnavailablePresenceStanza(presence){
|
|
340
367
|
}
|
341
368
|
}
|
342
369
|
|
370
|
+
function storeContactInformation(stanza){
|
371
|
+
var from = $(stanza).attr('from');
|
372
|
+
var split = from.split("@");
|
373
|
+
var slug = split[0];
|
374
|
+
var domain = split[1].split("/")[0];
|
375
|
+
var resource = split[1].split("/")[1];
|
376
|
+
|
377
|
+
if (!(slug in contactsInfo)) {
|
378
|
+
var contact = new chatContact(domain,resource,null,null);
|
379
|
+
contactsInfo[slug]=contact;
|
380
|
+
} else {
|
381
|
+
contactsInfo[slug].domain = domain;
|
382
|
+
contactsInfo[slug].resource = resource;
|
383
|
+
}
|
384
|
+
}
|
385
|
+
|
386
|
+
|
343
387
|
|
344
388
|
////////
|
345
389
|
//Manage IQ stanzas
|
346
390
|
///////
|
391
|
+
|
392
|
+
///////
|
393
|
+
//RECEIVED STANZAS
|
394
|
+
///////
|
347
395
|
function onIQStanza(iq){
|
348
|
-
|
396
|
+
var type = iq.getAttribute("type");
|
349
397
|
var from = iq.getAttribute("from");
|
350
398
|
var slug = from.split("@")[0];
|
351
399
|
|
352
400
|
if (slug == user_slug) {
|
353
|
-
return;
|
401
|
+
return true;
|
354
402
|
}
|
355
403
|
|
356
|
-
|
404
|
+
if(type=="get"){
|
405
|
+
return handleGetIQStanza(iq,from,slug);
|
406
|
+
} else if(type="result"){
|
407
|
+
return handleResultIQStanza(iq,from,slug)
|
408
|
+
}
|
409
|
+
|
410
|
+
return true;
|
411
|
+
}
|
412
|
+
|
413
|
+
///////
|
414
|
+
//RECEIVED STANZAS: GET
|
415
|
+
///////
|
416
|
+
function handleGetIQStanza(iq,jid,slug){
|
417
|
+
|
418
|
+
var iqID = iq.getAttribute("id");
|
419
|
+
|
420
|
+
//Case 1: Request client info
|
421
|
+
var queryElements = iq.getElementsByTagName('query');
|
357
422
|
|
358
423
|
if (queryElements.length > 0) {
|
359
424
|
var query = queryElements[0];
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
425
|
+
var xmlns_type = query.getAttribute("xmlns");
|
426
|
+
|
427
|
+
if( xmlns_type == "jabber:iq:version"){
|
428
|
+
sendIQStanzaWithClientInfo(jid,iqID);
|
429
|
+
return true;
|
430
|
+
}
|
431
|
+
|
432
|
+
if (xmlns_type == "jabber:iq:last") {
|
433
|
+
sendIQStanzaLast(jid,iqID);
|
434
|
+
return true;
|
435
|
+
}
|
436
|
+
}
|
437
|
+
|
438
|
+
//Case 2: Request videochat
|
439
|
+
if(iqID==iqStanzaID['videochatRequest']){
|
440
|
+
handleGetVideochatIQStanza(jid,iqID,iq,slug)
|
441
|
+
return true;
|
442
|
+
}
|
443
|
+
|
444
|
+
//Case: Default behaviour
|
445
|
+
sendIQEmpty(jid,iqID);
|
446
|
+
|
447
|
+
return true;
|
448
|
+
}
|
449
|
+
|
450
|
+
|
451
|
+
|
452
|
+
function handleGetVideochatIQStanza(jid,iqID,iq,slug){
|
453
|
+
storeContactInformation(iq);
|
454
|
+
var queryTag = iq.getElementsByTagName('query');
|
455
|
+
|
456
|
+
if (queryTag.length > 0) {
|
457
|
+
var queryElement = queryTag[0];
|
458
|
+
var session_id = queryElement.getElementsByTagName('session_id');
|
459
|
+
var token = queryElement.getElementsByTagName('token');
|
460
|
+
|
461
|
+
if((session_id.length == 1)&&(token.length == 1)){
|
462
|
+
contactsInfo[slug].session_id = $(session_id).text();
|
463
|
+
contactsInfo[slug].user_token = $(token).text();
|
464
|
+
updateInterfaceAfterVideoRequestReceived(slug);
|
465
|
+
return;
|
466
|
+
}
|
467
|
+
}
|
468
|
+
|
469
|
+
//Send error stanza
|
470
|
+
sendIQEmpty(jid,iqID);
|
471
|
+
}
|
472
|
+
|
473
|
+
|
474
|
+
///////
|
475
|
+
//RECEIVED STANZAS: RESULT
|
476
|
+
///////
|
477
|
+
function handleResultIQStanza(iq,jid,slug){
|
478
|
+
var iqID = iq.getAttribute("id");
|
479
|
+
|
480
|
+
|
481
|
+
if (iqID==iqStanzaID['cinfo']){
|
482
|
+
return handleIQResultWithClientInfo(iq,slug);
|
368
483
|
}
|
484
|
+
|
485
|
+
if (iqID==iqStanzaID['videochatRequest']){
|
486
|
+
return handleIQResultFromVideochatRequest(iq,slug);
|
487
|
+
}
|
488
|
+
|
489
|
+
if(iqID==iqStanzaID['videochatRequestCancel']){
|
490
|
+
return handleIQResultFromVideochatRequestCancel(iq,slug);
|
491
|
+
}
|
492
|
+
|
493
|
+
//Case: Default behaviour
|
494
|
+
return true;
|
495
|
+
}
|
369
496
|
|
497
|
+
|
498
|
+
function handleIQResultWithClientInfo(iq,slug){
|
499
|
+
var queryTag = iq.getElementsByTagName('query');
|
500
|
+
|
501
|
+
if (queryTag.length > 0) {
|
502
|
+
var queryElement = queryTag[0];
|
503
|
+
var name = queryElement.getElementsByTagName('name');
|
504
|
+
var version = queryElement.getElementsByTagName('version');
|
505
|
+
|
506
|
+
if((name.length == 1)&&(version.length == 1)){
|
507
|
+
var clientValue = $(name).text();
|
508
|
+
var versionValue = $(version).text();
|
509
|
+
|
510
|
+
if (!(slug in contactsInfo)) {
|
511
|
+
var contact = new chatContact(null,null,clientValue,versionValue);
|
512
|
+
contactsInfo[slug]=contact;
|
513
|
+
} else {
|
514
|
+
contactsInfo[slug].client = clientValue;
|
515
|
+
contactsInfo[slug].version = versionValue;
|
516
|
+
}
|
517
|
+
clientInfoReceivedTrigger(slug);
|
518
|
+
}
|
519
|
+
}
|
520
|
+
|
370
521
|
return true;
|
371
522
|
}
|
372
523
|
|
373
524
|
|
525
|
+
function handleIQResultFromVideochatRequest(iq,slug){
|
526
|
+
|
527
|
+
var queryTag = iq.getElementsByTagName('query');
|
528
|
+
|
529
|
+
if (queryTag.length > 0) {
|
530
|
+
var queryElement = queryTag[0];
|
531
|
+
var response = queryElement.getElementsByTagName('response');
|
532
|
+
|
533
|
+
if(response.length == 1){
|
534
|
+
receiveVideoChatResponseFromUser(slug,$(response).text());
|
535
|
+
return true;
|
536
|
+
}
|
537
|
+
}
|
538
|
+
|
539
|
+
receiveVideoChatResponseFromUser(slug,"Bad response");
|
540
|
+
return true;
|
541
|
+
}
|
542
|
+
|
543
|
+
|
544
|
+
function handleIQResultFromVideochatRequestCancel(iq,slug){
|
545
|
+
|
546
|
+
var queryTag = iq.getElementsByTagName('query');
|
547
|
+
|
548
|
+
if (queryTag.length > 0) {
|
549
|
+
var queryElement = queryTag[0];
|
550
|
+
var response = queryElement.getElementsByTagName('response');
|
551
|
+
|
552
|
+
if(response.length == 1){
|
553
|
+
receiveVideoChatCancelationFromUser(slug,$(response).text());
|
554
|
+
return true;
|
555
|
+
}
|
556
|
+
}
|
557
|
+
|
558
|
+
receiveVideoChatCancelationFromUser(slug,"Bad response");
|
559
|
+
return true;
|
560
|
+
}
|
561
|
+
|
562
|
+
|
563
|
+
///////
|
564
|
+
//SEND STANZAS: GET
|
565
|
+
///////
|
566
|
+
function sendIQStanzaForRequestClientInfo(slug){
|
567
|
+
if (slug in contactsInfo) {
|
568
|
+
var domain = contactsInfo[slug].domain;
|
569
|
+
var resource = contactsInfo[slug].resource;
|
570
|
+
var jid=slug+"@"+domain+"/"+resource
|
571
|
+
|
572
|
+
var iq = $iq({to: jid, type: "get", id: iqStanzaID['cinfo'], xmlns: "jabber:iq:version"})
|
573
|
+
.c("query", {xmlns: "jabber:iq:version"});
|
574
|
+
strophe_connection.sendIQ(iq);
|
575
|
+
}
|
576
|
+
}
|
577
|
+
|
578
|
+
function sendIQStanzaToRequestVideochat(slug){
|
579
|
+
if (slug in contactsInfo) {
|
580
|
+
var jid=slug+"@"+contactsInfo[slug].domain+"/"+contactsInfo[slug].resource;
|
581
|
+
|
582
|
+
var iq = $iq({to: jid, type: "get", id: iqStanzaID['videochatRequest']})
|
583
|
+
.c("query", {xmlns: "urn:ietf:params:xml:ns:xmpp-stanzas"})
|
584
|
+
.c("session_id").t(contactsInfo[slug].session_id).up()
|
585
|
+
.c("token").t(contactsInfo[slug].guest_token);
|
586
|
+
strophe_connection.sendIQ(iq);
|
587
|
+
}
|
588
|
+
}
|
589
|
+
|
590
|
+
|
591
|
+
|
592
|
+
///////
|
593
|
+
//SEND STANZAS: RESULT
|
594
|
+
///////
|
374
595
|
function sendIQStanzaWithClientInfo(jid,iqID){
|
375
596
|
var client = "Social Stream XMPP Client"
|
376
|
-
var version =
|
597
|
+
var version = getJavascriptXMPPClientName();
|
377
598
|
var iq = $iq({to: jid, type: "result", id: iqID})
|
378
599
|
.c("query", {xmlns: "jabber:iq:version"}).c("name").t(client).up().c("version").t(version);
|
379
|
-
|
600
|
+
strophe_connection.sendIQ(iq);
|
380
601
|
}
|
381
602
|
|
603
|
+
function getJavascriptXMPPClientName(){
|
604
|
+
return '<%=SocialStream::Presence::VERSION%>';
|
605
|
+
}
|
382
606
|
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
//var iq = $iq({to: jid, type: "result", id: iqID})
|
388
|
-
//.c("query", {xmlns: "jabber:iq:version"}).c("name").t(client).up().c("version").t(version);
|
389
|
-
//connection.sendIQ(iq);
|
607
|
+
function sendIQStanzaLast(jid,iqID){
|
608
|
+
var iq = $iq({to: jid, type: "result", id: iqID})
|
609
|
+
.c("query", {xmlns: "jabber:iq:last", seconds: "0"});
|
610
|
+
strophe_connection.sendIQ(iq);
|
390
611
|
}
|
391
612
|
|
613
|
+
function sendIQEmpty(jid,iqID){
|
614
|
+
var iq = $iq({to: jid, type: "result", id: iqID})
|
615
|
+
strophe_connection.sendIQ(iq);
|
616
|
+
}
|
392
617
|
|
393
|
-
function
|
394
|
-
|
618
|
+
function sendIQStanzaToResponseVideochat(slug,result){
|
619
|
+
if (slug in contactsInfo) {
|
620
|
+
var jid=slug+"@"+contactsInfo[slug].domain+"/"+contactsInfo[slug].resource;
|
621
|
+
var iq = $iq({to: jid, type: "result", id: iqStanzaID['videochatRequest']})
|
622
|
+
.c("query", {xmlns: "urn:ietf:params:xml:ns:xmpp-stanzas"})
|
623
|
+
.c("response").t(result);
|
624
|
+
strophe_connection.sendIQ(iq);
|
625
|
+
}
|
395
626
|
}
|
396
627
|
|
397
|
-
function
|
398
|
-
|
628
|
+
function sendIQStanzaToCancelVideochat(slug){
|
629
|
+
if (slug in contactsInfo) {
|
630
|
+
var jid=slug+"@"+contactsInfo[slug].domain+"/"+contactsInfo[slug].resource;
|
631
|
+
var iq = $iq({to: jid, type: "result", id: iqStanzaID['videochatRequestCancel']})
|
632
|
+
.c("query", {xmlns: "urn:ietf:params:xml:ns:xmpp-stanzas"})
|
633
|
+
.c("response").t("cancel");
|
634
|
+
strophe_connection.sendIQ(iq);
|
635
|
+
}
|
399
636
|
}
|
400
637
|
|
401
638
|
|
639
|
+
|
402
640
|
////////
|
403
641
|
//Send Message stanzas
|
404
642
|
///////
|
405
643
|
function sendChatMessage(from,to,text){
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
644
|
+
var type = "chat";
|
645
|
+
var body= $build("body");
|
646
|
+
body.t(text);
|
647
|
+
var message = $msg({to: to, from: from, type: 'chat'}).cnode(body.tree());
|
648
|
+
strophe_connection.send(message.tree());
|
649
|
+
restartAwayTimer();
|
650
|
+
return true;
|
413
651
|
}
|
414
652
|
|
415
653
|
|
@@ -429,7 +667,7 @@ function sendStatus(status){
|
|
429
667
|
.t(statusMessage[status]).up() //Status message
|
430
668
|
.c('show')
|
431
669
|
.t(status);
|
432
|
-
|
670
|
+
strophe_connection.send(pres.tree());
|
433
671
|
setStatusWidgetTitle(status);
|
434
672
|
}
|
435
673
|
}
|