LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: puzzlebird

月底即将发布 QQ Plugin for Gaim 0.76

[复制链接]
 楼主| 发表于 2004-2-15 21:52:54 | 显示全部楼层
不公开 open source 的主要原因:

因为我们对QQ协议的认识都是用sniffer监听得到的,有一些地方不懂的就采用直接拷贝二进制的方式模拟的。

让我们想想,tencent 如何封 linux 平台上的QQ。如果协议完全公开,那么从windows平台和linux平台上发出的包应该是完全一样的。服务器也无法辨别客户端的操作系统。

如果我是tencent,我要封linux平台的QQ,那么我会下载zoudan的QQ plugin,然后观察数据特点,因为如上所说,linux 下的QQ是模拟的,很多地方的标记为是固定的,那么 tencent 的服务器就可以很方便的针对这些标志位来封包。

这样的话,open source 的linux QQ就特别容易被封,只要tencent 愿意。

所以,在我们完全理解QQ协议以前,完全open source意义不大。为了更好的开发linux下的QQ客户端,我愿意与那些志同道合的朋友共享代码,比如cjack, statue, perloicq... (terms and conditions apply)

:cool:
发表于 2004-2-15 22:12:50 | 显示全部楼层
只要能用就行,不管心源代码
发表于 2004-2-16 06:57:58 | 显示全部楼层
liboicq 協議討論區
http://freebsd.sinica.edu.tw/phpBB2/viewforum.php?f=11

花了幾天的時間, 我弄了一個簡單的 gaimqq 版本, for gaim 0.75, only source code.

FreeBSD 的安裝方式:
# cd /usr/ports/net/gaim
# make configure
# cd work/gaim-0.75/src/protocols
# fetch ftp://freebsd.sinica.edu.tw/pub/ ... e/gaimqq-0.2.tar.gz
# tar zxvf gaim-qq-0.2.tar.gz
# touch * .deps/*
# make install

Linux 的安裝方式:
# cd gaim-0.75/
# ./configure
# cd gaim-0.75/src/protocols
# fetch ftp://freebsd.sinica.edu.tw/pub/ ... e/gaimqq-0.2.tar.gz
# tar zxvf gaim-qq-0.2.tar.gz
# touch * .deps/*
# make install

請注意他會有版本問題, 如果你安裝的是 gaim-0.74, 請用 gaim-0.74 的 src ?戆惭b.

目前已經完成的部份:
20040216 gaimqq-0.2
- add_contact_1
- del_contact
- get_user_info

20040215 gaimqq-0.1
- login
- get_friends_list
- get_online_friends
- recv_friend_status
- keepalive
- send_msg
- recv_msg
- logout
发表于 2004-2-16 07:04:25 | 显示全部楼层
不知道該怎麼跟 puzzlebird 您聯繫, 我目前的進度還是在?做 perloicq 上, 預計在幾天應該可以追上他的進度.

目前遇到的一個問題是, 會重複收到相同的?息, 我不知道該怎麼判斷是否重複的. 然後就繼續寫 add_contact_2 ...^^..

我會以 open source 作為開發的考量是希望有更多的人?戆褵o法解出?淼牟糠, 能夠解譯出?, 另一方面也是因為借用了 perl oicq 作者的許多部分, 您的考量我想是很正常的, 對於 tercent 的作風?在是不敢恭維 ^^...
 楼主| 发表于 2004-2-16 08:44:36 | 显示全部楼层
关于重复消息,我是用hash来判断的。每个消息都有一个sequence number 是 1-65535, 那么相同的seq 就可以认为是重复的。代码如下。

gboolean qq_check_packet_set_window
(uint16 seq, GaimConnection *gc) {
  struct qq_data *qd = gc->proto_data;
  uint8 *byte = &(qd->window[seq/8]);
  uint8 mask = (1 << (seq % 8));

  if ((*byte) & mask) return TRUE; // check mask
  (*byte) |= mask; return FALSE; // set mask
}

另外,找我可以写emial : chenpeng@alumni.nus.edu.sg
发表于 2004-2-17 19:55:14 | 显示全部楼层
绝对支持
发表于 2004-2-18 08:22:36 | 显示全部楼层
支持。如果能策反一个QQ协议的人,只要交出了协议的原来实现就搞定一切了。呵呵。
发表于 2004-2-25 13:46:54 | 显示全部楼层
不是吧,把新加坡也归为中国,不怕被人扁啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表