annotate mod_tcpproxy/web/strophe.js @ 234:abcb59ab355c

Add new motd_sequential module. This module lets you define numbered messages shown to each user in order, but only once per user, and persistent across server restarts. Useful for notifying users of added features and changes in an incremental fashion.
author Jeff Mitchell <jeffrey.mitchell@gmail.com>
date Wed, 04 Aug 2010 22:29:51 +0000
parents f2f9b965d1ad
children 7dbde05b48a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
148
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 // This code was written by Tyler Akins and has been placed in the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 // public domain. It would be nice if you left this header intact.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 // Base64 code from Tyler Akins -- http://rumkin.com
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 var Base64 = (function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 var obj = {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 /**
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 * Encodes a string in base64
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 * @param {String} input The string to encode in base64.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 encode: function (input) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 var output = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 var chr1, chr2, chr3;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 var enc1, enc2, enc3, enc4;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 var i = 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 do {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 chr1 = input.charCodeAt(i++);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 chr2 = input.charCodeAt(i++);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 chr3 = input.charCodeAt(i++);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 enc1 = chr1 >> 2;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 enc4 = chr3 & 63;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 if (isNaN(chr2)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 enc3 = enc4 = 64;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 } else if (isNaN(chr3)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 enc4 = 64;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 keyStr.charAt(enc3) + keyStr.charAt(enc4);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 } while (i < input.length);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 return output;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 /**
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 * Decodes a base64 string.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 * @param {String} input The string to decode.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 decode: function (input) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 var output = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 var chr1, chr2, chr3;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 var enc1, enc2, enc3, enc4;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 var i = 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 do {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 enc1 = keyStr.indexOf(input.charAt(i++));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 enc2 = keyStr.indexOf(input.charAt(i++));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 enc3 = keyStr.indexOf(input.charAt(i++));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 enc4 = keyStr.indexOf(input.charAt(i++));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 chr1 = (enc1 << 2) | (enc2 >> 4);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 chr3 = ((enc3 & 3) << 6) | enc4;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 output = output + String.fromCharCode(chr1);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 if (enc3 != 64) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 output = output + String.fromCharCode(chr2);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 if (enc4 != 64) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 output = output + String.fromCharCode(chr3);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 } while (i < input.length);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 return output;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 return obj;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 })();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 * Digest Algorithm, as defined in RFC 1321.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86 * Distributed under the BSD License
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 * See http://pajhome.org.uk/crypt/md5 for more info.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 var MD5 = (function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 * Configurable variables. You may need to tweak these to be compatible with
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93 * the server-side, but the defaults work in most cases.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96 var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 * to work around bugs in some JS interpreters.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 var safe_add = function (x, y) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 return (msw << 16) | (lsw & 0xFFFF);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 * Bitwise rotate a 32-bit number to the left.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 var bit_rol = function (num, cnt) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 return (num << cnt) | (num >>> (32 - cnt));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 * Convert a string to an array of little-endian words
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 var str2binl = function (str) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 var bin = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 var mask = (1 << chrsz) - 1;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 for(var i = 0; i < str.length * chrsz; i += chrsz)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 return bin;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 * Convert an array of little-endian words to a string
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 var binl2str = function (bin) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 var str = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 var mask = (1 << chrsz) - 1;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 for(var i = 0; i < bin.length * 32; i += chrsz)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 return str;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
143 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 * Convert an array of little-endian words to a hex string.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 var binl2hex = function (binarray) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 var str = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149 for(var i = 0; i < binarray.length * 4; i++)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
153 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
154 return str;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
157 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
158 * Convert an array of little-endian words to a base-64 string
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
159 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 var binl2b64 = function (binarray) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
162 var str = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 var triplet, j;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
164 for(var i = 0; i < binarray.length * 4; i += 3)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166 triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16) |
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
167 (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 ) |
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168 ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
169 for(j = 0; j < 4; j++)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
171 if(i * 8 + j * 6 > binarray.length * 32) { str += b64pad; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
172 else { str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
173 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
174 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
175 return str;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
176 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
177
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
178 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
179 * These functions implement the four basic operations the algorithm uses.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
180 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
181 var md5_cmn = function (q, a, b, x, s, t) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
182 return safe_add(bit_rol(safe_add(safe_add(a, q),safe_add(x, t)), s),b);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
183 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
184
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
185 var md5_ff = function (a, b, c, d, x, s, t) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
186 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
187 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
188
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
189 var md5_gg = function (a, b, c, d, x, s, t) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
191 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
192
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 var md5_hh = function (a, b, c, d, x, s, t) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
194 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
195 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
196
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
197 var md5_ii = function (a, b, c, d, x, s, t) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
198 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 * Calculate the MD5 of an array of little-endian words, and a bit length
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
204 var core_md5 = function (x, len) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
205 /* append padding */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206 x[len >> 5] |= 0x80 << ((len) % 32);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
207 x[(((len + 64) >>> 9) << 4) + 14] = len;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
208
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 var a = 1732584193;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
210 var b = -271733879;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
211 var c = -1732584194;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
212 var d = 271733878;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
213
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
214 var olda, oldb, oldc, oldd;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
215 for (var i = 0; i < x.length; i += 16)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
216 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
217 olda = a;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
218 oldb = b;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
219 oldc = c;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
220 oldd = d;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
221
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
222 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
223 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
224 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
225 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
226 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
227 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
228 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
229 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
230 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
231 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
232 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
233 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
234 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
235 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
236 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
237 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
238
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
239 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
240 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
241 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
242 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
243 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
244 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
245 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
246 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
247 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
248 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
249 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
250 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
251 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
252 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
253 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
254 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
255
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
256 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
257 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
258 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
259 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
260 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
261 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
262 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
263 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
264 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
265 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
266 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
267 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
268 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
269 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
270 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
271 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
272
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
273 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
274 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
275 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
276 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
277 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
278 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
279 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
280 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
281 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
282 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
283 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
284 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
285 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
286 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
287 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
288 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
289
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
290 a = safe_add(a, olda);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
291 b = safe_add(b, oldb);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
292 c = safe_add(c, oldc);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
293 d = safe_add(d, oldd);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
294 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
295 return [a, b, c, d];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
296 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
297
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
298
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
299 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
300 * Calculate the HMAC-MD5, of a key and some data
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
301 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
302 var core_hmac_md5 = function (key, data) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
303 var bkey = str2binl(key);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
304 if(bkey.length > 16) { bkey = core_md5(bkey, key.length * chrsz); }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
305
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
306 var ipad = new Array(16), opad = new Array(16);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
307 for(var i = 0; i < 16; i++)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
308 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
309 ipad[i] = bkey[i] ^ 0x36363636;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
310 opad[i] = bkey[i] ^ 0x5C5C5C5C;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
311 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
312
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
313 var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
314 return core_md5(opad.concat(hash), 512 + 128);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
315 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
316
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
317 var obj = {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
318 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
319 * These are the functions you'll usually want to call.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
320 * They take string arguments and return either hex or base-64 encoded
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
321 * strings.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
322 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
323 hexdigest: function (s) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
324 return binl2hex(core_md5(str2binl(s), s.length * chrsz));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
325 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
326
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
327 b64digest: function (s) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
328 return binl2b64(core_md5(str2binl(s), s.length * chrsz));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
329 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
330
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
331 hash: function (s) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
332 return binl2str(core_md5(str2binl(s), s.length * chrsz));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
333 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
334
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
335 hmac_hexdigest: function (key, data) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
336 return binl2hex(core_hmac_md5(key, data));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
337 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
338
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
339 hmac_b64digest: function (key, data) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
340 return binl2b64(core_hmac_md5(key, data));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
341 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
342
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
343 hmac_hash: function (key, data) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
344 return binl2str(core_hmac_md5(key, data));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
345 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
346
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
347 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
348 * Perform a simple self-test to see if the VM is working
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
349 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
350 test: function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
351 return MD5.hexdigest("abc") === "900150983cd24fb0d6963f7d28e17f72";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
352 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
353 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
354
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
355 return obj;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
356 })();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
357
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
358 /*
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
359 This program is distributed under the terms of the MIT license.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
360 Please see the LICENSE file for details.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
361
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
362 Copyright 2006-2008, OGG, LLC
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
363 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
364
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
365 /* jslint configuration: */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
366 /*global document, window, setTimeout, clearTimeout, console,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
367 XMLHttpRequest, ActiveXObject,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
368 Base64, MD5,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
369 Strophe, $build, $msg, $iq, $pres */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
370
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
371 /** File: strophe.js
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
372 * A JavaScript library for XMPP BOSH.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
373 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
374 * This is the JavaScript version of the Strophe library. Since JavaScript
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
375 * has no facilities for persistent TCP connections, this library uses
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
376 * Bidirectional-streams Over Synchronous HTTP (BOSH) to emulate
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
377 * a persistent, stateful, two-way connection to an XMPP server. More
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
378 * information on BOSH can be found in XEP 124.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
379 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
380
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
381 /** PrivateFunction: Function.prototype.bind
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
382 * Bind a function to an instance.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
383 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
384 * This Function object extension method creates a bound method similar
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
385 * to those in Python. This means that the 'this' object will point
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
386 * to the instance you want. See
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
387 * <a href='http://benjamin.smedbergs.us/blog/2007-01-03/bound-functions-and-function-imports-in-javascript/'>Bound Functions and Function Imports in JavaScript</a>
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
388 * for a complete explanation.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
389 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
390 * This extension already exists in some browsers (namely, Firefox 3), but
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
391 * we provide it to support those that don't.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
392 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
393 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
394 * (Object) obj - The object that will become 'this' in the bound function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
395 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
396 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
397 * The bound function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
398 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
399 if (!Function.prototype.bind) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
400 Function.prototype.bind = function (obj)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
401 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
402 var func = this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
403 return function () { return func.apply(obj, arguments); };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
404 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
405 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
406
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
407 /** PrivateFunction: Function.prototype.prependArg
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
408 * Prepend an argument to a function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
409 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
410 * This Function object extension method returns a Function that will
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
411 * invoke the original function with an argument prepended. This is useful
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
412 * when some object has a callback that needs to get that same object as
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
413 * an argument. The following fragment illustrates a simple case of this
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
414 * > var obj = new Foo(this.someMethod);</code></blockquote>
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
415 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
416 * Foo's constructor can now use func.prependArg(this) to ensure the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
417 * passed in callback function gets the instance of Foo as an argument.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
418 * Doing this without prependArg would mean not setting the callback
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
419 * from the constructor.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
420 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
421 * This is used inside Strophe for passing the Strophe.Request object to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
422 * the onreadystatechange handler of XMLHttpRequests.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
423 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
424 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
425 * arg - The argument to pass as the first parameter to the function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
426 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
427 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
428 * A new Function which calls the original with the prepended argument.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
429 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
430 if (!Function.prototype.prependArg) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
431 Function.prototype.prependArg = function (arg)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
432 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
433 var func = this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
434
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
435 return function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
436 var newargs = [arg];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
437 for (var i = 0; i < arguments.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
438 newargs.push(arguments[i]);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
439 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
440 return func.apply(this, newargs);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
441 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
442 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
443 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
444
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
445 /** PrivateFunction: Array.prototype.indexOf
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
446 * Return the index of an object in an array.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
447 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
448 * This function is not supplied by some JavaScript implementations, so
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
449 * we provide it if it is missing. This code is from:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
450 * http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Objects:Array:indexOf
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
451 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
452 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
453 * (Object) elt - The object to look for.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
454 * (Integer) from - The index from which to start looking. (optional).
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
455 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
456 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
457 * The index of elt in the array or -1 if not found.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
458 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
459 if (!Array.prototype.indexOf)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
460 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
461 Array.prototype.indexOf = function(elt /*, from*/)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
462 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
463 var len = this.length;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
464
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
465 var from = Number(arguments[1]) || 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
466 from = (from < 0) ? Math.ceil(from) : Math.floor(from);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
467 if (from < 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
468 from += len;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
469 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
470
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
471 for (; from < len; from++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
472 if (from in this && this[from] === elt) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
473 return from;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
474 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
475 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
476
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
477 return -1;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
478 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
479 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
480
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
481 /* All of the Strophe globals are defined in this special function below so
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
482 * that references to the globals become closures. This will ensure that
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
483 * on page reload, these references will still be available to callbacks
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
484 * that are still executing.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
485 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
486
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
487 (function (callback) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
488 var Strophe;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
489
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
490 /** Function: $build
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
491 * Create a Strophe.Builder.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
492 * This is an alias for 'new Strophe.Builder(name, attrs)'.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
493 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
494 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
495 * (String) name - The root element name.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
496 * (Object) attrs - The attributes for the root element in object notation.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
497 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
498 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
499 * A new Strophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
500 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
501 function $build(name, attrs) { return new Strophe.Builder(name, attrs); }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
502 /** Function: $msg
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
503 * Create a Strophe.Builder with a <message/> element as the root.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
504 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
505 * Parmaeters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
506 * (Object) attrs - The <message/> element attributes in object notation.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
507 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
508 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
509 * A new Strophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
510 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
511 function $msg(attrs) { return new Strophe.Builder("message", attrs); }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
512 /** Function: $iq
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
513 * Create a Strophe.Builder with an <iq/> element as the root.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
514 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
515 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
516 * (Object) attrs - The <iq/> element attributes in object notation.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
517 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
518 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
519 * A new Strophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
520 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
521 function $iq(attrs) { return new Strophe.Builder("iq", attrs); }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
522 /** Function: $pres
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
523 * Create a Strophe.Builder with a <presence/> element as the root.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
524 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
525 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
526 * (Object) attrs - The <presence/> element attributes in object notation.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
527 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
528 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
529 * A new Strophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
530 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
531 function $pres(attrs) { return new Strophe.Builder("presence", attrs); }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
532
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
533 /** Class: Strophe
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
534 * An object container for all Strophe library functions.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
535 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
536 * This class is just a container for all the objects and constants
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
537 * used in the library. It is not meant to be instantiated, but to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
538 * provide a namespace for library objects, constants, and functions.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
539 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
540 Strophe = {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
541 /** Constant: VERSION
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
542 * The version of the Strophe library. Unreleased builds will have
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
543 * a version of head-HASH where HASH is a partial revision.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
544 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
545 VERSION: "1.0.1",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
546
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
547 /** Constants: XMPP Namespace Constants
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
548 * Common namespace constants from the XMPP RFCs and XEPs.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
549 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
550 * NS.HTTPBIND - HTTP BIND namespace from XEP 124.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
551 * NS.BOSH - BOSH namespace from XEP 206.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
552 * NS.CLIENT - Main XMPP client namespace.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
553 * NS.AUTH - Legacy authentication namespace.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
554 * NS.ROSTER - Roster operations namespace.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
555 * NS.PROFILE - Profile namespace.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
556 * NS.DISCO_INFO - Service discovery info namespace from XEP 30.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
557 * NS.DISCO_ITEMS - Service discovery items namespace from XEP 30.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
558 * NS.MUC - Multi-User Chat namespace from XEP 45.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
559 * NS.SASL - XMPP SASL namespace from RFC 3920.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
560 * NS.STREAM - XMPP Streams namespace from RFC 3920.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
561 * NS.BIND - XMPP Binding namespace from RFC 3920.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
562 * NS.SESSION - XMPP Session namespace from RFC 3920.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
563 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
564 NS: {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
565 HTTPBIND: "http://jabber.org/protocol/httpbind",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
566 BOSH: "urn:xmpp:xbosh",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
567 CLIENT: "jabber:client",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
568 AUTH: "jabber:iq:auth",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
569 ROSTER: "jabber:iq:roster",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
570 PROFILE: "jabber:iq:profile",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
571 DISCO_INFO: "http://jabber.org/protocol/disco#info",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
572 DISCO_ITEMS: "http://jabber.org/protocol/disco#items",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
573 MUC: "http://jabber.org/protocol/muc",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
574 SASL: "urn:ietf:params:xml:ns:xmpp-sasl",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
575 STREAM: "http://etherx.jabber.org/streams",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
576 BIND: "urn:ietf:params:xml:ns:xmpp-bind",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
577 SESSION: "urn:ietf:params:xml:ns:xmpp-session",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
578 VERSION: "jabber:iq:version",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
579 STANZAS: "urn:ietf:params:xml:ns:xmpp-stanzas"
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
580 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
581
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
582 /** Function: addNamespace
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
583 * This function is used to extend the current namespaces in
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
584 * Strophe.NS. It takes a key and a value with the key being the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
585 * name of the new namespace, with its actual value.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
586 * For example:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
587 * Strophe.addNamespace('PUBSUB', "http://jabber.org/protocol/pubsub");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
588 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
589 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
590 * (String) name - The name under which the namespace will be
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
591 * referenced under Strophe.NS
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
592 * (String) value - The actual namespace.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
593 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
594 addNamespace: function (name, value)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
595 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
596 Strophe.NS[name] = value;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
597 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
598
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
599 /** Constants: Connection Status Constants
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
600 * Connection status constants for use by the connection handler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
601 * callback.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
602 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
603 * Status.ERROR - An error has occurred
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
604 * Status.CONNECTING - The connection is currently being made
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
605 * Status.CONNFAIL - The connection attempt failed
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
606 * Status.AUTHENTICATING - The connection is authenticating
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
607 * Status.AUTHFAIL - The authentication attempt failed
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
608 * Status.CONNECTED - The connection has succeeded
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
609 * Status.DISCONNECTED - The connection has been terminated
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
610 * Status.DISCONNECTING - The connection is currently being terminated
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
611 * Status.ATTACHED - The connection has been attached
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
612 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
613 Status: {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
614 ERROR: 0,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
615 CONNECTING: 1,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
616 CONNFAIL: 2,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
617 AUTHENTICATING: 3,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
618 AUTHFAIL: 4,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
619 CONNECTED: 5,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
620 DISCONNECTED: 6,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
621 DISCONNECTING: 7,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
622 ATTACHED: 8
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
623 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
624
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
625 /** Constants: Log Level Constants
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
626 * Logging level indicators.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
627 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
628 * LogLevel.DEBUG - Debug output
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
629 * LogLevel.INFO - Informational output
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
630 * LogLevel.WARN - Warnings
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
631 * LogLevel.ERROR - Errors
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
632 * LogLevel.FATAL - Fatal errors
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
633 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
634 LogLevel: {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
635 DEBUG: 0,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
636 INFO: 1,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
637 WARN: 2,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
638 ERROR: 3,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
639 FATAL: 4
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
640 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
641
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
642 /** PrivateConstants: DOM Element Type Constants
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
643 * DOM element types.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
644 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
645 * ElementType.NORMAL - Normal element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
646 * ElementType.TEXT - Text data element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
647 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
648 ElementType: {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
649 NORMAL: 1,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
650 TEXT: 3
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
651 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
652
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
653 /** PrivateConstants: Timeout Values
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
654 * Timeout values for error states. These values are in seconds.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
655 * These should not be changed unless you know exactly what you are
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
656 * doing.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
657 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
658 * TIMEOUT - Timeout multiplier. A waiting request will be considered
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
659 * failed after Math.floor(TIMEOUT * wait) seconds have elapsed.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
660 * This defaults to 1.1, and with default wait, 66 seconds.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
661 * SECONDARY_TIMEOUT - Secondary timeout multiplier. In cases where
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
662 * Strophe can detect early failure, it will consider the request
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
663 * failed if it doesn't return after
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
664 * Math.floor(SECONDARY_TIMEOUT * wait) seconds have elapsed.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
665 * This defaults to 0.1, and with default wait, 6 seconds.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
666 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
667 TIMEOUT: 1.1,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
668 SECONDARY_TIMEOUT: 0.1,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
669
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
670 /** Function: forEachChild
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
671 * Map a function over some or all child elements of a given element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
672 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
673 * This is a small convenience function for mapping a function over
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
674 * some or all of the children of an element. If elemName is null, all
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
675 * children will be passed to the function, otherwise only children
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
676 * whose tag names match elemName will be passed.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
677 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
678 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
679 * (XMLElement) elem - The element to operate on.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
680 * (String) elemName - The child element tag name filter.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
681 * (Function) func - The function to apply to each child. This
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
682 * function should take a single argument, a DOM element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
683 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
684 forEachChild: function (elem, elemName, func)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
685 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
686 var i, childNode;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
687
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
688 for (i = 0; i < elem.childNodes.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
689 childNode = elem.childNodes[i];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
690 if (childNode.nodeType == Strophe.ElementType.NORMAL &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
691 (!elemName || this.isTagEqual(childNode, elemName))) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
692 func(childNode);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
693 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
694 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
695 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
696
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
697 /** Function: isTagEqual
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
698 * Compare an element's tag name with a string.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
699 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
700 * This function is case insensitive.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
701 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
702 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
703 * (XMLElement) el - A DOM element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
704 * (String) name - The element name.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
705 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
706 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
707 * true if the element's tag name matches _el_, and false
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
708 * otherwise.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
709 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
710 isTagEqual: function (el, name)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
711 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
712 return el.tagName.toLowerCase() == name.toLowerCase();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
713 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
714
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
715 /** PrivateVariable: _xmlGenerator
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
716 * _Private_ variable that caches a DOM document to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
717 * generate elements.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
718 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
719 _xmlGenerator: null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
720
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
721 /** PrivateFunction: _makeGenerator
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
722 * _Private_ function that creates a dummy XML DOM document to serve as
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
723 * an element and text node generator.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
724 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
725 _makeGenerator: function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
726 var doc;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
727
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
728 if (window.ActiveXObject) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
729 doc = new ActiveXObject("Microsoft.XMLDOM");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
730 doc.appendChild(doc.createElement('strophe'));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
731 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
732 doc = document.implementation
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
733 .createDocument('jabber:client', 'strophe', null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
734 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
735
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
736 return doc;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
737 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
738
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
739 /** Function: xmlElement
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
740 * Create an XML DOM element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
741 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
742 * This function creates an XML DOM element correctly across all
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
743 * implementations. Specifically the Microsoft implementation of
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
744 * document.createElement makes DOM elements with 43+ default attributes
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
745 * unless elements are created with the ActiveX object Microsoft.XMLDOM.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
746 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
747 * Most DOMs force element names to lowercase, so we use the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
748 * _realname attribute on the created element to store the case
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
749 * sensitive name. This is required to generate proper XML for
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
750 * things like vCard avatars (XEP 153). This attribute is stripped
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
751 * out before being sent over the wire or serialized, but you may
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
752 * notice it during debugging.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
753 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
754 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
755 * (String) name - The name for the element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
756 * (Array) attrs - An optional array of key/value pairs to use as
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
757 * element attributes in the following format [['key1', 'value1'],
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
758 * ['key2', 'value2']]
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
759 * (String) text - The text child data for the element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
760 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
761 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
762 * A new XML DOM element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
763 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
764 xmlElement: function (name)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
765 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
766 if (!name) { return null; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
767
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
768 var node = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
769 if (!Strophe._xmlGenerator) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
770 Strophe._xmlGenerator = Strophe._makeGenerator();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
771 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
772 node = Strophe._xmlGenerator.createElement(name);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
773
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
774 // FIXME: this should throw errors if args are the wrong type or
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
775 // there are more than two optional args
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
776 var a, i, k;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
777 for (a = 1; a < arguments.length; a++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
778 if (!arguments[a]) { continue; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
779 if (typeof(arguments[a]) == "string" ||
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
780 typeof(arguments[a]) == "number") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
781 node.appendChild(Strophe.xmlTextNode(arguments[a]));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
782 } else if (typeof(arguments[a]) == "object" &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
783 typeof(arguments[a].sort) == "function") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
784 for (i = 0; i < arguments[a].length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
785 if (typeof(arguments[a][i]) == "object" &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
786 typeof(arguments[a][i].sort) == "function") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
787 node.setAttribute(arguments[a][i][0],
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
788 arguments[a][i][1]);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
789 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
790 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
791 } else if (typeof(arguments[a]) == "object") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
792 for (k in arguments[a]) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
793 if (arguments[a].hasOwnProperty(k)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
794 node.setAttribute(k, arguments[a][k]);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
795 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
796 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
797 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
798 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
799
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
800 return node;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
801 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
802
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
803 /* Function: xmlescape
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
804 * Excapes invalid xml characters.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
805 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
806 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
807 * (String) text - text to escape.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
808 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
809 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
810 * Escaped text.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
811 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
812 xmlescape: function(text)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
813 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
814 text = text.replace(/\&/g, "&amp;");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
815 text = text.replace(/</g, "&lt;");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
816 text = text.replace(/>/g, "&gt;");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
817 return text;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
818 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
819
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
820 /** Function: xmlTextNode
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
821 * Creates an XML DOM text node.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
822 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
823 * Provides a cross implementation version of document.createTextNode.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
824 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
825 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
826 * (String) text - The content of the text node.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
827 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
828 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
829 * A new XML DOM text node.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
830 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
831 xmlTextNode: function (text)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
832 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
833 //ensure text is escaped
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
834 text = Strophe.xmlescape(text);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
835
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
836 if (!Strophe._xmlGenerator) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
837 Strophe._xmlGenerator = Strophe._makeGenerator();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
838 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
839 return Strophe._xmlGenerator.createTextNode(text);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
840 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
841
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
842 /** Function: getText
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
843 * Get the concatenation of all text children of an element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
844 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
845 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
846 * (XMLElement) elem - A DOM element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
847 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
848 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
849 * A String with the concatenated text of all text element children.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
850 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
851 getText: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
852 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
853 if (!elem) { return null; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
854
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
855 var str = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
856 if (elem.childNodes.length === 0 && elem.nodeType ==
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
857 Strophe.ElementType.TEXT) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
858 str += elem.nodeValue;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
859 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
860
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
861 for (var i = 0; i < elem.childNodes.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
862 if (elem.childNodes[i].nodeType == Strophe.ElementType.TEXT) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
863 str += elem.childNodes[i].nodeValue;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
864 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
865 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
866
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
867 return str;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
868 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
869
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
870 /** Function: copyElement
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
871 * Copy an XML DOM element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
872 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
873 * This function copies a DOM element and all its descendants and returns
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
874 * the new copy.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
875 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
876 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
877 * (XMLElement) elem - A DOM element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
878 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
879 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
880 * A new, copied DOM element tree.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
881 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
882 copyElement: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
883 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
884 var i, el;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
885 if (elem.nodeType == Strophe.ElementType.NORMAL) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
886 el = Strophe.xmlElement(elem.tagName);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
887
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
888 for (i = 0; i < elem.attributes.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
889 el.setAttribute(elem.attributes[i].nodeName.toLowerCase(),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
890 elem.attributes[i].value);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
891 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
892
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
893 for (i = 0; i < elem.childNodes.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
894 el.appendChild(Strophe.copyElement(elem.childNodes[i]));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
895 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
896 } else if (elem.nodeType == Strophe.ElementType.TEXT) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
897 el = Strophe.xmlTextNode(elem.nodeValue);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
898 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
899
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
900 return el;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
901 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
902
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
903 /** Function: escapeNode
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
904 * Escape the node part (also called local part) of a JID.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
905 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
906 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
907 * (String) node - A node (or local part).
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
908 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
909 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
910 * An escaped node (or local part).
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
911 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
912 escapeNode: function (node)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
913 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
914 return node.replace(/^\s+|\s+$/g, '')
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
915 .replace(/\\/g, "\\5c")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
916 .replace(/ /g, "\\20")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
917 .replace(/\"/g, "\\22")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
918 .replace(/\&/g, "\\26")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
919 .replace(/\'/g, "\\27")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
920 .replace(/\//g, "\\2f")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
921 .replace(/:/g, "\\3a")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
922 .replace(/</g, "\\3c")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
923 .replace(/>/g, "\\3e")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
924 .replace(/@/g, "\\40");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
925 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
926
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
927 /** Function: unescapeNode
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
928 * Unescape a node part (also called local part) of a JID.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
929 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
930 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
931 * (String) node - A node (or local part).
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
932 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
933 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
934 * An unescaped node (or local part).
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
935 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
936 unescapeNode: function (node)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
937 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
938 return node.replace(/\\20/g, " ")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
939 .replace(/\\22/g, '"')
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
940 .replace(/\\26/g, "&")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
941 .replace(/\\27/g, "'")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
942 .replace(/\\2f/g, "/")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
943 .replace(/\\3a/g, ":")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
944 .replace(/\\3c/g, "<")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
945 .replace(/\\3e/g, ">")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
946 .replace(/\\40/g, "@")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
947 .replace(/\\5c/g, "\\");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
948 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
949
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
950 /** Function: getNodeFromJid
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
951 * Get the node portion of a JID String.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
952 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
953 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
954 * (String) jid - A JID.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
955 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
956 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
957 * A String containing the node.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
958 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
959 getNodeFromJid: function (jid)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
960 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
961 if (jid.indexOf("@") < 0) { return null; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
962 return jid.split("@")[0];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
963 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
964
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
965 /** Function: getDomainFromJid
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
966 * Get the domain portion of a JID String.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
967 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
968 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
969 * (String) jid - A JID.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
970 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
971 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
972 * A String containing the domain.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
973 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
974 getDomainFromJid: function (jid)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
975 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
976 var bare = Strophe.getBareJidFromJid(jid);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
977 if (bare.indexOf("@") < 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
978 return bare;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
979 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
980 var parts = bare.split("@");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
981 parts.splice(0, 1);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
982 return parts.join('@');
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
983 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
984 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
985
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
986 /** Function: getResourceFromJid
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
987 * Get the resource portion of a JID String.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
988 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
989 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
990 * (String) jid - A JID.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
991 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
992 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
993 * A String containing the resource.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
994 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
995 getResourceFromJid: function (jid)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
996 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
997 var s = jid.split("/");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
998 if (s.length < 2) { return null; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
999 s.splice(0, 1);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1000 return s.join('/');
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1001 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1002
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1003 /** Function: getBareJidFromJid
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1004 * Get the bare JID from a JID String.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1005 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1006 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1007 * (String) jid - A JID.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1008 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1009 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1010 * A String containing the bare JID.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1011 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1012 getBareJidFromJid: function (jid)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1013 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1014 return jid.split("/")[0];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1015 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1016
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1017 /** Function: log
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1018 * User overrideable logging function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1019 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1020 * This function is called whenever the Strophe library calls any
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1021 * of the logging functions. The default implementation of this
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1022 * function does nothing. If client code wishes to handle the logging
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1023 * messages, it should override this with
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1024 * > Strophe.log = function (level, msg) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1025 * > (user code here)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1026 * > };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1027 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1028 * Please note that data sent and received over the wire is logged
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1029 * via Strophe.Connection.rawInput() and Strophe.Connection.rawOutput().
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1030 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1031 * The different levels and their meanings are
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1032 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1033 * DEBUG - Messages useful for debugging purposes.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1034 * INFO - Informational messages. This is mostly information like
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1035 * 'disconnect was called' or 'SASL auth succeeded'.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1036 * WARN - Warnings about potential problems. This is mostly used
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1037 * to report transient connection errors like request timeouts.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1038 * ERROR - Some error occurred.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1039 * FATAL - A non-recoverable fatal error occurred.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1040 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1041 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1042 * (Integer) level - The log level of the log message. This will
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1043 * be one of the values in Strophe.LogLevel.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1044 * (String) msg - The log message.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1045 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1046 log: function (level, msg)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1047 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1048 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1049 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1050
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1051 /** Function: debug
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1052 * Log a message at the Strophe.LogLevel.DEBUG level.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1053 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1054 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1055 * (String) msg - The log message.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1056 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1057 debug: function(msg)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1058 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1059 this.log(this.LogLevel.DEBUG, msg);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1060 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1061
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1062 /** Function: info
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1063 * Log a message at the Strophe.LogLevel.INFO level.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1064 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1065 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1066 * (String) msg - The log message.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1067 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1068 info: function (msg)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1069 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1070 this.log(this.LogLevel.INFO, msg);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1071 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1072
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1073 /** Function: warn
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1074 * Log a message at the Strophe.LogLevel.WARN level.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1075 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1076 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1077 * (String) msg - The log message.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1078 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1079 warn: function (msg)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1080 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1081 this.log(this.LogLevel.WARN, msg);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1082 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1083
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1084 /** Function: error
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1085 * Log a message at the Strophe.LogLevel.ERROR level.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1086 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1087 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1088 * (String) msg - The log message.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1089 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1090 error: function (msg)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1091 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1092 this.log(this.LogLevel.ERROR, msg);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1093 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1094
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1095 /** Function: fatal
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1096 * Log a message at the Strophe.LogLevel.FATAL level.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1097 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1098 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1099 * (String) msg - The log message.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1100 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1101 fatal: function (msg)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1102 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1103 this.log(this.LogLevel.FATAL, msg);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1104 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1105
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1106 /** Function: serialize
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1107 * Render a DOM element and all descendants to a String.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1108 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1109 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1110 * (XMLElement) elem - A DOM element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1111 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1112 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1113 * The serialized element tree as a String.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1114 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1115 serialize: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1116 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1117 var result;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1118
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1119 if (!elem) { return null; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1120
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1121 if (typeof(elem.tree) === "function") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1122 elem = elem.tree();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1123 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1124
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1125 var nodeName = elem.nodeName;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1126 var i, child;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1127
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1128 if (elem.getAttribute("_realname")) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1129 nodeName = elem.getAttribute("_realname");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1130 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1131
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1132 result = "<" + nodeName;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1133 for (i = 0; i < elem.attributes.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1134 if(elem.attributes[i].nodeName != "_realname") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1135 result += " " + elem.attributes[i].nodeName.toLowerCase() +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1136 "='" + elem.attributes[i].value
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1137 .replace("&", "&amp;")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1138 .replace("'", "&apos;")
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1139 .replace("<", "&lt;") + "'";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1140 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1141 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1142
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1143 if (elem.childNodes.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1144 result += ">";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1145 for (i = 0; i < elem.childNodes.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1146 child = elem.childNodes[i];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1147 if (child.nodeType == Strophe.ElementType.NORMAL) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1148 // normal element, so recurse
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1149 result += Strophe.serialize(child);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1150 } else if (child.nodeType == Strophe.ElementType.TEXT) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1151 // text element
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1152 result += child.nodeValue;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1153 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1154 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1155 result += "</" + nodeName + ">";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1156 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1157 result += "/>";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1158 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1159
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1160 return result;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1161 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1162
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1163 /** PrivateVariable: _requestId
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1164 * _Private_ variable that keeps track of the request ids for
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1165 * connections.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1166 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1167 _requestId: 0,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1168
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1169 /** PrivateVariable: Strophe.connectionPlugins
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1170 * _Private_ variable Used to store plugin names that need
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1171 * initialization on Strophe.Connection construction.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1172 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1173 _connectionPlugins: {},
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1174
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1175 /** Function: addConnectionPlugin
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1176 * Extends the Strophe.Connection object with the given plugin.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1177 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1178 * Paramaters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1179 * (String) name - The name of the extension.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1180 * (Object) ptype - The plugin's prototype.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1181 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1182 addConnectionPlugin: function (name, ptype)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1183 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1184 Strophe._connectionPlugins[name] = ptype;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1185 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1186
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1187 Base64: Base64
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1188 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1189
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1190 /** Class: Strophe.Builder
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1191 * XML DOM builder.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1192 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1193 * This object provides an interface similar to JQuery but for building
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1194 * DOM element easily and rapidly. All the functions except for toString()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1195 * and tree() return the object, so calls can be chained. Here's an
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1196 * example using the $iq() builder helper.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1197 * > $iq({to: 'you': from: 'me': type: 'get', id: '1'})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1198 * > .c('query', {xmlns: 'strophe:example'})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1199 * > .c('example')
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1200 * > .toString()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1201 * The above generates this XML fragment
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1202 * > <iq to='you' from='me' type='get' id='1'>
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1203 * > <query xmlns='strophe:example'>
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1204 * > <example/>
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1205 * > </query>
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1206 * > </iq>
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1207 * The corresponding DOM manipulations to get a similar fragment would be
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1208 * a lot more tedious and probably involve several helper variables.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1209 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1210 * Since adding children makes new operations operate on the child, up()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1211 * is provided to traverse up the tree. To add two children, do
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1212 * > builder.c('child1', ...).up().c('child2', ...)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1213 * The next operation on the Builder will be relative to the second child.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1214 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1215
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1216 /** Constructor: Strophe.Builder
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1217 * Create a Strophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1218 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1219 * The attributes should be passed in object notation. For example
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1220 * > var b = new Builder('message', {to: 'you', from: 'me'});
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1221 * or
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1222 * > var b = new Builder('messsage', {'xml:lang': 'en'});
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1223 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1224 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1225 * (String) name - The name of the root element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1226 * (Object) attrs - The attributes for the root element in object notation.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1227 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1228 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1229 * A new Strophe.Builder.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1230 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1231 Strophe.Builder = function (name, attrs)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1232 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1233 // Set correct namespace for jabber:client elements
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1234 if (name == "presence" || name == "message" || name == "iq") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1235 if (attrs && !attrs.xmlns) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1236 attrs.xmlns = Strophe.NS.CLIENT;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1237 } else if (!attrs) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1238 attrs = {xmlns: Strophe.NS.CLIENT};
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1239 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1240 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1241
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1242 // Holds the tree being built.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1243 this.nodeTree = Strophe.xmlElement(name, attrs);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1244
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1245 // Points to the current operation node.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1246 this.node = this.nodeTree;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1247 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1248
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1249 Strophe.Builder.prototype = {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1250 /** Function: tree
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1251 * Return the DOM tree.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1252 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1253 * This function returns the current DOM tree as an element object. This
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1254 * is suitable for passing to functions like Strophe.Connection.send().
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1255 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1256 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1257 * The DOM tree as a element object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1258 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1259 tree: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1260 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1261 return this.nodeTree;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1262 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1263
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1264 /** Function: toString
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1265 * Serialize the DOM tree to a String.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1266 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1267 * This function returns a string serialization of the current DOM
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1268 * tree. It is often used internally to pass data to a
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1269 * Strophe.Request object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1270 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1271 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1272 * The serialized DOM tree in a String.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1273 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1274 toString: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1275 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1276 return Strophe.serialize(this.nodeTree);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1277 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1278
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1279 /** Function: up
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1280 * Make the current parent element the new current element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1281 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1282 * This function is often used after c() to traverse back up the tree.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1283 * For example, to add two children to the same element
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1284 * > builder.c('child1', {}).up().c('child2', {});
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1285 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1286 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1287 * The Stophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1288 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1289 up: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1290 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1291 this.node = this.node.parentNode;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1292 return this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1293 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1294
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1295 /** Function: attrs
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1296 * Add or modify attributes of the current element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1297 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1298 * The attributes should be passed in object notation. This function
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1299 * does not move the current element pointer.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1300 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1301 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1302 * (Object) moreattrs - The attributes to add/modify in object notation.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1303 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1304 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1305 * The Strophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1306 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1307 attrs: function (moreattrs)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1308 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1309 for (var k in moreattrs) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1310 if (moreattrs.hasOwnProperty(k)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1311 this.node.setAttribute(k, moreattrs[k]);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1312 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1313 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1314 return this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1315 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1316
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1317 /** Function: c
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1318 * Add a child to the current element and make it the new current
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1319 * element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1320 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1321 * This function moves the current element pointer to the child. If you
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1322 * need to add another child, it is necessary to use up() to go back
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1323 * to the parent in the tree.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1324 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1325 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1326 * (String) name - The name of the child.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1327 * (Object) attrs - The attributes of the child in object notation.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1328 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1329 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1330 * The Strophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1331 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1332 c: function (name, attrs)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1333 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1334 var child = Strophe.xmlElement(name, attrs);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1335 this.node.appendChild(child);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1336 this.node = child;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1337 return this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1338 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1339
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1340 /** Function: cnode
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1341 * Add a child to the current element and make it the new current
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1342 * element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1343 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1344 * This function is the same as c() except that instead of using a
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1345 * name and an attributes object to create the child it uses an
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1346 * existing DOM element object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1347 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1348 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1349 * (XMLElement) elem - A DOM element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1350 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1351 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1352 * The Strophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1353 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1354 cnode: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1355 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1356 this.node.appendChild(elem);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1357 this.node = elem;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1358 return this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1359 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1360
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1361 /** Function: t
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1362 * Add a child text element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1363 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1364 * This *does not* make the child the new current element since there
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1365 * are no children of text elements.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1366 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1367 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1368 * (String) text - The text data to append to the current element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1369 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1370 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1371 * The Strophe.Builder object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1372 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1373 t: function (text)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1374 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1375 var child = Strophe.xmlTextNode(text);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1376 this.node.appendChild(child);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1377 return this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1378 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1379 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1380
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1381
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1382 /** PrivateClass: Strophe.Handler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1383 * _Private_ helper class for managing stanza handlers.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1384 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1385 * A Strophe.Handler encapsulates a user provided callback function to be
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1386 * executed when matching stanzas are received by the connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1387 * Handlers can be either one-off or persistant depending on their
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1388 * return value. Returning true will cause a Handler to remain active, and
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1389 * returning false will remove the Handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1390 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1391 * Users will not use Strophe.Handler objects directly, but instead they
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1392 * will use Strophe.Connection.addHandler() and
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1393 * Strophe.Connection.deleteHandler().
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1394 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1395
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1396 /** PrivateConstructor: Strophe.Handler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1397 * Create and initialize a new Strophe.Handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1398 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1399 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1400 * (Function) handler - A function to be executed when the handler is run.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1401 * (String) ns - The namespace to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1402 * (String) name - The element name to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1403 * (String) type - The element type to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1404 * (String) id - The element id attribute to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1405 * (String) from - The element from attribute to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1406 * (Object) options - Handler options
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1407 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1408 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1409 * A new Strophe.Handler object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1410 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1411 Strophe.Handler = function (handler, ns, name, type, id, from, options)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1412 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1413 this.handler = handler;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1414 this.ns = ns;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1415 this.name = name;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1416 this.type = type;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1417 this.id = id;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1418 this.options = options || {matchbare: false};
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1419
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1420 // default matchBare to false if undefined
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1421 if (!this.options.matchBare) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1422 this.options.matchBare = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1423 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1424
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1425 if (this.options.matchBare) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1426 this.from = Strophe.getBareJidFromJid(from);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1427 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1428 this.from = from;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1429 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1430
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1431 // whether the handler is a user handler or a system handler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1432 this.user = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1433 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1434
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1435 Strophe.Handler.prototype = {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1436 /** PrivateFunction: isMatch
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1437 * Tests if a stanza matches the Strophe.Handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1438 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1439 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1440 * (XMLElement) elem - The XML element to test.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1441 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1442 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1443 * true if the stanza matches and false otherwise.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1444 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1445 isMatch: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1446 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1447 var nsMatch;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1448 var from = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1449
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1450 if (this.options.matchBare) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1451 from = Strophe.getBareJidFromJid(elem.getAttribute('from'));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1452 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1453 from = elem.getAttribute('from');
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1454 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1455
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1456 nsMatch = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1457 if (!this.ns) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1458 nsMatch = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1459 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1460 var self = this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1461 Strophe.forEachChild(elem, null, function (elem) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1462 if (elem.getAttribute("xmlns") == self.ns) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1463 nsMatch = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1464 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1465 });
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1466
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1467 nsMatch = nsMatch || elem.getAttribute("xmlns") == this.ns;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1468 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1469
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1470 if (nsMatch &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1471 (!this.name || Strophe.isTagEqual(elem, this.name)) &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1472 (!this.type || elem.getAttribute("type") === this.type) &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1473 (!this.id || elem.getAttribute("id") === this.id) &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1474 (!this.from || from === this.from)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1475 return true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1476 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1477
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1478 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1479 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1480
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1481 /** PrivateFunction: run
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1482 * Run the callback on a matching stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1483 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1484 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1485 * (XMLElement) elem - The DOM element that triggered the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1486 * Strophe.Handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1487 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1488 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1489 * A boolean indicating if the handler should remain active.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1490 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1491 run: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1492 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1493 var result = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1494 try {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1495 result = this.handler(elem);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1496 } catch (e) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1497 if (e.sourceURL) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1498 Strophe.fatal("error: " + this.handler +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1499 " " + e.sourceURL + ":" +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1500 e.line + " - " + e.name + ": " + e.message);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1501 } else if (e.fileName) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1502 if (typeof(console) != "undefined") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1503 console.trace();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1504 console.error(this.handler, " - error - ", e, e.message);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1505 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1506 Strophe.fatal("error: " + this.handler + " " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1507 e.fileName + ":" + e.lineNumber + " - " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1508 e.name + ": " + e.message);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1509 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1510 Strophe.fatal("error: " + this.handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1511 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1512
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1513 throw e;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1514 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1515
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1516 return result;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1517 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1518
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1519 /** PrivateFunction: toString
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1520 * Get a String representation of the Strophe.Handler object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1521 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1522 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1523 * A String.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1524 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1525 toString: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1526 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1527 return "{Handler: " + this.handler + "(" + this.name + "," +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1528 this.id + "," + this.ns + ")}";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1529 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1530 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1531
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1532 /** PrivateClass: Strophe.TimedHandler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1533 * _Private_ helper class for managing timed handlers.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1534 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1535 * A Strophe.TimedHandler encapsulates a user provided callback that
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1536 * should be called after a certain period of time or at regular
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1537 * intervals. The return value of the callback determines whether the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1538 * Strophe.TimedHandler will continue to fire.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1539 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1540 * Users will not use Strophe.TimedHandler objects directly, but instead
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1541 * they will use Strophe.Connection.addTimedHandler() and
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1542 * Strophe.Connection.deleteTimedHandler().
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1543 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1544
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1545 /** PrivateConstructor: Strophe.TimedHandler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1546 * Create and initialize a new Strophe.TimedHandler object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1547 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1548 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1549 * (Integer) period - The number of milliseconds to wait before the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1550 * handler is called.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1551 * (Function) handler - The callback to run when the handler fires. This
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1552 * function should take no arguments.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1553 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1554 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1555 * A new Strophe.TimedHandler object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1556 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1557 Strophe.TimedHandler = function (period, handler)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1558 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1559 this.period = period;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1560 this.handler = handler;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1561
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1562 this.lastCalled = new Date().getTime();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1563 this.user = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1564 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1565
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1566 Strophe.TimedHandler.prototype = {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1567 /** PrivateFunction: run
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1568 * Run the callback for the Strophe.TimedHandler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1569 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1570 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1571 * true if the Strophe.TimedHandler should be called again, and false
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1572 * otherwise.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1573 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1574 run: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1575 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1576 this.lastCalled = new Date().getTime();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1577 return this.handler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1578 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1579
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1580 /** PrivateFunction: reset
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1581 * Reset the last called time for the Strophe.TimedHandler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1582 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1583 reset: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1584 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1585 this.lastCalled = new Date().getTime();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1586 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1587
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1588 /** PrivateFunction: toString
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1589 * Get a string representation of the Strophe.TimedHandler object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1590 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1591 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1592 * The string representation.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1593 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1594 toString: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1595 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1596 return "{TimedHandler: " + this.handler + "(" + this.period +")}";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1597 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1598 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1599
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1600 /** PrivateClass: Strophe.Request
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1601 * _Private_ helper class that provides a cross implementation abstraction
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1602 * for a BOSH related XMLHttpRequest.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1603 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1604 * The Strophe.Request class is used internally to encapsulate BOSH request
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1605 * information. It is not meant to be used from user's code.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1606 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1607
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1608 /** PrivateConstructor: Strophe.Request
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1609 * Create and initialize a new Strophe.Request object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1610 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1611 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1612 * (XMLElement) elem - The XML data to be sent in the request.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1613 * (Function) func - The function that will be called when the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1614 * XMLHttpRequest readyState changes.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1615 * (Integer) rid - The BOSH rid attribute associated with this request.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1616 * (Integer) sends - The number of times this same request has been
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1617 * sent.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1618 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1619 Strophe.Request = function (elem, func, rid, sends)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1620 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1621 this.id = ++Strophe._requestId;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1622 this.xmlData = elem;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1623 this.data = Strophe.serialize(elem);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1624 // save original function in case we need to make a new request
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1625 // from this one.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1626 this.origFunc = func;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1627 this.func = func;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1628 this.rid = rid;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1629 this.date = NaN;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1630 this.sends = sends || 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1631 this.abort = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1632 this.dead = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1633 this.age = function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1634 if (!this.date) { return 0; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1635 var now = new Date();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1636 return (now - this.date) / 1000;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1637 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1638 this.timeDead = function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1639 if (!this.dead) { return 0; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1640 var now = new Date();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1641 return (now - this.dead) / 1000;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1642 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1643 this.xhr = this._newXHR();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1644 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1645
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1646 Strophe.Request.prototype = {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1647 /** PrivateFunction: getResponse
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1648 * Get a response from the underlying XMLHttpRequest.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1649 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1650 * This function attempts to get a response from the request and checks
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1651 * for errors.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1652 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1653 * Throws:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1654 * "parsererror" - A parser error occured.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1655 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1656 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1657 * The DOM element tree of the response.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1658 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1659 getResponse: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1660 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1661 var node = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1662 if (this.xhr.responseXML && this.xhr.responseXML.documentElement) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1663 node = this.xhr.responseXML.documentElement;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1664 if (node.tagName == "parsererror") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1665 Strophe.error("invalid response received");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1666 Strophe.error("responseText: " + this.xhr.responseText);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1667 Strophe.error("responseXML: " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1668 Strophe.serialize(this.xhr.responseXML));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1669 throw "parsererror";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1670 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1671 } else if (this.xhr.responseText) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1672 Strophe.error("invalid response received");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1673 Strophe.error("responseText: " + this.xhr.responseText);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1674 Strophe.error("responseXML: " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1675 Strophe.serialize(this.xhr.responseXML));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1676 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1677
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1678 return node;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1679 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1680
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1681 /** PrivateFunction: _newXHR
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1682 * _Private_ helper function to create XMLHttpRequests.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1683 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1684 * This function creates XMLHttpRequests across all implementations.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1685 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1686 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1687 * A new XMLHttpRequest.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1688 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1689 _newXHR: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1690 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1691 var xhr = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1692 if (window.XMLHttpRequest) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1693 xhr = new XMLHttpRequest();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1694 if (xhr.overrideMimeType) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1695 xhr.overrideMimeType("text/xml");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1696 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1697 } else if (window.ActiveXObject) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1698 xhr = new ActiveXObject("Microsoft.XMLHTTP");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1699 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1700
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1701 xhr.onreadystatechange = this.func.prependArg(this);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1702
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1703 return xhr;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1704 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1705 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1706
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1707 /** Class: Strophe.Connection
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1708 * XMPP Connection manager.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1709 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1710 * Thie class is the main part of Strophe. It manages a BOSH connection
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1711 * to an XMPP server and dispatches events to the user callbacks as
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1712 * data arrives. It supports SASL PLAIN, SASL DIGEST-MD5, and legacy
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1713 * authentication.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1714 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1715 * After creating a Strophe.Connection object, the user will typically
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1716 * call connect() with a user supplied callback to handle connection level
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1717 * events like authentication failure, disconnection, or connection
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1718 * complete.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1719 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1720 * The user will also have several event handlers defined by using
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1721 * addHandler() and addTimedHandler(). These will allow the user code to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1722 * respond to interesting stanzas or do something periodically with the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1723 * connection. These handlers will be active once authentication is
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1724 * finished.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1725 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1726 * To send data to the connection, use send().
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1727 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1728
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1729 /** Constructor: Strophe.Connection
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1730 * Create and initialize a Strophe.Connection object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1731 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1732 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1733 * (String) service - The BOSH service URL.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1734 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1735 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1736 * A new Strophe.Connection object.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1737 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1738 Strophe.Connection = function (service)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1739 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1740 /* The path to the httpbind service. */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1741 this.service = service;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1742 /* The connected JID. */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1743 this.jid = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1744 /* request id for body tags */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1745 this.rid = Math.floor(Math.random() * 4294967295);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1746 /* The current session ID. */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1747 this.sid = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1748 this.streamId = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1749
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1750 // SASL
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1751 this.do_session = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1752 this.do_bind = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1753
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1754 // handler lists
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1755 this.timedHandlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1756 this.handlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1757 this.removeTimeds = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1758 this.removeHandlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1759 this.addTimeds = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1760 this.addHandlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1761
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1762 this._idleTimeout = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1763 this._disconnectTimeout = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1764
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1765 this.authenticated = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1766 this.disconnecting = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1767 this.connected = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1768
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1769 this.errors = 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1770
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1771 this.paused = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1772
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1773 // default BOSH values
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1774 this.hold = 1;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1775 this.wait = 60;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1776 this.window = 5;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1777
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1778 this._data = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1779 this._requests = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1780 this._uniqueId = Math.round(Math.random() * 10000);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1781
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1782 this._sasl_success_handler = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1783 this._sasl_failure_handler = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1784 this._sasl_challenge_handler = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1785
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1786 // setup onIdle callback every 1/10th of a second
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1787 this._idleTimeout = setTimeout(this._onIdle.bind(this), 100);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1788
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1789 // initialize plugins
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1790 for (var k in Strophe._connectionPlugins) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1791 if (Strophe._connectionPlugins.hasOwnProperty(k)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1792 var ptype = Strophe._connectionPlugins[k];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1793 // jslint complaints about the below line, but this is fine
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1794 var F = function () {};
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1795 F.prototype = ptype;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1796 this[k] = new F();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1797 this[k].init(this);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1798 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1799 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1800 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1801
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1802 Strophe.Connection.prototype = {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1803 /** Function: reset
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1804 * Reset the connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1805 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1806 * This function should be called after a connection is disconnected
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1807 * before that connection is reused.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1808 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1809 reset: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1810 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1811 this.rid = Math.floor(Math.random() * 4294967295);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1812
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1813 this.sid = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1814 this.streamId = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1815
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1816 // SASL
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1817 this.do_session = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1818 this.do_bind = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1819
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1820 // handler lists
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1821 this.timedHandlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1822 this.handlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1823 this.removeTimeds = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1824 this.removeHandlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1825 this.addTimeds = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1826 this.addHandlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1827
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1828 this.authenticated = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1829 this.disconnecting = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1830 this.connected = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1831
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1832 this.errors = 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1833
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1834 this._requests = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1835 this._uniqueId = Math.round(Math.random()*10000);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1836 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1837
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1838 /** Function: pause
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1839 * Pause the request manager.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1840 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1841 * This will prevent Strophe from sending any more requests to the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1842 * server. This is very useful for temporarily pausing while a lot
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1843 * of send() calls are happening quickly. This causes Strophe to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1844 * send the data in a single request, saving many request trips.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1845 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1846 pause: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1847 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1848 this.paused = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1849 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1850
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1851 /** Function: resume
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1852 * Resume the request manager.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1853 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1854 * This resumes after pause() has been called.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1855 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1856 resume: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1857 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1858 this.paused = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1859 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1860
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1861 /** Function: getUniqueId
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1862 * Generate a unique ID for use in <iq/> elements.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1863 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1864 * All <iq/> stanzas are required to have unique id attributes. This
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1865 * function makes creating these easy. Each connection instance has
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1866 * a counter which starts from zero, and the value of this counter
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1867 * plus a colon followed by the suffix becomes the unique id. If no
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1868 * suffix is supplied, the counter is used as the unique id.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1869 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1870 * Suffixes are used to make debugging easier when reading the stream
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1871 * data, and their use is recommended. The counter resets to 0 for
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1872 * every new connection for the same reason. For connections to the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1873 * same server that authenticate the same way, all the ids should be
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1874 * the same, which makes it easy to see changes. This is useful for
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1875 * automated testing as well.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1876 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1877 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1878 * (String) suffix - A optional suffix to append to the id.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1879 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1880 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1881 * A unique string to be used for the id attribute.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1882 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1883 getUniqueId: function (suffix)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1884 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1885 if (typeof(suffix) == "string" || typeof(suffix) == "number") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1886 return ++this._uniqueId + ":" + suffix;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1887 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1888 return ++this._uniqueId + "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1889 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1890 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1891
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1892 /** Function: connect
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1893 * Starts the connection process.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1894 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1895 * As the connection process proceeds, the user supplied callback will
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1896 * be triggered multiple times with status updates. The callback
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1897 * should take two arguments - the status code and the error condition.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1898 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1899 * The status code will be one of the values in the Strophe.Status
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1900 * constants. The error condition will be one of the conditions
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1901 * defined in RFC 3920 or the condition 'strophe-parsererror'.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1902 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1903 * Please see XEP 124 for a more detailed explanation of the optional
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1904 * parameters below.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1905 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1906 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1907 * (String) jid - The user's JID. This may be a bare JID,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1908 * or a full JID. If a node is not supplied, SASL ANONYMOUS
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1909 * authentication will be attempted.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1910 * (String) pass - The user's password.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1911 * (Function) callback The connect callback function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1912 * (Integer) wait - The optional HTTPBIND wait value. This is the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1913 * time the server will wait before returning an empty result for
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1914 * a request. The default setting of 60 seconds is recommended.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1915 * Other settings will require tweaks to the Strophe.TIMEOUT value.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1916 * (Integer) hold - The optional HTTPBIND hold value. This is the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1917 * number of connections the server will hold at one time. This
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1918 * should almost always be set to 1 (the default).
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1919 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1920 connect: function (jid, pass, callback, wait, hold)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1921 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1922 this.jid = jid;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1923 this.pass = pass;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1924 this.connect_callback = callback;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1925 this.disconnecting = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1926 this.connected = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1927 this.authenticated = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1928 this.errors = 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1929
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1930 this.wait = wait || this.wait;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1931 this.hold = hold || this.hold;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1932
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1933 // parse jid for domain and resource
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1934 this.domain = Strophe.getDomainFromJid(this.jid);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1935
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1936 // build the body tag
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1937 var body = this._buildBody().attrs({
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1938 to: this.domain,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1939 "xml:lang": "en",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1940 wait: this.wait,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1941 hold: this.hold,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1942 content: "text/xml; charset=utf-8",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1943 ver: "1.6",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1944 "xmpp:version": "1.0",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1945 "xmlns:xmpp": Strophe.NS.BOSH
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1946 });
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1947
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1948 this._changeConnectStatus(Strophe.Status.CONNECTING, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1949
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1950 this._requests.push(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1951 new Strophe.Request(body.tree(),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1952 this._onRequestStateChange.bind(this)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1953 .prependArg(this._connect_cb.bind(this)),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1954 body.tree().getAttribute("rid")));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1955 this._throttledRequestHandler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1956 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1957
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1958 /** Function: attach
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1959 * Attach to an already created and authenticated BOSH session.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1960 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1961 * This function is provided to allow Strophe to attach to BOSH
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1962 * sessions which have been created externally, perhaps by a Web
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1963 * application. This is often used to support auto-login type features
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1964 * without putting user credentials into the page.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1965 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1966 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1967 * (String) jid - The full JID that is bound by the session.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1968 * (String) sid - The SID of the BOSH session.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1969 * (String) rid - The current RID of the BOSH session. This RID
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1970 * will be used by the next request.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1971 * (Function) callback The connect callback function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1972 * (Integer) wait - The optional HTTPBIND wait value. This is the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1973 * time the server will wait before returning an empty result for
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1974 * a request. The default setting of 60 seconds is recommended.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1975 * Other settings will require tweaks to the Strophe.TIMEOUT value.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1976 * (Integer) hold - The optional HTTPBIND hold value. This is the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1977 * number of connections the server will hold at one time. This
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1978 * should almost always be set to 1 (the default).
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1979 * (Integer) wind - The optional HTTBIND window value. This is the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1980 * allowed range of request ids that are valid. The default is 5.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1981 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1982 attach: function (jid, sid, rid, callback, wait, hold, wind)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1983 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1984 this.jid = jid;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1985 this.sid = sid;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1986 this.rid = rid;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1987 this.connect_callback = callback;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1988
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1989 this.domain = Strophe.getDomainFromJid(this.jid);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1990
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1991 this.authenticated = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1992 this.connected = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1993
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1994 this.wait = wait || this.wait;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1995 this.hold = hold || this.hold;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1996 this.window = wind || this.window;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1997
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1998 this._changeConnectStatus(Strophe.Status.ATTACHED, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1999 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2000
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2001 /** Function: xmlInput
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2002 * User overrideable function that receives XML data coming into the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2003 * connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2004 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2005 * The default function does nothing. User code can override this with
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2006 * > Strophe.Connection.xmlInput = function (elem) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2007 * > (user code)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2008 * > };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2009 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2010 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2011 * (XMLElement) elem - The XML data received by the connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2012 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2013 xmlInput: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2014 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2015 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2016 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2017
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2018 /** Function: xmlOutput
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2019 * User overrideable function that receives XML data sent to the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2020 * connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2021 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2022 * The default function does nothing. User code can override this with
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2023 * > Strophe.Connection.xmlOutput = function (elem) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2024 * > (user code)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2025 * > };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2026 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2027 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2028 * (XMLElement) elem - The XMLdata sent by the connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2029 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2030 xmlOutput: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2031 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2032 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2033 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2034
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2035 /** Function: rawInput
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2036 * User overrideable function that receives raw data coming into the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2037 * connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2038 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2039 * The default function does nothing. User code can override this with
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2040 * > Strophe.Connection.rawInput = function (data) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2041 * > (user code)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2042 * > };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2043 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2044 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2045 * (String) data - The data received by the connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2046 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2047 rawInput: function (data)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2048 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2049 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2050 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2051
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2052 /** Function: rawOutput
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2053 * User overrideable function that receives raw data sent to the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2054 * connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2055 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2056 * The default function does nothing. User code can override this with
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2057 * > Strophe.Connection.rawOutput = function (data) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2058 * > (user code)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2059 * > };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2060 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2061 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2062 * (String) data - The data sent by the connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2063 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2064 rawOutput: function (data)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2065 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2066 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2067 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2068
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2069 /** Function: send
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2070 * Send a stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2071 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2072 * This function is called to push data onto the send queue to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2073 * go out over the wire. Whenever a request is sent to the BOSH
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2074 * server, all pending data is sent and the queue is flushed.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2075 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2076 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2077 * (XMLElement |
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2078 * [XMLElement] |
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2079 * Strophe.Builder) elem - The stanza to send.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2080 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2081 send: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2082 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2083 if (elem === null) { return ; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2084 if (typeof(elem.sort) === "function") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2085 for (var i = 0; i < elem.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2086 this._queueData(elem[i]);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2087 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2088 } else if (typeof(elem.tree) === "function") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2089 this._queueData(elem.tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2090 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2091 this._queueData(elem);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2092 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2093
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2094 this._throttledRequestHandler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2095 clearTimeout(this._idleTimeout);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2096 this._idleTimeout = setTimeout(this._onIdle.bind(this), 100);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2097 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2098
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2099 /** Function: flush
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2100 * Immediately send any pending outgoing data.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2101 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2102 * Normally send() queues outgoing data until the next idle period
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2103 * (100ms), which optimizes network use in the common cases when
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2104 * several send()s are called in succession. flush() can be used to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2105 * immediately send all pending data.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2106 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2107 flush: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2108 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2109 // cancel the pending idle period and run the idle function
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2110 // immediately
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2111 clearTimeout(this._idleTimeout);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2112 this._onIdle();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2113 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2114
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2115 /** Function: sendIQ
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2116 * Helper function to send IQ stanzas.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2117 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2118 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2119 * (XMLElement) elem - The stanza to send.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2120 * (Function) callback - The callback function for a successful request.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2121 * (Function) errback - The callback function for a failed or timed
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2122 * out request. On timeout, the stanza will be null.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2123 * (Integer) timeout - The time specified in milliseconds for a
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2124 * timeout to occur.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2125 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2126 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2127 * The id used to send the IQ.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2128 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2129 sendIQ: function(elem, callback, errback, timeout) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2130 var timeoutHandler = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2131 var that = this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2132
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2133 if (typeof(elem.tree) === "function") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2134 elem = elem.tree();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2135 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2136 var id = elem.getAttribute('id');
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2137
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2138 // inject id if not found
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2139 if (!id) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2140 id = this.getUniqueId("sendIQ");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2141 elem.setAttribute("id", id);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2142 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2143
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2144 var handler = this.addHandler(function (stanza) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2145 // remove timeout handler if there is one
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2146 if (timeoutHandler) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2147 that.deleteTimedHandler(timeoutHandler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2148 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2149
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2150 var iqtype = stanza.getAttribute('type');
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2151 if (iqtype === 'result') {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2152 if (callback) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2153 callback(stanza);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2154 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2155 } else if (iqtype === 'error') {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2156 if (errback) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2157 errback(stanza);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2158 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2159 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2160 throw {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2161 name: "StropheError",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2162 message: "Got bad IQ type of " + iqtype
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2163 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2164 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2165 }, null, 'iq', null, id);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2166
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2167 // if timeout specified, setup timeout handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2168 if (timeout) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2169 timeoutHandler = this.addTimedHandler(timeout, function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2170 // get rid of normal handler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2171 that.deleteHandler(handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2172
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2173 // call errback on timeout with null stanza
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2174 if (errback) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2175 errback(null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2176 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2177 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2178 });
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2179 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2180
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2181 this.send(elem);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2182
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2183 return id;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2184 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2185
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2186 /** PrivateFunction: _queueData
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2187 * Queue outgoing data for later sending. Also ensures that the data
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2188 * is a DOMElement.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2189 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2190 _queueData: function (element) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2191 if (element === null ||
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2192 !element.tagName ||
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2193 !element.childNodes) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2194 throw {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2195 name: "StropheError",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2196 message: "Cannot queue non-DOMElement."
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2197 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2198 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2199
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2200 this._data.push(element);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2201 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2202
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2203 /** PrivateFunction: _sendRestart
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2204 * Send an xmpp:restart stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2205 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2206 _sendRestart: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2207 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2208 this._data.push("restart");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2209
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2210 this._throttledRequestHandler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2211 clearTimeout(this._idleTimeout);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2212 this._idleTimeout = setTimeout(this._onIdle.bind(this), 100);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2213 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2214
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2215 /** Function: addTimedHandler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2216 * Add a timed handler to the connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2217 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2218 * This function adds a timed handler. The provided handler will
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2219 * be called every period milliseconds until it returns false,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2220 * the connection is terminated, or the handler is removed. Handlers
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2221 * that wish to continue being invoked should return true.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2222 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2223 * Because of method binding it is necessary to save the result of
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2224 * this function if you wish to remove a handler with
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2225 * deleteTimedHandler().
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2226 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2227 * Note that user handlers are not active until authentication is
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2228 * successful.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2229 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2230 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2231 * (Integer) period - The period of the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2232 * (Function) handler - The callback function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2233 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2234 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2235 * A reference to the handler that can be used to remove it.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2236 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2237 addTimedHandler: function (period, handler)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2238 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2239 var thand = new Strophe.TimedHandler(period, handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2240 this.addTimeds.push(thand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2241 return thand;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2242 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2243
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2244 /** Function: deleteTimedHandler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2245 * Delete a timed handler for a connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2246 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2247 * This function removes a timed handler from the connection. The
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2248 * handRef parameter is *not* the function passed to addTimedHandler(),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2249 * but is the reference returned from addTimedHandler().
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2250 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2251 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2252 * (Strophe.TimedHandler) handRef - The handler reference.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2253 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2254 deleteTimedHandler: function (handRef)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2255 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2256 // this must be done in the Idle loop so that we don't change
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2257 // the handlers during iteration
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2258 this.removeTimeds.push(handRef);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2259 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2260
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2261 /** Function: addHandler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2262 * Add a stanza handler for the connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2263 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2264 * This function adds a stanza handler to the connection. The
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2265 * handler callback will be called for any stanza that matches
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2266 * the parameters. Note that if multiple parameters are supplied,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2267 * they must all match for the handler to be invoked.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2268 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2269 * The handler will receive the stanza that triggered it as its argument.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2270 * The handler should return true if it is to be invoked again;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2271 * returning false will remove the handler after it returns.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2272 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2273 * As a convenience, the ns parameters applies to the top level element
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2274 * and also any of its immediate children. This is primarily to make
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2275 * matching /iq/query elements easy.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2276 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2277 * The options argument contains handler matching flags that affect how
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2278 * matches are determined. Currently the only flag is matchBare (a
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2279 * boolean). When matchBare is true, the from parameter and the from
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2280 * attribute on the stanza will be matched as bare JIDs instead of
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2281 * full JIDs. To use this, pass {matchBare: true} as the value of
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2282 * options. The default value for matchBare is false.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2283 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2284 * The return value should be saved if you wish to remove the handler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2285 * with deleteHandler().
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2286 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2287 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2288 * (Function) handler - The user callback.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2289 * (String) ns - The namespace to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2290 * (String) name - The stanza name to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2291 * (String) type - The stanza type attribute to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2292 * (String) id - The stanza id attribute to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2293 * (String) from - The stanza from attribute to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2294 * (String) options - The handler options
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2295 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2296 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2297 * A reference to the handler that can be used to remove it.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2298 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2299 addHandler: function (handler, ns, name, type, id, from, options)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2300 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2301 var hand = new Strophe.Handler(handler, ns, name, type, id, from, options);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2302 this.addHandlers.push(hand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2303 return hand;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2304 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2305
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2306 /** Function: deleteHandler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2307 * Delete a stanza handler for a connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2308 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2309 * This function removes a stanza handler from the connection. The
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2310 * handRef parameter is *not* the function passed to addHandler(),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2311 * but is the reference returned from addHandler().
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2312 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2313 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2314 * (Strophe.Handler) handRef - The handler reference.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2315 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2316 deleteHandler: function (handRef)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2317 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2318 // this must be done in the Idle loop so that we don't change
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2319 // the handlers during iteration
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2320 this.removeHandlers.push(handRef);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2321 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2322
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2323 /** Function: disconnect
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2324 * Start the graceful disconnection process.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2325 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2326 * This function starts the disconnection process. This process starts
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2327 * by sending unavailable presence and sending BOSH body of type
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2328 * terminate. A timeout handler makes sure that disconnection happens
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2329 * even if the BOSH server does not respond.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2330 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2331 * The user supplied connection callback will be notified of the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2332 * progress as this process happens.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2333 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2334 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2335 * (String) reason - The reason the disconnect is occuring.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2336 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2337 disconnect: function (reason)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2338 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2339 this._changeConnectStatus(Strophe.Status.DISCONNECTING, reason);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2340
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2341 Strophe.info("Disconnect was called because: " + reason);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2342 if (this.connected) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2343 // setup timeout handler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2344 this._disconnectTimeout = this._addSysTimedHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2345 3000, this._onDisconnectTimeout.bind(this));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2346 this._sendTerminate();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2347 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2348 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2349
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2350 /** PrivateFunction: _changeConnectStatus
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2351 * _Private_ helper function that makes sure plugins and the user's
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2352 * callback are notified of connection status changes.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2353 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2354 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2355 * (Integer) status - the new connection status, one of the values
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2356 * in Strophe.Status
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2357 * (String) condition - the error condition or null
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2358 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2359 _changeConnectStatus: function (status, condition)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2360 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2361 // notify all plugins listening for status changes
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2362 for (var k in Strophe._connectionPlugins) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2363 if (Strophe._connectionPlugins.hasOwnProperty(k)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2364 var plugin = this[k];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2365 if (plugin.statusChanged) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2366 try {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2367 plugin.statusChanged(status, condition);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2368 } catch (err) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2369 Strophe.error("" + k + " plugin caused an exception " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2370 "changing status: " + err);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2371 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2372 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2373 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2374 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2375
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2376 // notify the user's callback
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2377 if (this.connect_callback) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2378 try {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2379 this.connect_callback(status, condition);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2380 } catch (e) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2381 Strophe.error("User connection callback caused an " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2382 "exception: " + e);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2383 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2384 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2385 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2386
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2387 /** PrivateFunction: _buildBody
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2388 * _Private_ helper function to generate the <body/> wrapper for BOSH.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2389 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2390 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2391 * A Strophe.Builder with a <body/> element.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2392 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2393 _buildBody: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2394 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2395 var bodyWrap = $build('body', {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2396 rid: this.rid++,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2397 xmlns: Strophe.NS.HTTPBIND
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2398 });
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2399
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2400 if (this.sid !== null) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2401 bodyWrap.attrs({sid: this.sid});
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2402 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2403
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2404 return bodyWrap;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2405 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2406
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2407 /** PrivateFunction: _removeRequest
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2408 * _Private_ function to remove a request from the queue.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2409 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2410 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2411 * (Strophe.Request) req - The request to remove.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2412 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2413 _removeRequest: function (req)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2414 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2415 Strophe.debug("removing request");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2416
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2417 var i;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2418 for (i = this._requests.length - 1; i >= 0; i--) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2419 if (req == this._requests[i]) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2420 this._requests.splice(i, 1);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2421 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2422 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2423
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2424 // IE6 fails on setting to null, so set to empty function
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2425 req.xhr.onreadystatechange = function () {};
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2426
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2427 this._throttledRequestHandler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2428 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2429
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2430 /** PrivateFunction: _restartRequest
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2431 * _Private_ function to restart a request that is presumed dead.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2432 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2433 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2434 * (Integer) i - The index of the request in the queue.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2435 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2436 _restartRequest: function (i)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2437 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2438 var req = this._requests[i];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2439 if (req.dead === null) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2440 req.dead = new Date();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2441 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2442
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2443 this._processRequest(i);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2444 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2445
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2446 /** PrivateFunction: _processRequest
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2447 * _Private_ function to process a request in the queue.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2448 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2449 * This function takes requests off the queue and sends them and
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2450 * restarts dead requests.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2451 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2452 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2453 * (Integer) i - The index of the request in the queue.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2454 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2455 _processRequest: function (i)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2456 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2457 var req = this._requests[i];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2458 var reqStatus = -1;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2459
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2460 try {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2461 if (req.xhr.readyState == 4) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2462 reqStatus = req.xhr.status;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2463 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2464 } catch (e) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2465 Strophe.error("caught an error in _requests[" + i +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2466 "], reqStatus: " + reqStatus);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2467 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2468
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2469 if (typeof(reqStatus) == "undefined") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2470 reqStatus = -1;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2471 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2472
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2473 var time_elapsed = req.age();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2474 var primaryTimeout = (!isNaN(time_elapsed) &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2475 time_elapsed > Math.floor(Strophe.TIMEOUT * this.wait));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2476 var secondaryTimeout = (req.dead !== null &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2477 req.timeDead() > Math.floor(Strophe.SECONDARY_TIMEOUT * this.wait));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2478 var requestCompletedWithServerError = (req.xhr.readyState == 4 &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2479 (reqStatus < 1 ||
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2480 reqStatus >= 500));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2481 if (primaryTimeout || secondaryTimeout ||
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2482 requestCompletedWithServerError) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2483 if (secondaryTimeout) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2484 Strophe.error("Request " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2485 this._requests[i].id +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2486 " timed out (secondary), restarting");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2487 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2488 req.abort = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2489 req.xhr.abort();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2490 // setting to null fails on IE6, so set to empty function
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2491 req.xhr.onreadystatechange = function () {};
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2492 this._requests[i] = new Strophe.Request(req.xmlData,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2493 req.origFunc,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2494 req.rid,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2495 req.sends);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2496 req = this._requests[i];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2497 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2498
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2499 if (req.xhr.readyState === 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2500 Strophe.debug("request id " + req.id +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2501 "." + req.sends + " posting");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2502
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2503 req.date = new Date();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2504 try {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2505 req.xhr.open("POST", this.service, true);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2506 } catch (e2) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2507 Strophe.error("XHR open failed.");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2508 if (!this.connected) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2509 this._changeConnectStatus(Strophe.Status.CONNFAIL,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2510 "bad-service");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2511 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2512 this.disconnect();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2513 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2514 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2515
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2516 // Fires the XHR request -- may be invoked immediately
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2517 // or on a gradually expanding retry window for reconnects
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2518 var sendFunc = function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2519 req.xhr.send(req.data);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2520 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2521
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2522 // Implement progressive backoff for reconnects --
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2523 // First retry (send == 1) should also be instantaneous
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2524 if (req.sends > 1) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2525 // Using a cube of the retry number creats a nicely
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2526 // expanding retry window
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2527 var backoff = Math.pow(req.sends, 3) * 1000;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2528 setTimeout(sendFunc, backoff);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2529 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2530 sendFunc();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2531 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2532
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2533 req.sends++;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2534
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2535 this.xmlOutput(req.xmlData);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2536 this.rawOutput(req.data);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2537 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2538 Strophe.debug("_processRequest: " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2539 (i === 0 ? "first" : "second") +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2540 " request has readyState of " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2541 req.xhr.readyState);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2542 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2543 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2544
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2545 /** PrivateFunction: _throttledRequestHandler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2546 * _Private_ function to throttle requests to the connection window.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2547 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2548 * This function makes sure we don't send requests so fast that the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2549 * request ids overflow the connection window in the case that one
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2550 * request died.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2551 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2552 _throttledRequestHandler: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2553 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2554 if (!this._requests) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2555 Strophe.debug("_throttledRequestHandler called with " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2556 "undefined requests");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2557 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2558 Strophe.debug("_throttledRequestHandler called with " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2559 this._requests.length + " requests");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2560 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2561
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2562 if (!this._requests || this._requests.length === 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2563 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2564 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2565
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2566 if (this._requests.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2567 this._processRequest(0);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2568 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2569
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2570 if (this._requests.length > 1 &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2571 Math.abs(this._requests[0].rid -
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2572 this._requests[1].rid) < this.window - 1) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2573 this._processRequest(1);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2574 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2575 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2576
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2577 /** PrivateFunction: _onRequestStateChange
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2578 * _Private_ handler for Strophe.Request state changes.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2579 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2580 * This function is called when the XMLHttpRequest readyState changes.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2581 * It contains a lot of error handling logic for the many ways that
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2582 * requests can fail, and calls the request callback when requests
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2583 * succeed.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2584 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2585 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2586 * (Function) func - The handler for the request.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2587 * (Strophe.Request) req - The request that is changing readyState.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2588 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2589 _onRequestStateChange: function (func, req)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2590 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2591 Strophe.debug("request id " + req.id +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2592 "." + req.sends + " state changed to " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2593 req.xhr.readyState);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2594
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2595 if (req.abort) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2596 req.abort = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2597 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2598 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2599
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2600 // request complete
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2601 var reqStatus;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2602 if (req.xhr.readyState == 4) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2603 reqStatus = 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2604 try {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2605 reqStatus = req.xhr.status;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2606 } catch (e) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2607 // ignore errors from undefined status attribute. works
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2608 // around a browser bug
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2609 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2610
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2611 if (typeof(reqStatus) == "undefined") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2612 reqStatus = 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2613 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2614
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2615 if (this.disconnecting) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2616 if (reqStatus >= 400) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2617 this._hitError(reqStatus);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2618 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2619 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2620 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2621
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2622 var reqIs0 = (this._requests[0] == req);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2623 var reqIs1 = (this._requests[1] == req);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2624
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2625 if ((reqStatus > 0 && reqStatus < 500) || req.sends > 5) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2626 // remove from internal queue
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2627 this._removeRequest(req);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2628 Strophe.debug("request id " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2629 req.id +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2630 " should now be removed");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2631 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2632
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2633 // request succeeded
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2634 if (reqStatus == 200) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2635 // if request 1 finished, or request 0 finished and request
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2636 // 1 is over Strophe.SECONDARY_TIMEOUT seconds old, we need to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2637 // restart the other - both will be in the first spot, as the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2638 // completed request has been removed from the queue already
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2639 if (reqIs1 ||
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2640 (reqIs0 && this._requests.length > 0 &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2641 this._requests[0].age() > Math.floor(Strophe.SECONDARY_TIMEOUT * this.wait))) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2642 this._restartRequest(0);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2643 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2644 // call handler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2645 Strophe.debug("request id " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2646 req.id + "." +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2647 req.sends + " got 200");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2648 func(req);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2649 this.errors = 0;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2650 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2651 Strophe.error("request id " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2652 req.id + "." +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2653 req.sends + " error " + reqStatus +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2654 " happened");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2655 if (reqStatus === 0 ||
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2656 (reqStatus >= 400 && reqStatus < 600) ||
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2657 reqStatus >= 12000) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2658 this._hitError(reqStatus);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2659 if (reqStatus >= 400 && reqStatus < 500) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2660 this._changeConnectStatus(Strophe.Status.DISCONNECTING,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2661 null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2662 this._doDisconnect();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2663 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2664 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2665 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2666
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2667 if (!((reqStatus > 0 && reqStatus < 10000) ||
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2668 req.sends > 5)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2669 this._throttledRequestHandler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2670 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2671 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2672 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2673
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2674 /** PrivateFunction: _hitError
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2675 * _Private_ function to handle the error count.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2676 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2677 * Requests are resent automatically until their error count reaches
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2678 * 5. Each time an error is encountered, this function is called to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2679 * increment the count and disconnect if the count is too high.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2680 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2681 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2682 * (Integer) reqStatus - The request status.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2683 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2684 _hitError: function (reqStatus)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2685 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2686 this.errors++;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2687 Strophe.warn("request errored, status: " + reqStatus +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2688 ", number of errors: " + this.errors);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2689 if (this.errors > 4) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2690 this._onDisconnectTimeout();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2691 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2692 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2693
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2694 /** PrivateFunction: _doDisconnect
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2695 * _Private_ function to disconnect.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2696 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2697 * This is the last piece of the disconnection logic. This resets the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2698 * connection and alerts the user's connection callback.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2699 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2700 _doDisconnect: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2701 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2702 Strophe.info("_doDisconnect was called");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2703 this.authenticated = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2704 this.disconnecting = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2705 this.sid = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2706 this.streamId = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2707 this.rid = Math.floor(Math.random() * 4294967295);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2708
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2709 // tell the parent we disconnected
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2710 if (this.connected) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2711 this._changeConnectStatus(Strophe.Status.DISCONNECTED, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2712 this.connected = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2713 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2714
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2715 // delete handlers
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2716 this.handlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2717 this.timedHandlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2718 this.removeTimeds = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2719 this.removeHandlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2720 this.addTimeds = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2721 this.addHandlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2722 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2723
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2724 /** PrivateFunction: _dataRecv
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2725 * _Private_ handler to processes incoming data from the the connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2726 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2727 * Except for _connect_cb handling the initial connection request,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2728 * this function handles the incoming data for all requests. This
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2729 * function also fires stanza handlers that match each incoming
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2730 * stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2731 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2732 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2733 * (Strophe.Request) req - The request that has data ready.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2734 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2735 _dataRecv: function (req)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2736 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2737 try {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2738 var elem = req.getResponse();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2739 } catch (e) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2740 if (e != "parsererror") { throw e; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2741 this.disconnect("strophe-parsererror");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2742 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2743 if (elem === null) { return; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2744
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2745 this.xmlInput(elem);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2746 this.rawInput(Strophe.serialize(elem));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2747
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2748 // remove handlers scheduled for deletion
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2749 var i, hand;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2750 while (this.removeHandlers.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2751 hand = this.removeHandlers.pop();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2752 i = this.handlers.indexOf(hand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2753 if (i >= 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2754 this.handlers.splice(i, 1);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2755 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2756 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2757
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2758 // add handlers scheduled for addition
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2759 while (this.addHandlers.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2760 this.handlers.push(this.addHandlers.pop());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2761 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2762
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2763 // handle graceful disconnect
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2764 if (this.disconnecting && this._requests.length === 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2765 this.deleteTimedHandler(this._disconnectTimeout);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2766 this._disconnectTimeout = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2767 this._doDisconnect();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2768 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2769 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2770
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2771 var typ = elem.getAttribute("type");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2772 var cond, conflict;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2773 if (typ !== null && typ == "terminate") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2774 // an error occurred
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2775 cond = elem.getAttribute("condition");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2776 conflict = elem.getElementsByTagName("conflict");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2777 if (cond !== null) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2778 if (cond == "remote-stream-error" && conflict.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2779 cond = "conflict";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2780 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2781 this._changeConnectStatus(Strophe.Status.CONNFAIL, cond);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2782 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2783 this._changeConnectStatus(Strophe.Status.CONNFAIL, "unknown");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2784 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2785 this.disconnect();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2786 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2787 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2788
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2789 // send each incoming stanza through the handler chain
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2790 var self = this;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2791 Strophe.forEachChild(elem, null, function (child) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2792 var i, newList;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2793 // process handlers
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2794 newList = self.handlers;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2795 self.handlers = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2796 for (i = 0; i < newList.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2797 var hand = newList[i];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2798 if (hand.isMatch(child) &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2799 (self.authenticated || !hand.user)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2800 if (hand.run(child)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2801 self.handlers.push(hand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2802 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2803 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2804 self.handlers.push(hand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2805 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2806 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2807 });
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2808 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2809
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2810 /** PrivateFunction: _sendTerminate
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2811 * _Private_ function to send initial disconnect sequence.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2812 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2813 * This is the first step in a graceful disconnect. It sends
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2814 * the BOSH server a terminate body and includes an unavailable
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2815 * presence if authentication has completed.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2816 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2817 _sendTerminate: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2818 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2819 Strophe.info("_sendTerminate was called");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2820 var body = this._buildBody().attrs({type: "terminate"});
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2821
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2822 if (this.authenticated) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2823 body.c('presence', {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2824 xmlns: Strophe.NS.CLIENT,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2825 type: 'unavailable'
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2826 });
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2827 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2828
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2829 this.disconnecting = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2830
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2831 var req = new Strophe.Request(body.tree(),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2832 this._onRequestStateChange.bind(this)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2833 .prependArg(this._dataRecv.bind(this)),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2834 body.tree().getAttribute("rid"));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2835
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2836 this._requests.push(req);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2837 this._throttledRequestHandler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2838 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2839
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2840 /** PrivateFunction: _connect_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2841 * _Private_ handler for initial connection request.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2842 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2843 * This handler is used to process the initial connection request
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2844 * response from the BOSH server. It is used to set up authentication
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2845 * handlers and start the authentication process.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2846 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2847 * SASL authentication will be attempted if available, otherwise
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2848 * the code will fall back to legacy authentication.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2849 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2850 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2851 * (Strophe.Request) req - The current request.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2852 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2853 _connect_cb: function (req)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2854 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2855 Strophe.info("_connect_cb was called");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2856
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2857 this.connected = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2858 var bodyWrap = req.getResponse();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2859 if (!bodyWrap) { return; }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2860
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2861 this.xmlInput(bodyWrap);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2862 this.rawInput(Strophe.serialize(bodyWrap));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2863
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2864 var typ = bodyWrap.getAttribute("type");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2865 var cond, conflict;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2866 if (typ !== null && typ == "terminate") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2867 // an error occurred
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2868 cond = bodyWrap.getAttribute("condition");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2869 conflict = bodyWrap.getElementsByTagName("conflict");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2870 if (cond !== null) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2871 if (cond == "remote-stream-error" && conflict.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2872 cond = "conflict";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2873 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2874 this._changeConnectStatus(Strophe.Status.CONNFAIL, cond);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2875 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2876 this._changeConnectStatus(Strophe.Status.CONNFAIL, "unknown");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2877 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2878 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2879 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2880
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2881 // check to make sure we don't overwrite these if _connect_cb is
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2882 // called multiple times in the case of missing stream:features
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2883 if (!this.sid) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2884 this.sid = bodyWrap.getAttribute("sid");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2885 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2886 if (!this.stream_id) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2887 this.stream_id = bodyWrap.getAttribute("authid");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2888 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2889 var wind = bodyWrap.getAttribute('requests');
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2890 if (wind) { this.window = parseInt(wind, 10); }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2891 var hold = bodyWrap.getAttribute('hold');
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2892 if (hold) { this.hold = parseInt(hold, 10); }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2893 var wait = bodyWrap.getAttribute('wait');
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2894 if (wait) { this.wait = parseInt(wait, 10); }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2895
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2896
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2897 var do_sasl_plain = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2898 var do_sasl_digest_md5 = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2899 var do_sasl_anonymous = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2900
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2901 var mechanisms = bodyWrap.getElementsByTagName("mechanism");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2902 var i, mech, auth_str, hashed_auth_str;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2903 if (mechanisms.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2904 for (i = 0; i < mechanisms.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2905 mech = Strophe.getText(mechanisms[i]);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2906 if (mech == 'DIGEST-MD5') {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2907 do_sasl_digest_md5 = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2908 } else if (mech == 'PLAIN') {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2909 do_sasl_plain = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2910 } else if (mech == 'ANONYMOUS') {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2911 do_sasl_anonymous = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2912 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2913 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2914 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2915 // we didn't get stream:features yet, so we need wait for it
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2916 // by sending a blank poll request
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2917 var body = this._buildBody();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2918 this._requests.push(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2919 new Strophe.Request(body.tree(),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2920 this._onRequestStateChange.bind(this)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2921 .prependArg(this._connect_cb.bind(this)),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2922 body.tree().getAttribute("rid")));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2923 this._throttledRequestHandler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2924 return;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2925 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2926
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2927 if (Strophe.getNodeFromJid(this.jid) === null &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2928 do_sasl_anonymous) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2929 this._changeConnectStatus(Strophe.Status.AUTHENTICATING, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2930 this._sasl_success_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2931 this._sasl_success_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2932 "success", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2933 this._sasl_failure_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2934 this._sasl_failure_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2935 "failure", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2936
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2937 this.send($build("auth", {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2938 xmlns: Strophe.NS.SASL,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2939 mechanism: "ANONYMOUS"
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2940 }).tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2941 } else if (Strophe.getNodeFromJid(this.jid) === null) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2942 // we don't have a node, which is required for non-anonymous
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2943 // client connections
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2944 this._changeConnectStatus(Strophe.Status.CONNFAIL,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2945 'x-strophe-bad-non-anon-jid');
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2946 this.disconnect();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2947 } else if (do_sasl_digest_md5) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2948 this._changeConnectStatus(Strophe.Status.AUTHENTICATING, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2949 this._sasl_challenge_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2950 this._sasl_challenge1_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2951 "challenge", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2952 this._sasl_failure_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2953 this._sasl_failure_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2954 "failure", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2955
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2956 this.send($build("auth", {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2957 xmlns: Strophe.NS.SASL,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2958 mechanism: "DIGEST-MD5"
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2959 }).tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2960 } else if (do_sasl_plain) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2961 // Build the plain auth string (barejid null
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2962 // username null password) and base 64 encoded.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2963 auth_str = Strophe.getBareJidFromJid(this.jid);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2964 auth_str = auth_str + "\u0000";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2965 auth_str = auth_str + Strophe.getNodeFromJid(this.jid);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2966 auth_str = auth_str + "\u0000";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2967 auth_str = auth_str + this.pass;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2968
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2969 this._changeConnectStatus(Strophe.Status.AUTHENTICATING, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2970 this._sasl_success_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2971 this._sasl_success_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2972 "success", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2973 this._sasl_failure_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2974 this._sasl_failure_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2975 "failure", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2976
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2977 hashed_auth_str = Base64.encode(auth_str);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2978 this.send($build("auth", {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2979 xmlns: Strophe.NS.SASL,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2980 mechanism: "PLAIN"
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2981 }).t(hashed_auth_str).tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2982 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2983 this._changeConnectStatus(Strophe.Status.AUTHENTICATING, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2984 this._addSysHandler(this._auth1_cb.bind(this), null, null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2985 null, "_auth_1");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2986
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2987 this.send($iq({
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2988 type: "get",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2989 to: this.domain,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2990 id: "_auth_1"
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2991 }).c("query", {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2992 xmlns: Strophe.NS.AUTH
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2993 }).c("username", {}).t(Strophe.getNodeFromJid(this.jid)).tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2994 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2995 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2996
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2997 /** PrivateFunction: _sasl_challenge1_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2998 * _Private_ handler for DIGEST-MD5 SASL authentication.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2999 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3000 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3001 * (XMLElement) elem - The challenge stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3002 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3003 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3004 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3005 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3006 _sasl_challenge1_cb: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3007 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3008 var attribMatch = /([a-z]+)=("[^"]+"|[^,"]+)(?:,|$)/;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3009
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3010 var challenge = Base64.decode(Strophe.getText(elem));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3011 var cnonce = MD5.hexdigest(Math.random() * 1234567890);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3012 var realm = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3013 var host = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3014 var nonce = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3015 var qop = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3016 var matches;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3017
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3018 // remove unneeded handlers
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3019 this.deleteHandler(this._sasl_failure_handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3020
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3021 while (challenge.match(attribMatch)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3022 matches = challenge.match(attribMatch);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3023 challenge = challenge.replace(matches[0], "");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3024 matches[2] = matches[2].replace(/^"(.+)"$/, "$1");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3025 switch (matches[1]) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3026 case "realm":
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3027 realm = matches[2];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3028 break;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3029 case "nonce":
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3030 nonce = matches[2];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3031 break;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3032 case "qop":
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3033 qop = matches[2];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3034 break;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3035 case "host":
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3036 host = matches[2];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3037 break;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3038 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3039 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3040
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3041 var digest_uri = "xmpp/" + this.domain;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3042 if (host !== null) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3043 digest_uri = digest_uri + "/" + host;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3044 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3045
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3046 var A1 = MD5.hash(Strophe.getNodeFromJid(this.jid) +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3047 ":" + realm + ":" + this.pass) +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3048 ":" + nonce + ":" + cnonce;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3049 var A2 = 'AUTHENTICATE:' + digest_uri;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3050
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3051 var responseText = "";
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3052 responseText += 'username=' +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3053 this._quote(Strophe.getNodeFromJid(this.jid)) + ',';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3054 responseText += 'realm=' + this._quote(realm) + ',';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3055 responseText += 'nonce=' + this._quote(nonce) + ',';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3056 responseText += 'cnonce=' + this._quote(cnonce) + ',';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3057 responseText += 'nc="00000001",';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3058 responseText += 'qop="auth",';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3059 responseText += 'digest-uri=' + this._quote(digest_uri) + ',';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3060 responseText += 'response=' + this._quote(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3061 MD5.hexdigest(MD5.hexdigest(A1) + ":" +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3062 nonce + ":00000001:" +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3063 cnonce + ":auth:" +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3064 MD5.hexdigest(A2))) + ',';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3065 responseText += 'charset="utf-8"';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3066
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3067 this._sasl_challenge_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3068 this._sasl_challenge2_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3069 "challenge", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3070 this._sasl_success_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3071 this._sasl_success_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3072 "success", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3073 this._sasl_failure_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3074 this._sasl_failure_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3075 "failure", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3076
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3077 this.send($build('response', {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3078 xmlns: Strophe.NS.SASL
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3079 }).t(Base64.encode(responseText)).tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3080
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3081 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3082 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3083
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3084 /** PrivateFunction: _quote
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3085 * _Private_ utility function to backslash escape and quote strings.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3086 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3087 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3088 * (String) str - The string to be quoted.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3089 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3090 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3091 * quoted string
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3092 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3093 _quote: function (str)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3094 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3095 return '"' + str.replace(/\\/g, "\\\\").replace(/"/g, '\\"') + '"';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3096 //" end string workaround for emacs
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3097 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3098
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3099
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3100 /** PrivateFunction: _sasl_challenge2_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3101 * _Private_ handler for second step of DIGEST-MD5 SASL authentication.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3102 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3103 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3104 * (XMLElement) elem - The challenge stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3105 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3106 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3107 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3108 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3109 _sasl_challenge2_cb: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3110 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3111 // remove unneeded handlers
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3112 this.deleteHandler(this._sasl_success_handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3113 this.deleteHandler(this._sasl_failure_handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3114
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3115 this._sasl_success_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3116 this._sasl_success_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3117 "success", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3118 this._sasl_failure_handler = this._addSysHandler(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3119 this._sasl_failure_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3120 "failure", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3121 this.send($build('response', {xmlns: Strophe.NS.SASL}).tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3122 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3123 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3124
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3125 /** PrivateFunction: _auth1_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3126 * _Private_ handler for legacy authentication.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3127 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3128 * This handler is called in response to the initial <iq type='get'/>
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3129 * for legacy authentication. It builds an authentication <iq/> and
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3130 * sends it, creating a handler (calling back to _auth2_cb()) to
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3131 * handle the result
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3132 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3133 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3134 * (XMLElement) elem - The stanza that triggered the callback.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3135 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3136 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3137 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3138 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3139 _auth1_cb: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3140 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3141 // build plaintext auth iq
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3142 var iq = $iq({type: "set", id: "_auth_2"})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3143 .c('query', {xmlns: Strophe.NS.AUTH})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3144 .c('username', {}).t(Strophe.getNodeFromJid(this.jid))
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3145 .up()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3146 .c('password').t(this.pass);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3147
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3148 if (!Strophe.getResourceFromJid(this.jid)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3149 // since the user has not supplied a resource, we pick
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3150 // a default one here. unlike other auth methods, the server
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3151 // cannot do this for us.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3152 this.jid = Strophe.getBareJidFromJid(this.jid) + '/strophe';
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3153 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3154 iq.up().c('resource', {}).t(Strophe.getResourceFromJid(this.jid));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3155
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3156 this._addSysHandler(this._auth2_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3157 null, null, "_auth_2");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3158
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3159 this.send(iq.tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3160
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3161 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3162 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3163
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3164 /** PrivateFunction: _sasl_success_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3165 * _Private_ handler for succesful SASL authentication.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3166 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3167 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3168 * (XMLElement) elem - The matching stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3169 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3170 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3171 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3172 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3173 _sasl_success_cb: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3174 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3175 Strophe.info("SASL authentication succeeded.");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3176
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3177 // remove old handlers
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3178 this.deleteHandler(this._sasl_failure_handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3179 this._sasl_failure_handler = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3180 if (this._sasl_challenge_handler) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3181 this.deleteHandler(this._sasl_challenge_handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3182 this._sasl_challenge_handler = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3183 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3184
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3185 this._addSysHandler(this._sasl_auth1_cb.bind(this), null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3186 "stream:features", null, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3187
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3188 // we must send an xmpp:restart now
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3189 this._sendRestart();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3190
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3191 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3192 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3193
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3194 /** PrivateFunction: _sasl_auth1_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3195 * _Private_ handler to start stream binding.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3196 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3197 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3198 * (XMLElement) elem - The matching stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3199 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3200 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3201 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3202 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3203 _sasl_auth1_cb: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3204 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3205 var i, child;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3206
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3207 for (i = 0; i < elem.childNodes.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3208 child = elem.childNodes[i];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3209 if (child.nodeName == 'bind') {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3210 this.do_bind = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3211 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3212
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3213 if (child.nodeName == 'session') {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3214 this.do_session = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3215 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3216 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3217
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3218 if (!this.do_bind) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3219 this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3220 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3221 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3222 this._addSysHandler(this._sasl_bind_cb.bind(this), null, null,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3223 null, "_bind_auth_2");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3224
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3225 var resource = Strophe.getResourceFromJid(this.jid);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3226 if (resource) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3227 this.send($iq({type: "set", id: "_bind_auth_2"})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3228 .c('bind', {xmlns: Strophe.NS.BIND})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3229 .c('resource', {}).t(resource).tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3230 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3231 this.send($iq({type: "set", id: "_bind_auth_2"})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3232 .c('bind', {xmlns: Strophe.NS.BIND})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3233 .tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3234 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3235 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3236
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3237 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3238 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3239
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3240 /** PrivateFunction: _sasl_bind_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3241 * _Private_ handler for binding result and session start.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3242 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3243 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3244 * (XMLElement) elem - The matching stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3245 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3246 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3247 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3248 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3249 _sasl_bind_cb: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3250 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3251 if (elem.getAttribute("type") == "error") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3252 Strophe.info("SASL binding failed.");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3253 this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3254 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3255 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3256
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3257 // TODO - need to grab errors
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3258 var bind = elem.getElementsByTagName("bind");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3259 var jidNode;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3260 if (bind.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3261 // Grab jid
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3262 jidNode = bind[0].getElementsByTagName("jid");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3263 if (jidNode.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3264 this.jid = Strophe.getText(jidNode[0]);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3265
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3266 if (this.do_session) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3267 this._addSysHandler(this._sasl_session_cb.bind(this),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3268 null, null, null, "_session_auth_2");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3269
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3270 this.send($iq({type: "set", id: "_session_auth_2"})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3271 .c('session', {xmlns: Strophe.NS.SESSION})
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3272 .tree());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3273 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3274 this.authenticated = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3275 this._changeConnectStatus(Strophe.Status.CONNECTED, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3276 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3277 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3278 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3279 Strophe.info("SASL binding failed.");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3280 this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3281 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3282 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3283 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3284
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3285 /** PrivateFunction: _sasl_session_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3286 * _Private_ handler to finish successful SASL connection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3287 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3288 * This sets Connection.authenticated to true on success, which
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3289 * starts the processing of user handlers.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3290 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3291 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3292 * (XMLElement) elem - The matching stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3293 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3294 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3295 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3296 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3297 _sasl_session_cb: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3298 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3299 if (elem.getAttribute("type") == "result") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3300 this.authenticated = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3301 this._changeConnectStatus(Strophe.Status.CONNECTED, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3302 } else if (elem.getAttribute("type") == "error") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3303 Strophe.info("Session creation failed.");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3304 this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3305 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3306 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3307
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3308 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3309 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3310
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3311 /** PrivateFunction: _sasl_failure_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3312 * _Private_ handler for SASL authentication failure.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3313 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3314 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3315 * (XMLElement) elem - The matching stanza.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3316 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3317 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3318 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3319 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3320 _sasl_failure_cb: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3321 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3322 // delete unneeded handlers
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3323 if (this._sasl_success_handler) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3324 this.deleteHandler(this._sasl_success_handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3325 this._sasl_success_handler = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3326 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3327 if (this._sasl_challenge_handler) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3328 this.deleteHandler(this._sasl_challenge_handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3329 this._sasl_challenge_handler = null;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3330 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3331
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3332 this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3333 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3334 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3335
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3336 /** PrivateFunction: _auth2_cb
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3337 * _Private_ handler to finish legacy authentication.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3338 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3339 * This handler is called when the result from the jabber:iq:auth
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3340 * <iq/> stanza is returned.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3341 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3342 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3343 * (XMLElement) elem - The stanza that triggered the callback.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3344 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3345 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3346 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3347 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3348 _auth2_cb: function (elem)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3349 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3350 if (elem.getAttribute("type") == "result") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3351 this.authenticated = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3352 this._changeConnectStatus(Strophe.Status.CONNECTED, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3353 } else if (elem.getAttribute("type") == "error") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3354 this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3355 this.disconnect();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3356 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3357
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3358 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3359 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3360
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3361 /** PrivateFunction: _addSysTimedHandler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3362 * _Private_ function to add a system level timed handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3363 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3364 * This function is used to add a Strophe.TimedHandler for the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3365 * library code. System timed handlers are allowed to run before
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3366 * authentication is complete.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3367 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3368 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3369 * (Integer) period - The period of the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3370 * (Function) handler - The callback function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3371 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3372 _addSysTimedHandler: function (period, handler)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3373 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3374 var thand = new Strophe.TimedHandler(period, handler);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3375 thand.user = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3376 this.addTimeds.push(thand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3377 return thand;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3378 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3379
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3380 /** PrivateFunction: _addSysHandler
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3381 * _Private_ function to add a system level stanza handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3382 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3383 * This function is used to add a Strophe.Handler for the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3384 * library code. System stanza handlers are allowed to run before
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3385 * authentication is complete.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3386 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3387 * Parameters:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3388 * (Function) handler - The callback function.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3389 * (String) ns - The namespace to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3390 * (String) name - The stanza name to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3391 * (String) type - The stanza type attribute to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3392 * (String) id - The stanza id attribute to match.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3393 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3394 _addSysHandler: function (handler, ns, name, type, id)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3395 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3396 var hand = new Strophe.Handler(handler, ns, name, type, id);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3397 hand.user = false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3398 this.addHandlers.push(hand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3399 return hand;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3400 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3401
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3402 /** PrivateFunction: _onDisconnectTimeout
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3403 * _Private_ timeout handler for handling non-graceful disconnection.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3404 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3405 * If the graceful disconnect process does not complete within the
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3406 * time allotted, this handler finishes the disconnect anyway.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3407 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3408 * Returns:
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3409 * false to remove the handler.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3410 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3411 _onDisconnectTimeout: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3412 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3413 Strophe.info("_onDisconnectTimeout was called");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3414
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3415 // cancel all remaining requests and clear the queue
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3416 var req;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3417 while (this._requests.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3418 req = this._requests.pop();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3419 req.abort = true;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3420 req.xhr.abort();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3421 // jslint complains, but this is fine. setting to empty func
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3422 // is necessary for IE6
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3423 req.xhr.onreadystatechange = function () {};
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3424 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3425
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3426 // actually disconnect
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3427 this._doDisconnect();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3428
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3429 return false;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3430 },
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3431
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3432 /** PrivateFunction: _onIdle
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3433 * _Private_ handler to process events during idle cycle.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3434 *
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3435 * This handler is called every 100ms to fire timed handlers that
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3436 * are ready and keep poll requests going.
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3437 */
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3438 _onIdle: function ()
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3439 {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3440 var i, thand, since, newList;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3441
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3442 // remove timed handlers that have been scheduled for deletion
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3443 while (this.removeTimeds.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3444 thand = this.removeTimeds.pop();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3445 i = this.timedHandlers.indexOf(thand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3446 if (i >= 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3447 this.timedHandlers.splice(i, 1);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3448 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3449 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3450
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3451 // add timed handlers scheduled for addition
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3452 while (this.addTimeds.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3453 this.timedHandlers.push(this.addTimeds.pop());
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3454 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3455
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3456 // call ready timed handlers
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3457 var now = new Date().getTime();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3458 newList = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3459 for (i = 0; i < this.timedHandlers.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3460 thand = this.timedHandlers[i];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3461 if (this.authenticated || !thand.user) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3462 since = thand.lastCalled + thand.period;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3463 if (since - now <= 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3464 if (thand.run()) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3465 newList.push(thand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3466 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3467 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3468 newList.push(thand);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3469 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3470 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3471 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3472 this.timedHandlers = newList;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3473
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3474 var body, time_elapsed;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3475
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3476 // if no requests are in progress, poll
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3477 if (this.authenticated && this._requests.length === 0 &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3478 this._data.length === 0 && !this.disconnecting) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3479 Strophe.info("no requests during idle cycle, sending " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3480 "blank request");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3481 this._data.push(null);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3482 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3483
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3484 if (this._requests.length < 2 && this._data.length > 0 &&
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3485 !this.paused) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3486 body = this._buildBody();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3487 for (i = 0; i < this._data.length; i++) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3488 if (this._data[i] !== null) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3489 if (this._data[i] === "restart") {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3490 body.attrs({
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3491 to: this.domain,
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3492 "xml:lang": "en",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3493 "xmpp:restart": "true",
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3494 "xmlns:xmpp": Strophe.NS.BOSH
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3495 });
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3496 } else {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3497 body.cnode(this._data[i]).up();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3498 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3499 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3500 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3501 delete this._data;
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3502 this._data = [];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3503 this._requests.push(
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3504 new Strophe.Request(body.tree(),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3505 this._onRequestStateChange.bind(this)
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3506 .prependArg(this._dataRecv.bind(this)),
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3507 body.tree().getAttribute("rid")));
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3508 this._processRequest(this._requests.length - 1);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3509 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3510
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3511 if (this._requests.length > 0) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3512 time_elapsed = this._requests[0].age();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3513 if (this._requests[0].dead !== null) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3514 if (this._requests[0].timeDead() >
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3515 Math.floor(Strophe.SECONDARY_TIMEOUT * this.wait)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3516 this._throttledRequestHandler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3517 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3518 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3519
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3520 if (time_elapsed > Math.floor(Strophe.TIMEOUT * this.wait)) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3521 Strophe.warn("Request " +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3522 this._requests[0].id +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3523 " timed out, over " + Math.floor(Strophe.TIMEOUT * this.wait) +
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3524 " seconds since last activity");
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3525 this._throttledRequestHandler();
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3526 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3527 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3528
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3529 // reactivate the timer
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3530 clearTimeout(this._idleTimeout);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3531 this._idleTimeout = setTimeout(this._onIdle.bind(this), 100);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3532 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3533 };
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3534
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3535 if (callback) {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3536 callback(Strophe, $build, $msg, $iq, $pres);
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3537 }
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3538
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3539 })(function () {
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3540 window.Strophe = arguments[0];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3541 window.$build = arguments[1];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3542 window.$msg = arguments[2];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3543 window.$iq = arguments[3];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3544 window.$pres = arguments[4];
f2f9b965d1ad mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3545 });