ƽʱ��twitter�� ������Ϣ����
ccpaging �:
> �����Openq��������ע�⣬�ҽ�����QQ2009Э��Ŀ������һ������¼��
> 4�������ʲô���⣬����ʱ����ѯ�ʡ�
> =================================
> myqq�����°汾Ϊ3.19�������
> pidgin���°汾Ϊ2.6.5��Դ�����ؼ�
> http://www.pidgin.im/download/source/
> ��Openq������µ�QQ�汾��֧�֣�
> myqq��QQ�汾�ż�qq_def.h
> //#define QQ_VERSION 0x1205 //�?��
> //#define QQ_VERSION 0x115b //�����
> //#define QQ_VERSION 0x1525 //QQ2009Preview4
> #define QQ_VERSION 0x1663 //QQ2009��ʽ��
> Openq��QQ�汾�ż�qq_define.h
> #define QQ_CLIENT_0D55 0x0d55 /* QQ2005 used by openq before */
> #define QQ_CLIENT_111D 0x111D /* QQ2007 */
> #define QQ_CLIENT_115B 0x115B /* QQ2008 He Sui */
> ��ӣ�
> #define QQ_CLIENT_1663 0x1663 /* QQ2009 Release */
> ����
> guint16 client_tag;
> gint client_version;
> ��صij�����Openq������µİ汾֧��
> ��ʱ��ȱʡЭ��Ϊqq2008����qq2009Э����ɺ�����Ժ��ȶ���������ȱʡ
> Э��Ϊqq2009
> 2010-01-11
> ------------------------------------------------------------------------
> ccpaging
好的 关注 平时用twitter吗 发布信息更方便点 ccpaging 写道: > 想参与Openq的朋友请注意,我将尝试把QQ2009协议的开发过程一步步记录下 > 来,大家有什么问题,请随时跟帖询问。 > ================================= > myqq的最新版本为3.19,见附件。 > pidgin最新版本为2.6.5,源码下载见: > http://www.pidgin.im/download/source/ > 在Openq中增加新的QQ版本号支持: > myqq的QQ版本号见qq_def.h > //#define QQ_VERSION 0x1205 //祈福版 > //#define QQ_VERSION 0x115b //贺岁版 > //#define QQ_VERSION 0x1525 //QQ2009Preview4 > #define QQ_VERSION 0x1663 //QQ2009正式版 > Openq的QQ版本号见qq_define.h > #define QQ_CLIENT_0D55 0x0d55 /* QQ2005 used by openq before */ > #define QQ_CLIENT_111D 0x111D /* QQ2007 */ > #define QQ_CLIENT_115B 0x115B /* QQ2008 He Sui */ > 增加: > #define QQ_CLIENT_1663 0x1663 /* QQ2009 Release */ > 修改与 > guint16 client_tag; > gint client_version; > 相关的程序,在Openq中增加新的版本支持 > 暂时修改缺省协议为qq2008,待qq2009协议完成后,如测试后稳定,即设置缺省 > 协议为qq2009 > 2010-01-11 > ------------------------------------------------------------------------ > ccpaging -- Join us: op...@googlegroups.com http://groups.google.com/group/openq
人人API开放得没那么彻底 外围应用没那么多
Administrator 写道:
>> op...@googlegroups.com <mailto:op...@googlegroups.com>
>> http://groups.google.com/group/openq
>>
>
外围应用没那么多
On 1月11日, 下午7时49分, Chunlin Zhang <zhangchun...@gmail.com> wrote:
> 建议协议相关文档可以整理在 google code 的 wiki 页面,这样其他项目参与者也能一起修改。
>
> 2010/1/11 ccpaging <ccpag...@gmail.com>:
2010/1/11 ccpaging <ccpa...@foxmail.com>:
--
Flos
myqq的连接过程我不太熟悉,目标跟Openq一致,那就是连接到QQ服务器,然后开始发送第一个数据包。
myqq的连接过程结束于qqclient.c的qqclient_login函数。
第一个数据包为(在prot_login.c中):
void prot_login_touch( struct qqclient* qq )
{
static uchar zeros[15]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
prot_login_touch_with_info( qq, zeros, sizeof(zeros) );
}
void prot_login_touch_with_info( struct qqclient* qq, uchar*
server_data, uchar len )
{
qqpacket* p = packetmgr_new_send( qq, QQ_CMD_TOUCH );
if( !p ) return;
bytebuffer *buf = p->buf;
restore_version_data( qq );
randkey( p->key );
memcpy( qq->data.server_data, server_data, MIN(len,sizeof(qq-
>data.server_data)) );
put_word( buf, 0x0001 );
put_data( buf, qq->data.locale, sizeof(qq->data.locale) );
put_data( buf, qq->data.version_spec, sizeof(qq-
>data.version_spec) );
put_data( buf, server_data, sizeof(qq->data.server_data) );
post_packet( qq, p, RANDOM_KEY );
}
On 1月14日, 下午3时06分, "ccpaging" <ccpag...@gmail.com> wrote:
> Openq连接服务器的过程
>
> qq_login,定义在qq.c的"PurplePluginProtocolInfo prpl_info"结构中,由pidgin调用。
> qq_login从配置文件中取得各种参数,调用qq_connect_later。
> 现在QQ客户端连接服务器的过程比较复杂,它需要处理以下问题:
> 1、QQ服务器是一组服务器通常有6-9个IP地址,可使用UDP和TCP两种协议。
> 2、通常从服务器组中任选一个连接。
> 如果连接不成功(服务器网络较忙时,这种情况有发生),需要先关闭当前连接,然后再从剩下的IP地址中任选一个重新连接。
> 如果全部都无法连上,通常意味着客户端存在网络问题,需要做其它检查。
> 3、连接到第一个服务器后,会调用connect_cb。
> connect_cb清理了连接过程所产生的数据后,并做好下一步的数据准备工作。
> 调用qq_request_token向服务器申请令牌。
> 这时,客户端才开始正式向服务器发送第一个数据。
>
> qq_login函数在qq.c中。其后调用的qq_connect_later、connect_cb等在qq_network.c中。
> qq_network.c处理了连接、断开连接、重连、网络数据包收发等功能。
>
> 2010-01-14
>
> ccpaging
>
> 发件人: Flos Lonicerae
> 发送时间: 2010-01-13 23:50:34
> 收件人: openq
> 抄送:
> 主题: Re: [OpenQ-dev] Re: 将myqq的最新协议迁移到Openq(开发进行中、、、)
>
> ok.
> 提交了。
> 2010/1/12 ccpaging <ccpag...@gmail.com>:
> openq@googlegroups.comhttp://groups.google.com/group/openq
2010/1/14 ccpaging <ccpa...@foxmail.com>:
何为业务层?
业务层是关于业务流程的一种表现。用来做一些有效性验证的工作,以更好地保证程序运行的健壮性,用于数据填充、修改和查询业务等,尽量保证程序在一个较为稳定的框架里面正常运行。
何为QQ的业务层?
登陆,登出,收发信息等等的协议的基础上对接口数据类型的业务抽象。比如当前QQ实际上用到的一些关键字段,登陆的各类密钥,用户的UID,群的UID,用户资料更新时候的类别,是否存在后续操作等等涉及聊天工具内部对象的抽象。
Openq为什么要引进业务层的概念?或者说引进业务层的区隔对Openq的发展有什么优点和缺点?
举个例子,协议的用户uid类型有改变的话,那么就不得不从各个文件修改uid的数据类型,从guint32改为别的。但把UID代替guint32来定义变量,直观而且方便万一协议修改带来的重复劳动。另外,拿void
qq_request_buddy_memo(PurpleConnection *gc, UID bd_uid, UPDCLS
update_class, guint32
action)为例子,用UID,UPDCLS来替代两个guint32的数据类型,他能够连带让开发者看清楚这个动作涉及的对象是什么,对QQ的请求好友备注这个方法更加容易了解。而且更加容易对从现有的QQ协议中编写出方法的原形。
缺点:需要开发者看看各个类型的typedef是什么。
为何这样修改可以方便对QQ的业务层检查?
我们当前用的很多直接是glib里面的最基础的数据类型,g(u)int8,g(u)int16,g(u)int32,无错这个对于拼凑协议和填充数据是较为方便的。但我觉得如何去真正理解这一大串解密出来的片断的意义以及跟踪协议的改变,会更加有意义。再拿之前的09.02.24的补丁作为例子,当时的update_class的数据类型定义为gint32,但后来发现在获取备注的时候,我们必须keep着好友的uid作为update_class,而update_class无法适应这个新的发展,就导致了数据因为类型不一致而出错。同时也让我知道了update_class这个更新标记应该有更新的含义。倘若当时定义update_class为UPDCLS,配合新分析的协议,只需要在typedef里面对类型进行扩展,解决问题之余还可以保持原有的接口的稳定性。
将来计划怎样修改Openq以实现业务层概念带来的益处?
通过在对协议分析出来的对象加以总结,以分出一个个的类型(type),逐步把协议分析的工作总结为对QQ这一聊天工具的各个对象之间的联系。这样做我希望可以把枯燥的协议分析工作揭开为对他们对象之间的交流。
--
Flos
> ccpaging
>
> qq2009-01.rar
> < 1KViewDownload
> --
> Join us:
> op...@googlegroups.com
> http://groups.google.com/group/openq
--
~~-~~-~~-~~-~~-~~-~~-~~-~~-~~-~~
First the truth, then the freedom!
~~-~~-~~-~~-~~-~~-~~-~~-~~-~~-~~