root / trunk / web / dojo / dojox / xmpp / xmppSession.js @ 13
History | View | Annotate | Download (14.9 KB)
| 1 | 9 | andrej.cim | /*
|
|---|---|---|---|
| 2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
||
| 3 | Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
| 4 | see: http://dojotoolkit.org/license for details
|
||
| 5 | */
|
||
| 6 | |||
| 7 | |||
| 8 | if(!dojo._hasResource["dojox.xmpp.xmppSession"]){ |
||
| 9 | dojo._hasResource["dojox.xmpp.xmppSession"]=true; |
||
| 10 | dojo.provide("dojox.xmpp.xmppSession");
|
||
| 11 | dojo.require("dojox.xmpp.TransportSession");
|
||
| 12 | dojo.require("dojox.xmpp.RosterService");
|
||
| 13 | dojo.require("dojox.xmpp.PresenceService");
|
||
| 14 | dojo.require("dojox.xmpp.UserService");
|
||
| 15 | dojo.require("dojox.xmpp.ChatService");
|
||
| 16 | dojo.require("dojox.xmpp.sasl");
|
||
| 17 | dojox.xmpp.xmpp={STREAM_NS:"http://etherx.jabber.org/streams",CLIENT_NS:"jabber:client",STANZA_NS:"urn:ietf:params:xml:ns:xmpp-stanzas",SASL_NS:"urn:ietf:params:xml:ns:xmpp-sasl",BIND_NS:"urn:ietf:params:xml:ns:xmpp-bind",SESSION_NS:"urn:ietf:params:xml:ns:xmpp-session",BODY_NS:"http://jabber.org/protocol/httpbind",XHTML_BODY_NS:"http://www.w3.org/1999/xhtml",XHTML_IM_NS:"http://jabber.org/protocol/xhtml-im",INACTIVE:"Inactive",CONNECTED:"Connected",ACTIVE:"Active",TERMINATE:"Terminate",LOGIN_FAILURE:"LoginFailure",INVALID_ID:-1,NO_ID:0,error:{BAD_REQUEST:"bad-request",CONFLICT:"conflict",FEATURE_NOT_IMPLEMENTED:"feature-not-implemented",FORBIDDEN:"forbidden",GONE:"gone",INTERNAL_SERVER_ERROR:"internal-server-error",ITEM_NOT_FOUND:"item-not-found",ID_MALFORMED:"jid-malformed",NOT_ACCEPTABLE:"not-acceptable",NOT_ALLOWED:"not-allowed",NOT_AUTHORIZED:"not-authorized",SERVICE_UNAVAILABLE:"service-unavailable",SUBSCRIPTION_REQUIRED:"subscription-required",UNEXPECTED_REQUEST:"unexpected-request"}};
|
||
| 18 | dojox.xmpp.xmppSession=function(_1){ |
||
| 19 | this.roster=[];
|
||
| 20 | this.chatRegister=[];
|
||
| 21 | this._iqId=Math.round(Math.random()*1000000000); |
||
| 22 | if(_1&&dojo.isObject(_1)){
|
||
| 23 | dojo.mixin(this,_1);
|
||
| 24 | } |
||
| 25 | this.session=new dojox.xmpp.TransportSession(_1); |
||
| 26 | dojo.connect(this.session,"onReady",this,"onTransportReady"); |
||
| 27 | dojo.connect(this.session,"onTerminate",this,"onTransportTerminate"); |
||
| 28 | dojo.connect(this.session,"onProcessProtocolResponse",this,"processProtocolResponse"); |
||
| 29 | }; |
||
| 30 | dojo.extend(dojox.xmpp.xmppSession,{roster:[],chatRegister:[],_iqId:0,open:function(_2,_3,_4){
|
||
| 31 | if(!_2){
|
||
| 32 | throw new Error("User id cannot be null"); |
||
| 33 | }else{
|
||
| 34 | this.jid=_2;
|
||
| 35 | if(_2.indexOf("@")==-1){ |
||
| 36 | this.jid=this.jid+"@"+this.domain; |
||
| 37 | } |
||
| 38 | } |
||
| 39 | if(_3){
|
||
| 40 | this.password=_3;
|
||
| 41 | } |
||
| 42 | if(_4){
|
||
| 43 | this.resource=_4;
|
||
| 44 | } |
||
| 45 | this.session.open();
|
||
| 46 | },close:function(){ |
||
| 47 | this.state=dojox.xmpp.xmpp.TERMINATE;
|
||
| 48 | this.session.close(dojox.xmpp.util.createElement("presence",{type:"unavailable",xmlns:dojox.xmpp.xmpp.CLIENT_NS},true)); |
||
| 49 | },processProtocolResponse:function(_5){ |
||
| 50 | var _6=_5.nodeName;
|
||
| 51 | var _7=_6.indexOf(":"); |
||
| 52 | if(_7>0){ |
||
| 53 | _6=_6.substring(_7+1);
|
||
| 54 | } |
||
| 55 | switch(_6){
|
||
| 56 | case "iq": |
||
| 57 | case "presence": |
||
| 58 | case "message": |
||
| 59 | case "features": |
||
| 60 | this[_6+"Handler"](_5); |
||
| 61 | break;
|
||
| 62 | default:
|
||
| 63 | if(_5.getAttribute("xmlns")==dojox.xmpp.xmpp.SASL_NS){ |
||
| 64 | this.saslHandler(_5);
|
||
| 65 | } |
||
| 66 | } |
||
| 67 | },messageHandler:function(_8){ |
||
| 68 | switch(_8.getAttribute("type")){ |
||
| 69 | case "chat": |
||
| 70 | this.chatHandler(_8);
|
||
| 71 | break;
|
||
| 72 | case "normal": |
||
| 73 | default:
|
||
| 74 | this.simpleMessageHandler(_8);
|
||
| 75 | } |
||
| 76 | },iqHandler:function(_9){ |
||
| 77 | if(_9.getAttribute("type")=="set"){ |
||
| 78 | this.iqSetHandler(_9);
|
||
| 79 | return;
|
||
| 80 | }else{
|
||
| 81 | if(_9.getAttribute("type")=="get"){ |
||
| 82 | return;
|
||
| 83 | } |
||
| 84 | } |
||
| 85 | },presenceHandler:function(_a){ |
||
| 86 | switch(_a.getAttribute("type")){ |
||
| 87 | case "subscribe": |
||
| 88 | this.presenceSubscriptionRequest(_a.getAttribute("from")); |
||
| 89 | break;
|
||
| 90 | case "subscribed": |
||
| 91 | case "unsubscribed": |
||
| 92 | break;
|
||
| 93 | case "error": |
||
| 94 | this.processXmppError(_a);
|
||
| 95 | break;
|
||
| 96 | default:
|
||
| 97 | this.presenceUpdate(_a);
|
||
| 98 | break;
|
||
| 99 | } |
||
| 100 | },featuresHandler:function(_b){ |
||
| 101 | var _c=[];
|
||
| 102 | var _d=false; |
||
| 103 | var _e=false; |
||
| 104 | if(_b.hasChildNodes()){
|
||
| 105 | for(var i=0;i<_b.childNodes.length;i++){ |
||
| 106 | var n=_b.childNodes[i];
|
||
| 107 | switch(n.nodeName){
|
||
| 108 | case "mechanisms": |
||
| 109 | for(var x=0;x<n.childNodes.length;x++){ |
||
| 110 | _c.push(n.childNodes[x].firstChild.nodeValue); |
||
| 111 | } |
||
| 112 | break;
|
||
| 113 | case "bind": |
||
| 114 | _d=true;
|
||
| 115 | break;
|
||
| 116 | case "session": |
||
| 117 | _e=true;
|
||
| 118 | } |
||
| 119 | } |
||
| 120 | } |
||
| 121 | if(this.state==dojox.xmpp.xmpp.CONNECTED){ |
||
| 122 | if(!this.auth){ |
||
| 123 | for(var i=0;i<_c.length;i++){ |
||
| 124 | try{
|
||
| 125 | this.auth=dojox.xmpp.sasl.registry.match(_c[i],this); |
||
| 126 | break;
|
||
| 127 | } |
||
| 128 | catch(e){
|
||
| 129 | console.warn("No suitable auth mechanism found for: ",_c[i]);
|
||
| 130 | } |
||
| 131 | } |
||
| 132 | }else{
|
||
| 133 | if(_d){
|
||
| 134 | this.bindResource(_e);
|
||
| 135 | } |
||
| 136 | } |
||
| 137 | } |
||
| 138 | },saslHandler:function(_f){ |
||
| 139 | if(_f.nodeName=="success"){ |
||
| 140 | this.auth.onSuccess();
|
||
| 141 | return;
|
||
| 142 | } |
||
| 143 | if(_f.nodeName=="challenge"){ |
||
| 144 | this.auth.onChallenge(_f);
|
||
| 145 | return;
|
||
| 146 | } |
||
| 147 | if(_f.hasChildNodes()){
|
||
| 148 | this.onLoginFailure(_f.firstChild.nodeName);
|
||
| 149 | this.session.setState("Terminate",_f.firstChild.nodeName); |
||
| 150 | } |
||
| 151 | },sendRestart:function(){ |
||
| 152 | this.session._sendRestart();
|
||
| 153 | },chatHandler:function(msg){ |
||
| 154 | var _10={from:msg.getAttribute("from"),to:msg.getAttribute("to")}; |
||
| 155 | var _11=null; |
||
| 156 | for(var i=0;i<msg.childNodes.length;i++){ |
||
| 157 | var n=msg.childNodes[i];
|
||
| 158 | if(n.hasChildNodes()){
|
||
| 159 | switch(n.nodeName){
|
||
| 160 | case "thread": |
||
| 161 | _10.chatid=n.firstChild.nodeValue; |
||
| 162 | break;
|
||
| 163 | case "body": |
||
| 164 | if(!n.getAttribute("xmlns")||(n.getAttribute("xmlns")=="")){ |
||
| 165 | _10.body=n.firstChild.nodeValue; |
||
| 166 | } |
||
| 167 | break;
|
||
| 168 | case "subject": |
||
| 169 | _10.subject=n.firstChild.nodeValue; |
||
| 170 | case "html": |
||
| 171 | if(n.getAttribute("xmlns")==dojox.xmpp.xmpp.XHTML_IM_NS){ |
||
| 172 | _10.xhtml=n.getElementsByTagName("body")[0]; |
||
| 173 | } |
||
| 174 | break;
|
||
| 175 | case "x": |
||
| 176 | break;
|
||
| 177 | default:
|
||
| 178 | } |
||
| 179 | } |
||
| 180 | } |
||
| 181 | var _12=-1; |
||
| 182 | if(_10.chatid){
|
||
| 183 | for(var i=0;i<this.chatRegister.length;i++){ |
||
| 184 | var ci=this.chatRegister[i]; |
||
| 185 | if(ci&&ci.chatid==_10.chatid){
|
||
| 186 | _12=i; |
||
| 187 | break;
|
||
| 188 | } |
||
| 189 | } |
||
| 190 | }else{
|
||
| 191 | for(var i=0;i<this.chatRegister.length;i++){ |
||
| 192 | var ci=this.chatRegister[i]; |
||
| 193 | if(ci){
|
||
| 194 | if(ci.uid==this.getBareJid(_10.from)){ |
||
| 195 | _12=i; |
||
| 196 | } |
||
| 197 | } |
||
| 198 | } |
||
| 199 | } |
||
| 200 | if(_12>-1&&_11){ |
||
| 201 | var _13=this.chatRegister[_12]; |
||
| 202 | _13.setState(_11); |
||
| 203 | if(_13.firstMessage){
|
||
| 204 | if(_11==dojox.xmpp.chat.ACTIVE_STATE){
|
||
| 205 | _13.useChatState=(_11!=null)?true:false; |
||
| 206 | _13.firstMessage=false;
|
||
| 207 | } |
||
| 208 | } |
||
| 209 | } |
||
| 210 | if((!_10.body||_10.body=="")&&!_10.xhtml){ |
||
| 211 | return;
|
||
| 212 | } |
||
| 213 | if(_12>-1){ |
||
| 214 | var _13=this.chatRegister[_12]; |
||
| 215 | _13.recieveMessage(_10); |
||
| 216 | }else{
|
||
| 217 | var _14=new dojox.xmpp.ChatService(); |
||
| 218 | _14.uid=this.getBareJid(_10.from);
|
||
| 219 | _14.chatid=_10.chatid; |
||
| 220 | _14.firstMessage=true;
|
||
| 221 | if(!_11||_11!=dojox.xmpp.chat.ACTIVE_STATE){
|
||
| 222 | this.useChatState=false; |
||
| 223 | } |
||
| 224 | this.registerChatInstance(_14,_10);
|
||
| 225 | } |
||
| 226 | },simpleMessageHandler:function(msg){ |
||
| 227 | },registerChatInstance:function(_15,_16){ |
||
| 228 | _15.setSession(this);
|
||
| 229 | this.chatRegister.push(_15);
|
||
| 230 | this.onRegisterChatInstance(_15,_16);
|
||
| 231 | _15.recieveMessage(_16,true);
|
||
| 232 | },iqSetHandler:function(msg){ |
||
| 233 | if(msg.hasChildNodes()){
|
||
| 234 | var fn=msg.firstChild;
|
||
| 235 | switch(fn.nodeName){
|
||
| 236 | case "query": |
||
| 237 | if(fn.getAttribute("xmlns")=="jabber:iq:roster"){ |
||
| 238 | this.rosterSetHandler(fn);
|
||
| 239 | this.sendIqResult(msg.getAttribute("id"),msg.getAttribute("from")); |
||
| 240 | } |
||
| 241 | break;
|
||
| 242 | default:
|
||
| 243 | break;
|
||
| 244 | } |
||
| 245 | } |
||
| 246 | },sendIqResult:function(_17,to){ |
||
| 247 | var req={id:_17,to:to||this.domain,type:"result",from:this.jid+"/"+this.resource}; |
||
| 248 | this.dispatchPacket(dojox.xmpp.util.createElement("iq",req,true)); |
||
| 249 | },rosterSetHandler:function(_18){ |
||
| 250 | for(var i=0;i<_18.childNodes.length;i++){ |
||
| 251 | var n=_18.childNodes[i];
|
||
| 252 | if(n.nodeName=="item"){ |
||
| 253 | var _19=false; |
||
| 254 | var _1a=-1; |
||
| 255 | var _1b=null; |
||
| 256 | var _1c=null; |
||
| 257 | for(var x=0;x<this.roster.length;x++){ |
||
| 258 | var r=this.roster[x]; |
||
| 259 | if(n.getAttribute("jid")==r.jid){ |
||
| 260 | _19=true;
|
||
| 261 | if(n.getAttribute("subscription")=="remove"){ |
||
| 262 | _1b={id:r.jid,name:r.name,groups:[]};
|
||
| 263 | for(var y=0;y<r.groups.length;y++){ |
||
| 264 | _1b.groups.push(r.groups[y]); |
||
| 265 | } |
||
| 266 | this.roster.splice(x,1); |
||
| 267 | _1a=dojox.xmpp.roster.REMOVED; |
||
| 268 | }else{
|
||
| 269 | _1c=dojo.clone(r); |
||
| 270 | var _1d=n.getAttribute("name"); |
||
| 271 | if(_1d){
|
||
| 272 | this.roster[x].name=_1d;
|
||
| 273 | } |
||
| 274 | r.groups=[]; |
||
| 275 | if(n.getAttribute("subscription")){ |
||
| 276 | r.status=n.getAttribute("subscription");
|
||
| 277 | } |
||
| 278 | r.substatus=dojox.xmpp.presence.SUBSCRIPTION_SUBSTATUS_NONE; |
||
| 279 | if(n.getAttribute("ask")=="subscribe"){ |
||
| 280 | r.substatus=dojox.xmpp.presence.SUBSCRIPTION_REQUEST_PENDING; |
||
| 281 | } |
||
| 282 | for(var y=0;y<n.childNodes.length;y++){ |
||
| 283 | var _1e=n.childNodes[y];
|
||
| 284 | if((_1e.nodeName=="group")&&(_1e.hasChildNodes())){ |
||
| 285 | var _1f=_1e.firstChild.nodeValue;
|
||
| 286 | r.groups.push(_1f); |
||
| 287 | } |
||
| 288 | } |
||
| 289 | _1b=r; |
||
| 290 | _1a=dojox.xmpp.roster.CHANGED; |
||
| 291 | } |
||
| 292 | break;
|
||
| 293 | } |
||
| 294 | } |
||
| 295 | if(!_19&&(n.getAttribute("subscription")!="remove")){ |
||
| 296 | r=this.createRosterEntry(n);
|
||
| 297 | _1b=r; |
||
| 298 | _1a=dojox.xmpp.roster.ADDED; |
||
| 299 | } |
||
| 300 | switch(_1a){
|
||
| 301 | case dojox.xmpp.roster.ADDED:
|
||
| 302 | this.onRosterAdded(_1b);
|
||
| 303 | break;
|
||
| 304 | case dojox.xmpp.roster.REMOVED:
|
||
| 305 | this.onRosterRemoved(_1b);
|
||
| 306 | break;
|
||
| 307 | case dojox.xmpp.roster.CHANGED:
|
||
| 308 | this.onRosterChanged(_1b,_1c);
|
||
| 309 | break;
|
||
| 310 | } |
||
| 311 | } |
||
| 312 | } |
||
| 313 | },presenceUpdate:function(msg){ |
||
| 314 | if(msg.getAttribute("to")){ |
||
| 315 | var jid=this.getBareJid(msg.getAttribute("to")); |
||
| 316 | if(jid!=this.jid){ |
||
| 317 | return;
|
||
| 318 | } |
||
| 319 | } |
||
| 320 | var _20=this.getResourceFromJid(msg.getAttribute("from")); |
||
| 321 | var p={from:this.getBareJid(msg.getAttribute("from")),resource:_20,show:dojox.xmpp.presence.STATUS_ONLINE,priority:5,hasAvatar:false}; |
||
| 322 | if(msg.getAttribute("type")=="unavailable"){ |
||
| 323 | p.show=dojox.xmpp.presence.STATUS_OFFLINE; |
||
| 324 | } |
||
| 325 | for(var i=0;i<msg.childNodes.length;i++){ |
||
| 326 | var n=msg.childNodes[i];
|
||
| 327 | if(n.hasChildNodes()){
|
||
| 328 | switch(n.nodeName){
|
||
| 329 | case "status": |
||
| 330 | case "show": |
||
| 331 | p[n.nodeName]=n.firstChild.nodeValue; |
||
| 332 | break;
|
||
| 333 | case "status": |
||
| 334 | p.priority=parseInt(n.firstChild.nodeValue); |
||
| 335 | break;
|
||
| 336 | case "x": |
||
| 337 | if(n.firstChild&&n.firstChild.firstChild&&n.firstChild.firstChild.nodeValue!=""){ |
||
| 338 | p.avatarHash=n.firstChild.firstChild.nodeValue; |
||
| 339 | p.hasAvatar=true;
|
||
| 340 | } |
||
| 341 | break;
|
||
| 342 | } |
||
| 343 | } |
||
| 344 | } |
||
| 345 | this.onPresenceUpdate(p);
|
||
| 346 | },retrieveRoster:function(){ |
||
| 347 | var _21={id:this.getNextIqId(),from:this.jid+"/"+this.resource,type:"get"}; |
||
| 348 | var req=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_21,false)); |
||
| 349 | req.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:roster"},true)); |
||
| 350 | req.append("</iq>");
|
||
| 351 | var def=this.dispatchPacket(req,"iq",_21.id); |
||
| 352 | def.addCallback(this,"onRetrieveRoster"); |
||
| 353 | },getRosterIndex:function(jid){ |
||
| 354 | if(jid.indexOf("@")==-1){ |
||
| 355 | jid+="@"+this.domain; |
||
| 356 | } |
||
| 357 | for(var i=0;i<this.roster.length;i++){ |
||
| 358 | if(jid==this.roster[i].jid){ |
||
| 359 | return i;
|
||
| 360 | } |
||
| 361 | } |
||
| 362 | return -1; |
||
| 363 | },createRosterEntry:function(_22){ |
||
| 364 | var re={name:_22.getAttribute("name"),jid:_22.getAttribute("jid"),groups:[],status:dojox.xmpp.presence.SUBSCRIPTION_NONE,substatus:dojox.xmpp.presence.SUBSCRIPTION_SUBSTATUS_NONE}; |
||
| 365 | if(!re.name){
|
||
| 366 | re.name=re.id; |
||
| 367 | } |
||
| 368 | for(var i=0;i<_22.childNodes.length;i++){ |
||
| 369 | var n=_22.childNodes[i];
|
||
| 370 | if(n.nodeName=="group"&&n.hasChildNodes()){ |
||
| 371 | re.groups.push(n.firstChild.nodeValue); |
||
| 372 | } |
||
| 373 | } |
||
| 374 | if(_22.getAttribute("subscription")){ |
||
| 375 | re.status=_22.getAttribute("subscription");
|
||
| 376 | } |
||
| 377 | if(_22.getAttribute("ask")=="subscribe"){ |
||
| 378 | re.substatus=dojox.xmpp.presence.SUBSCRIPTION_REQUEST_PENDING; |
||
| 379 | } |
||
| 380 | return re;
|
||
| 381 | },bindResource:function(_23){ |
||
| 382 | var _24={id:this.getNextIqId(),type:"set"}; |
||
| 383 | var _25=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_24,false)); |
||
| 384 | _25.append(dojox.xmpp.util.createElement("bind",{xmlns:dojox.xmpp.xmpp.BIND_NS},false)); |
||
| 385 | if(this.resource){ |
||
| 386 | _25.append(dojox.xmpp.util.createElement("resource"));
|
||
| 387 | _25.append(this.resource);
|
||
| 388 | _25.append("</resource>");
|
||
| 389 | } |
||
| 390 | _25.append("</bind></iq>");
|
||
| 391 | var def=this.dispatchPacket(_25,"iq",_24.id); |
||
| 392 | def.addCallback(this,function(msg){ |
||
| 393 | this.onBindResource(msg,_23);
|
||
| 394 | return msg;
|
||
| 395 | }); |
||
| 396 | },getNextIqId:function(){ |
||
| 397 | return "im_"+this._iqId++; |
||
| 398 | },presenceSubscriptionRequest:function(msg){ |
||
| 399 | this.onSubscriptionRequest(msg);
|
||
| 400 | },dispatchPacket:function(msg,_26,_27){ |
||
| 401 | if(this.state!="Terminate"){ |
||
| 402 | return this.session.dispatchPacket(msg,_26,_27); |
||
| 403 | }else{
|
||
| 404 | } |
||
| 405 | },setState:function(_28,_29){ |
||
| 406 | if(this.state!=_28){ |
||
| 407 | if(this["on"+_28]){ |
||
| 408 | this["on"+_28](_28,this.state,_29); |
||
| 409 | } |
||
| 410 | this.state=_28;
|
||
| 411 | } |
||
| 412 | },search:function(_2a,_2b,_2c){ |
||
| 413 | var req={id:this.getNextIqId(),"xml:lang":this.lang,type:"set",from:this.jid+"/"+this.resource,to:_2b}; |
||
| 414 | var _2d=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",req,false)); |
||
| 415 | _2d.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:search"},false)); |
||
| 416 | _2d.append(dojox.xmpp.util.createElement(_2c,{},false));
|
||
| 417 | _2d.append(_2a); |
||
| 418 | _2d.append("</").append(_2c).append(">"); |
||
| 419 | _2d.append("</query></iq>");
|
||
| 420 | var def=this.dispatchPacket(_2d.toString,"iq",req.id); |
||
| 421 | def.addCallback(this,"_onSearchResults"); |
||
| 422 | },_onSearchResults:function(msg){ |
||
| 423 | if((msg.getAttribute("type")=="result")&&(msg.hasChildNodes())){ |
||
| 424 | this.onSearchResults([]);
|
||
| 425 | } |
||
| 426 | },onLogin:function(){ |
||
| 427 | this.retrieveRoster();
|
||
| 428 | },onLoginFailure:function(msg){ |
||
| 429 | },onBindResource:function(msg,_2e){ |
||
| 430 | if(msg.getAttribute("type")=="result"){ |
||
| 431 | if((msg.hasChildNodes())&&(msg.firstChild.nodeName=="bind")){ |
||
| 432 | var _2f=msg.firstChild;
|
||
| 433 | if((_2f.hasChildNodes())&&(_2f.firstChild.nodeName=="jid")){ |
||
| 434 | if(_2f.firstChild.hasChildNodes()){
|
||
| 435 | var _30=_2f.firstChild.firstChild.nodeValue;
|
||
| 436 | this.jid=this.getBareJid(_30); |
||
| 437 | this.resource=this.getResourceFromJid(_30); |
||
| 438 | } |
||
| 439 | } |
||
| 440 | if(_2e){
|
||
| 441 | var _31={id:this.getNextIqId(),type:"set"}; |
||
| 442 | var _32=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_31,false)); |
||
| 443 | _32.append(dojox.xmpp.util.createElement("session",{xmlns:dojox.xmpp.xmpp.SESSION_NS},true)); |
||
| 444 | _32.append("</iq>");
|
||
| 445 | var def=this.dispatchPacket(_32,"iq",_31.id); |
||
| 446 | def.addCallback(this,"onBindSession"); |
||
| 447 | return;
|
||
| 448 | } |
||
| 449 | }else{
|
||
| 450 | } |
||
| 451 | this.onLogin();
|
||
| 452 | }else{
|
||
| 453 | if(msg.getAttribute("type")=="error"){ |
||
| 454 | var err=this.processXmppError(msg); |
||
| 455 | this.onLoginFailure(err);
|
||
| 456 | } |
||
| 457 | } |
||
| 458 | },onBindSession:function(msg){ |
||
| 459 | if(msg.getAttribute("type")=="error"){ |
||
| 460 | var err=this.processXmppError(msg); |
||
| 461 | this.onLoginFailure(err);
|
||
| 462 | }else{
|
||
| 463 | this.onLogin();
|
||
| 464 | } |
||
| 465 | },onSearchResults:function(_33){ |
||
| 466 | },onRetrieveRoster:function(msg){ |
||
| 467 | if((msg.getAttribute("type")=="result")&&msg.hasChildNodes()){ |
||
| 468 | var _34=msg.getElementsByTagName("query")[0]; |
||
| 469 | if(_34.getAttribute("xmlns")=="jabber:iq:roster"){ |
||
| 470 | for(var i=0;i<_34.childNodes.length;i++){ |
||
| 471 | if(_34.childNodes[i].nodeName=="item"){ |
||
| 472 | this.roster[i]=this.createRosterEntry(_34.childNodes[i]); |
||
| 473 | } |
||
| 474 | } |
||
| 475 | } |
||
| 476 | }else{
|
||
| 477 | if(msg.getAttribute("type")=="error"){ |
||
| 478 | } |
||
| 479 | } |
||
| 480 | this.setState(dojox.xmpp.xmpp.ACTIVE);
|
||
| 481 | this.onRosterUpdated();
|
||
| 482 | return msg;
|
||
| 483 | },onRosterUpdated:function(){ |
||
| 484 | },onSubscriptionRequest:function(req){ |
||
| 485 | },onPresenceUpdate:function(p){ |
||
| 486 | },onTransportReady:function(){ |
||
| 487 | this.setState(dojox.xmpp.xmpp.CONNECTED);
|
||
| 488 | this.rosterService=new dojox.xmpp.RosterService(this); |
||
| 489 | this.presenceService=new dojox.xmpp.PresenceService(this); |
||
| 490 | this.userService=new dojox.xmpp.UserService(this); |
||
| 491 | },onTransportTerminate:function(_35,_36,_37){ |
||
| 492 | this.setState(dojox.xmpp.xmpp.TERMINATE,_37);
|
||
| 493 | },onConnected:function(){ |
||
| 494 | },onTerminate:function(_38,_39,_3a){ |
||
| 495 | },onActive:function(){ |
||
| 496 | },onRegisterChatInstance:function(_3b,_3c){ |
||
| 497 | },onRosterAdded:function(ri){ |
||
| 498 | },onRosterRemoved:function(ri){ |
||
| 499 | },onRosterChanged:function(ri,_3d){ |
||
| 500 | },processXmppError:function(msg){ |
||
| 501 | var err={stanzaType:msg.nodeName,id:msg.getAttribute("id")}; |
||
| 502 | for(var i=0;i<msg.childNodes.length;i++){ |
||
| 503 | var n=msg.childNodes[i];
|
||
| 504 | switch(n.nodeName){
|
||
| 505 | case "error": |
||
| 506 | err.errorType=n.getAttribute("type");
|
||
| 507 | for(var x=0;x<n.childNodes.length;x++){ |
||
| 508 | var cn=n.childNodes[x];
|
||
| 509 | if((cn.nodeName=="text")&&(cn.getAttribute("xmlns")==dojox.xmpp.xmpp.STANZA_NS)&&cn.hasChildNodes()){ |
||
| 510 | err.message=cn.firstChild.nodeValue; |
||
| 511 | }else{
|
||
| 512 | if((cn.getAttribute("xmlns")==dojox.xmpp.xmpp.STANZA_NS)&&(!cn.hasChildNodes())){ |
||
| 513 | err.condition=cn.nodeName; |
||
| 514 | } |
||
| 515 | } |
||
| 516 | } |
||
| 517 | break;
|
||
| 518 | default:
|
||
| 519 | break;
|
||
| 520 | } |
||
| 521 | } |
||
| 522 | return err;
|
||
| 523 | },sendStanzaError:function(_3e,to,id,_3f,_40,_41){ |
||
| 524 | var req={type:"error"}; |
||
| 525 | if(to){
|
||
| 526 | req.to=to; |
||
| 527 | } |
||
| 528 | if(id){
|
||
| 529 | req.id=id; |
||
| 530 | } |
||
| 531 | var _42=new dojox.string.Builder(dojox.xmpp.util.createElement(_3e,req,false)); |
||
| 532 | _42.append(dojox.xmpp.util.createElement("error",{type:_3f},false)); |
||
| 533 | _42.append(dojox.xmpp.util.createElement("condition",{xmlns:dojox.xmpp.xmpp.STANZA_NS},true)); |
||
| 534 | if(_41){
|
||
| 535 | var _43={xmlns:dojox.xmpp.xmpp.STANZA_NS,"xml:lang":this.lang}; |
||
| 536 | _42.append(dojox.xmpp.util.createElement("text",_43,false)); |
||
| 537 | _42.append(_41).append("</text>");
|
||
| 538 | } |
||
| 539 | _42.append("</error></").append(_3e).append(">"); |
||
| 540 | this.dispatchPacket(_42.toString());
|
||
| 541 | },getBareJid:function(jid){ |
||
| 542 | var i=jid.indexOf("/"); |
||
| 543 | if(i!=-1){ |
||
| 544 | return jid.substring(0,i); |
||
| 545 | } |
||
| 546 | return jid;
|
||
| 547 | },getResourceFromJid:function(jid){ |
||
| 548 | var i=jid.indexOf("/"); |
||
| 549 | if(i!=-1){ |
||
| 550 | return jid.substring((i+1),jid.length); |
||
| 551 | } |
||
| 552 | return ""; |
||
| 553 | }}); |
||
| 554 | } |