青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

面對現(xiàn)實,超越自己
逆水行舟,不進則退
posts - 269,comments - 32,trackbacks - 0

引文:

調(diào)試GLOOX 1.0.10的注冊功能頗費了一些功夫。總體邏輯如GLOOX自帶的例子一樣是毫無疑問的,但是照搬例子又是不能完成注冊的,返回錯誤碼為4------RegistrationBadRequest筆者一開始在網(wǎng)上狂搜解決方案,資料少之又少,有建議重寫Client::handleNormalNode函數(shù)(目的是禁止SASL認證)的,有直接繼承Client重寫Client::handleNormalNode函數(shù)的,但都沒說到點子上。經(jīng)過一段時間的研究,在GLOOX的maillist上得到啟發(fā),順利完成注冊。現(xiàn)將解決方案記錄下來:


環(huán)境

客戶端:GLOOX1.0.1.0 VS2008

服務器:OPENFIRE 默認安裝


對于GLOOX自帶的注冊例子不能正常注冊的問題有人在郵件列表里提出來。一個哥們這樣回答:

Ok, I've found what the problem was 
In openFire server parameters, Anonymous Login => Disabled !!! 

意思是要禁用openFire服務器里的選項”注冊和登錄“的”匿名登錄“項

筆者按此說明禁用該選項,果然注冊成功。

這說明開始的注冊失敗是和匿名登錄有關系的。我們來看一下引用registration_expmple例子登錄失敗時的XML流:

S->C:服務器返回給客戶端支持的認證機制:

<stream:features xmlns:stream='http://etherx.jabber.org/streams'><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism><mechanism>CRAM-MD5</mechanism></mechanisms><compression xmlns='http://jabber.org/features/compress'><method>zlib</method></compression><auth xmlns='http://jabber.org/features/iq-auth'/><register xmlns='http://jabber.org/features/iq-register'/></stream:features> 

 

從上面XML流中我們可以看到,默認openFire支持四種認證機制,分別是:DIGEST-MD5、PLAIN、ANONYMOUS、CRAM-MD5。然后我們看GLOOX客戶端的響應流:

C->S:客戶端返回選擇的認證方式:

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='ANONYMOUS'/>

可以看出,客戶端”無恥“的選擇了”匿名“--
'ANONYMOUS'方式

接下來的流程就是客戶端”無恥“的選擇了以匿名的方式登錄了服務器,然后再發(fā)送注冊請求,請求如下:

<iq id='uid:4e69eccd:00006784' type='set' from='447e0585@zxl/447e0585' xmlns='jabber:client'><query xmlns='jabber:iq:register'><username>bbaxiao</username><password>123456</password><name>test2</name><email>163@gmail.com</email></query></iq> 

我們看到,IQ節(jié)里包含“form”屬性,即客戶端匿名身份標識。

注意,一個客戶端已經(jīng)以一個身份(由服務器臨時分配的一個JID)登錄,建立了會話,在服務器上我們會看到這個會話,并且服務器發(fā)送心跳一直維護這個會話。這種情況下,這個客戶端再發(fā)送注冊請求(另一個身份)建立與服務器的連接是不被允許的。具體請參考XEP-0077(In-Band Registration):我們關注這兩段:

If the entity cancels its registration with its "home" server (i.e., the server at which it has maintained its XMPP account), then the entity SHOULD NOT include a 'from' or 'to' address in the remove request the server SHOULD then return a <not-authorized/> stream error and terminate all active sessions for the entity. The server SHOULD perform the remove based on the bare JID <localpart@domain.tld> associated with the current session or connection over which it received the remove request. If the server is an instant messaging and presence server that conforms to XMPP IM [8], the server SHOULD also cancel all existing presence subscriptions related to that entity (as stored in the entity's roster). 
 
If the entity cancels its registration with a service other than its home server, its home server MUST stamp a 'from' address on the remove request, which in accordance with XMPP Core will be the entity's full JID <localpart@domain.tld/resource>. The service MUST perform the remove based on the bare JID <localpart@domain.tld> portion of the 'from' address. 

If the entity cancels its registration with its "home" server (i.e., the server at which it has maintained its XMPP account), then the entity SHOULD NOT include a 'from' or 'to' address in the remove request the server SHOULD then return a <not-authorized/> stream error and terminate all active sessions for the entity. The server SHOULD perform the remove based on the bare JID <localpart@domain.tld> associated with the current session or connection over which it received the remove request. If the server is an instant messaging and presence server that conforms to XMPP IM [8], the server SHOULD also cancel all existing presence subscriptions related to that entity (as stored in the entity's roster).  
  
If the entity cancels its registration with a service other than its home server, its home server MUST stamp a 'from' address on the remove request, which in accordance with XMPP Core will be the entity's full JID <localpart@domain.tld/resource>. The service MUST perform the remove based on the bare JID <localpart@domain.tld> portion of the 'from' address.  

 

意思是說注冊請求不能包含“from”屬性。

正常的注冊流如下:

<iq id='uid:4e69eccd:00003d6c' type='set' xmlns='jabber:client'><query xmlns='jabber:iq:register'><username>bbaxiao</username><password>123456</password><name>test2</name><email>163@gmail.com</email></query></iq> 

---------------------------

綜上所述,解決方案如下:

一、關閉openFire的匿名登錄功能。^_^……

二、禁止GLOOX匿名認證功能。

file:client.cpp 
 
fun: int Client::getSaslMechs( Tag* tag ) 
 
line:423 
 
//將423行注釋掉即可。 
422:if( tag->hasChildWithCData( mech, "ANONYMOUS" ) ) 
423      //mechs |= SaslMechAnonymous; 

重新編譯生成DLL即可。

三、手動設置GLOOX客戶端SASL認證機制

在調(diào)用j->connect()之前設置SASL認證機制,比如設置為“DIGEST-MD5”


j->setSASLMechanisms(SaslMechDigestMd5);

這種方式的缺點是需要先確定服務器支持的認證機制。

四、根據(jù)XEP-0077所述,即使其名登錄,注冊流只要不帶“from”屬性應該也可以。所以我們要處理發(fā)出的注冊流,去除“from”屬性重新發(fā)送注冊流即可。


本文轉(zhuǎn)自:http://blog.csdn.net/abcpanpeng/article/details/7370974


posted on 2014-08-28 17:59 王海光 閱讀(1563) 評論(0)  編輯 收藏 引用 所屬分類: Openfire&Gloox

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美尤物一区| 免费成人在线视频网站| 久久久久欧美精品| 午夜视频在线观看一区二区三区| 在线中文字幕不卡| 亚洲素人在线| 香蕉久久夜色精品| 欧美va天堂在线| 欧美成人免费全部| 欧美日韩成人在线播放| 国产精品白丝av嫩草影院| 国产伦精品一区二区三区在线观看| 国产欧美日本一区视频| 影音先锋在线一区| 亚洲福利视频二区| 亚洲精品一区中文| 亚洲欧美日韩国产一区二区三区| 一区二区毛片| 久久久综合免费视频| 亚洲国产天堂久久综合| 夜夜嗨一区二区| 欧美中在线观看| 欧美日韩国产一级片| 国产一区自拍视频| 亚洲性线免费观看视频成熟| 久久中文字幕一区二区三区| 亚洲乱码国产乱码精品精98午夜| 欧美在线观看一区二区三区| 欧美日韩视频第一区| 在线成人激情视频| 欧美一级在线视频| 亚洲三级免费| 亚洲愉拍自拍另类高清精品| 国产精品女人久久久久久| 国内精品久久久久久| 99视频在线精品国自产拍免费观看| 午夜久久久久久| 91久久精品美女高潮| 久久精品2019中文字幕| 国产精品成人久久久久| 亚洲精品一二区| 欧美成人激情视频免费观看| 亚洲欧美日韩精品久久亚洲区 | 国产精品午夜电影| 亚洲精品国产拍免费91在线| 亚洲黄色影片| 久久精品视频va| 国产欧美一区二区三区在线老狼 | 亚洲国产另类久久精品| 99www免费人成精品| 久久精品成人| 免费亚洲电影| 亚洲激情视频在线观看| 久久成人精品| 久久精品一二三区| 欧美在线免费观看视频| 国产模特精品视频久久久久 | 久久久综合香蕉尹人综合网| 国产精品一区二区女厕厕| 中日韩午夜理伦电影免费| 9久草视频在线视频精品| 国产精品试看| 久久久亚洲国产美女国产盗摄| 久久九九国产精品| 亚洲人成免费| 亚洲无线视频| 国产又爽又黄的激情精品视频| 亚洲日本成人女熟在线观看| 亚洲高清中文字幕| 亚洲国产精品嫩草影院| 久久久久免费| 曰韩精品一区二区| 欧美国产日韩a欧美在线观看| 久久精品国产免费看久久精品| 国产午夜精品美女视频明星a级| 欧美亚洲自偷自偷| 欧美一区成人| 一区二区在线视频| 欧美国产免费| 欧美日本网站| 欧美亚洲免费| 久久久久99精品国产片| 影音先锋亚洲电影| 亚洲人成毛片在线播放女女| 欧美香蕉视频| 久久综合色8888| 欧美黄色aaaa| 午夜精品区一区二区三| 久久久激情视频| 一道本一区二区| 香蕉视频成人在线观看| 亚洲激情av在线| 亚洲视频在线观看三级| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲精华国产欧美| 国产日韩精品在线| 亚洲国产婷婷香蕉久久久久久99| 欧美午夜精品久久久久久久| 久久九九电影| 欧美日韩国产精品一卡| 久久九九国产精品| 欧美视频网址| 欧美电影在线观看完整版| 国产精品成人在线| 欧美激情一区二区三区高清视频| 欧美色123| 欧美激情国产精品| 国产农村妇女精品一区二区| 亚洲国产精品999| 国产精品久久波多野结衣| 欧美激情91| 国产午夜精品全部视频在线播放| 亚洲精品一二三| 亚洲国产二区| 久久爱www.| 欧美亚洲系列| 欧美精品1区2区3区| 麻豆av福利av久久av| 国产精品久久久久久久app| 欧美成人综合在线| 国产日本欧美在线观看| 日韩午夜三级在线| 亚洲精品在线免费| 久久午夜羞羞影院免费观看| 欧美在线不卡| 欧美色偷偷大香| 亚洲人体一区| 亚洲国产欧美一区二区三区丁香婷| 亚洲淫性视频| 亚洲一区二区在线| 欧美日韩一区二区三区免费| 91久久精品www人人做人人爽| 日韩午夜在线电影| 国产精品国产三级国产 | 久热国产精品| 国产亚洲精品一区二555| 亚洲视频在线观看视频| 99视频精品全部免费在线| 久久精品国产99国产精品| 欧美日韩亚洲视频一区| 亚洲精品极品| 一区二区三区视频观看| 欧美色精品在线视频| 一区二区av在线| 午夜精品久久久久影视| 国产精品日韩欧美一区二区| 亚洲午夜女主播在线直播| 亚洲你懂的在线视频| 国产精品亚洲人在线观看| 亚洲男人av电影| 久久经典综合| 一区二区三区亚洲| 欧美成人一区二区在线| 99视频国产精品免费观看| 亚洲欧美日韩一区二区| 国产视频一区免费看| 久久久国产精品亚洲一区 | 国产一区二区三区在线观看免费视频 | 日韩亚洲欧美成人| 欧美日韩在线亚洲一区蜜芽| 亚洲无人区一区| 久久国产99| 亚洲国产精品成人久久综合一区| 欧美国产日韩精品免费观看| 亚洲视频一区在线| 久久夜色精品国产噜噜av| 亚洲日韩欧美一区二区在线| 欧美午夜精品理论片a级按摩| 亚洲综合精品四区| 能在线观看的日韩av| 狠狠干狠狠久久| 亚洲欧美在线观看| 欧美精品videossex性护士| 国产精品久久久久久久久免费| 在线观看日韩欧美| 亚洲国产高潮在线观看| 一本久道久久综合狠狠爱| 国产精品久久久久999| 久久精品人人做人人爽电影蜜月| 亚洲视频精品| 亚洲第一区在线观看| 亚洲欧美伊人| 日韩亚洲欧美中文三级| 欧美大片在线看| 国产精品看片你懂得| 亚洲免费电影在线| 亚洲一区二区三区四区在线观看 | 欧美顶级艳妇交换群宴| 国产亚洲欧洲997久久综合| 欧美一区二区性| 欧美99在线视频观看| 国产一区二区三区精品欧美日韩一区二区三区 | 性色av一区二区三区在线观看 | 亚洲国产另类 国产精品国产免费| 国产精品欧美日韩| 欧美国产一区二区在线观看| 久久精品视频导航| 亚洲一区二区在线看| 亚洲精选成人| 亚洲国产精品激情在线观看|