2011年2月13日星期日

Miranda上GTalk的隐身问题

用Miranda上GTalk有挺长一段日子了,隐身的功能一直有问题。虽然GTalk上的朋友没有很烦人的那种,所以对这个功能需求并不强烈,不过每每想起还是有一点疙瘩在。前些天乱逛的时候看到一些相关资料,这几天零零碎碎又作了一些尝试,算是知道这是怎么一回事了吧…

Jabber/XMPP关于隐身的规范有三个,分别是:

按照规范文本的说法,XEP-0018已被拒绝,而XEP-0186又被推迟,目前只有XEP-0126是受XMPP委员会认可的规范。然而不知道出于什么原因,GTalk三个规范都没有采用,而是自己定义了一个google:shared-status的扩充规范来实现这个功能。

(evil不evil的,有人提到GTalk之所以不支持XEP-0126,是因为GTalk不支持XEP-0126的基础规范XEP-0016: Privacy Lists。至于GTalk为啥不支持XEP-0016,嗯,不知道。)

就结果来看,Jabber社区对Google的这个决定挺排斥的。各种流行的Jabber客户端,如Pidgin、Miranda、Psi等等都没有提供Google Shared Status的官方支持。可不管怎么说Google的影响力都是摆在那里的,所以有人给Pidgin写了Gtalk Shared Status的插件,Psi Plus也支持Google Shared Status。Miranda嘛,bug列表上有而已…

我倒是有试了试为Miranda添加Google Shared Status支持,结果嘛,能用,不过也就是这样而已了。因为我对Jabber/XMPP可以说是一无所知,而Miranda的Jabber插件要整个看一遍也会非常花时间,所以代码都是直接冲着隐身这个目标去的。这么dirty的dirty hack提交给官方肯定不会被采纳,就丢在这里好了。要是有人拿去用遇到什么问题可以留言,能改我都会改。

Update 2011-09-18:

官方似乎对加入GSS支持兴趣不大,而且嫌我的补丁写得太脏,可要我去通读一遍插件代码好好的再弄个补丁出来,我也没那个精气神和闲工夫,所以事情就僵在这里了。好在Miranda的更新虽然频繁,可多是小修小补,我的补丁至今仍然能用。以后我还会不定期更新的,但肯定没法做到跟官方同步。如果有更新强迫症的同学,可下载补丁自行编译,Miranda很好编,连VC6都可以过。

http://www.box.net/shared/gqt36iedxi4n7bkzk1q7

Update 2012-02-18:

其实早在v0.9.34的changelog里就有一句:“Jabber: GTalk improvements with status modes”,不过下载回来试了试发现还是有问题,就一直懒得管。今天又想起这一茬,于是把SVN里的代码翻出来看了看,原来基本上就是我提交的那个补丁嘛。只不过我的代码被修改了一部分,虽然显得不那么脏了,可也导致了补丁工作不正常。于是又写了个补丁提交上去,结果嘛,还是以前那样。

添加进正式版里的一部分代码工作不正常,并且有办法让代码至少先跑起来,却还是不愿意做,有点搞不懂这些人是怎么想的。

新的补丁很简单,打开jabber_util.cpp,将第894行由:

if (!m_bGoogleSharedStatus) p << XATTR( _T("type"), _T("invisible"));

改为:

if (!m_bGoogleTalk) p << XATTR( _T("type"), _T("invisible"));

之前编译的插件放上来一年多了,都没人下载过,这次我也懒得放了,万一有人需要的话,自己编一下吧。