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

面對現(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>
            国产精品色婷婷| 亚洲国产一区二区三区青草影视 | 欧美成人自拍| 亚洲日本中文字幕免费在线不卡| 免费亚洲电影| 欧美黑人一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲电影天堂av| 欧美日韩日本国产亚洲在线| 亚洲欧美日韩另类| 欧美在线影院| 亚洲免费成人| 国产亚洲一区二区在线观看| 久久久久久一区二区| 久久综合色婷婷| 亚洲午夜电影| 欧美主播一区二区三区美女 久久精品人| 黄色精品免费| 日韩视频永久免费| 国内精品久久久久久| 亚洲激情影视| 国产美女精品| 亚洲国产精品123| 国产精品羞羞答答| 欧美激情一区二区三级高清视频 | 欧美一区二区三区免费在线看| 狠狠色丁香久久综合频道| 亚洲高清视频一区二区| 国产精品日韩一区| 欧美激情免费在线| 国产区在线观看成人精品| 欧美黑人在线播放| 国产伦精品一区二区三区免费| 欧美成人精品一区二区| 国产精品免费一区豆花| 亚洲激情国产| 狠狠色丁香久久综合频道| 日韩视频精品在线| 在线精品高清中文字幕| 亚洲一卡久久| 亚洲伦理在线观看| 久久免费一区| 久久99伊人| 国产精品久久久久久妇女6080| 牛牛影视久久网| 国产香蕉97碰碰久久人人| 亚洲精品视频二区| 91久久精品一区二区别| 欧美亚洲在线观看| 欧美一区午夜视频在线观看| 欧美激情一区二区久久久| 免费在线观看成人av| 国产伦精品一区二区三区四区免费 | 亚洲人在线视频| 久久精品国产综合精品| 欧美一区二区三区啪啪| 国产精品久久久久久久久果冻传媒| 欧美激情中文字幕乱码免费| 国产在线欧美日韩| 欧美影院一区| 久久精品夜色噜噜亚洲a∨| 国产乱肥老妇国产一区二| 一区二区三区日韩欧美| 亚洲免费在线播放| 国产精品久久久一本精品| 日韩亚洲不卡在线| 亚洲综合电影一区二区三区| 欧美日韩视频在线第一区| 日韩午夜电影av| 亚洲已满18点击进入久久| 国产精品va在线| 亚洲嫩草精品久久| 欧美专区在线观看| 韩国一区二区三区在线观看 | 国产精品乱码久久久久久| 亚洲每日更新| 香蕉成人伊视频在线观看 | 欧美激情亚洲综合一区| 亚洲国产日本| 亚洲无线观看| 国产一区二区高清| 久久九九免费视频| 亚洲精品1234| 午夜一区不卡| 在线日韩中文字幕| 欧美日本不卡视频| 亚洲欧美日韩国产另类专区| 久久亚洲一区二区| 99精品欧美一区| 国产精品自拍三区| 免费亚洲电影在线观看| 亚洲精品在线三区| 久久av在线看| 亚洲老司机av| 国产麻豆日韩| 欧美mv日韩mv国产网站app| 9久re热视频在线精品| 羞羞视频在线观看欧美| 亚洲黄色有码视频| 国产精品美女xx| 麻豆精品视频| 欧美一级久久久| 亚洲精品国产精品乱码不99| 欧美一级视频精品观看| 亚洲欧洲精品天堂一级| 国产精品自拍一区| 欧美大片va欧美在线播放| 亚洲欧美日本另类| 亚洲激情视频网| 久久久久看片| 亚洲欧美一区二区视频| 亚洲欧洲精品一区二区三区| 国产欧美日韩不卡| 欧美女主播在线| 久久综合网hezyo| 亚洲综合成人在线| 日韩视频在线一区| 欧美福利网址| 久热精品视频在线| 欧美专区亚洲专区| 亚洲一区二区在线观看视频| 亚洲人成在线免费观看| 国内久久婷婷综合| 国产精品天美传媒入口| 欧美日韩视频在线| 欧美激情中文字幕一区二区 | 亚洲区一区二| 欧美sm视频| 老司机精品视频网站| 欧美一级网站| 午夜精品国产| 亚洲欧美日本另类| 亚洲一二三区视频在线观看| 日韩视频在线一区二区三区| 亚洲国产欧美一区| 1000部精品久久久久久久久| 韩国精品一区二区三区| 国产日韩精品在线观看| 国产精品青草久久| 国产精品一区在线观看| 国产精品免费观看视频| 国产精品视频精品| 国产欧美日韩激情| 国产精品综合网站| 久久在线免费视频| 老牛影视一区二区三区| 老司机精品视频网站| 免费一级欧美片在线播放| 麻豆精品一区二区av白丝在线| 久久亚洲精品视频| 欧美成人午夜激情在线| 免费久久99精品国产自| 欧美暴力喷水在线| 亚洲国产日韩一区二区| 91久久精品国产91久久| 亚洲免费高清视频| 亚洲已满18点击进入久久| 亚洲欧美日韩综合一区| 久久国产精品久久久久久久久久 | 欧美人成在线视频| 欧美日韩亚洲国产一区| 欧美午夜久久久| 国产区精品视频| 亚洲高清视频一区二区| 亚洲精品三级| 午夜精品久久久久影视| 香蕉久久一区二区不卡无毒影院| 久久国产精品亚洲77777| 牛牛精品成人免费视频| 亚洲精品美女免费| 亚洲欧美三级在线| 欧美大片一区| 国产精品亚洲综合色区韩国| 极品尤物av久久免费看| 一区二区高清在线观看| 欧美在线视频一区二区| 欧美国产精品久久| 亚洲一区三区视频在线观看| 久久免费国产精品1| 欧美日韩中文精品| 影音欧美亚洲| 亚洲一区二区三区国产| 麻豆成人综合网| 一区二区不卡在线视频 午夜欧美不卡在| 性欧美在线看片a免费观看| 欧美激情aaaa| 国内精品模特av私拍在线观看| 99精品99| 女人香蕉久久**毛片精品| 亚洲夜间福利| 欧美电影在线免费观看网站| 国产亚洲欧美日韩一区二区| 99视频精品免费观看| 久久蜜桃香蕉精品一区二区三区| 亚洲老板91色精品久久| 久久久久久电影| 国产欧美日韩中文字幕在线| 亚洲最新视频在线播放| 欧美国产在线视频| 久久精品一本|