修改ircd源码,以让其适应flash XMLSocket连接

简介:
首先请看flash XMLSocket的原文自述:
每个 XML 消息都是一个完整的 XML 文档,以一个零 (0) 字节结束。

当某个消息已从服务器下载并以零 (0) 字节结束时调用。您可以覆盖 XMLSocket.onData 以截获服务器发送的数据,而不将其分析为 XML。如果您传输的是任意格式的数据包,而且希望在数据到达时直接操纵这些数据,而不让 Flash Player 将数据分析为 XML,则此方法很有用。

默认情况下,XMLSocket.onData 方法调用 XMLSocket.onXML 方法。如果您用自定义行为覆盖 XMLSocket.onData,除非您在 XMLSocket.onData 实现过程中调用 XMLSocket.onXML,否则不会对其进行调用。
  默认情况下,XMLSocket是将数据组织成XML标准格式进行处理的,并且消息以零字节结束。

  但是,unrealircd(包括其它ircd)的消息都是遵循IRC协议以\r\n来尾的,如果ircd不做任何改动的话,XMLSocket是不会收到ircd传递过来的信息,同时XMLSocket发出的命令IRC也不可能正确的进行解析与执行。

  如果你想让unrealircd能与XMLSocket协同工作,请按以下步聚操作:

  一,修改unrealircd源码,让其可以正确解析XMLSocket发出的命令:
    找到源文件packet.c,如下代码片,约在118行左右,并根据提示进行修改:
/*
* Yuck.  Stuck.  To make sure we stay backward compatible,
* we must assume that either CR or LF terminates the message
* and not CR-LF.  By allowing CR or LF (alone) into the body
* of messages, backward compatibility is lost and major
* problems will arise. - Avalon
*/

if  (g  <   ' \16 '   &&  (g == '\0' || g  ==   ' \n '   ||  g  ==   ' \r ' ))   //注意:红色粗体部分是所做的改动
{
    if (ch1 == cptr->buffer)
        continue;    /* Skip extra LF/CR's */
    *ch1 = '\0';
    
}

  
  二,修改unrealircd源码,让其消息可以被XMLSocket正确接收:
    找到socket.c源文件,根据如下提示操作:
    1,约92行左右,找到如下行:
retval  =  send(cptr -> fd, str, len,  0 );
    2,修改为如下代码:
{    
    str[len]
= ' \0 ' ;
    retval 
=  send(cptr -> fd, str, len,  0 );
    send(cptr
-> fd,  " \0 " 1 0 );
}


  然后对其重新编译,现在,你的ircd已经可以支持flash XMLSocket了。你可以写一个flash的测试端来进行测试了,请看我随后的文章里的介绍:用flash测试你的ircd。

  提示:这样修改后,对于正常的IRC客户端软件连接又会带来一定的问题,以致于有些消息不能被正常解析,如mirc等,最好的办法是扩展IRC协议并修改ircd源码,让其能根据不同的客户端类型发送不同的消息格式,随后在我应用到时,我再写文章来详细如何改造。




    本文转自 OldHawk  博客园博客,原文链接:http://www.cnblogs.com/taobataoma/archive/2006/11/21/567373.html,如需转载请自行联系原作者




相关文章
|
6月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
75 0
|
XML 存储 JSON
使用自定义XML配置文件在.NET桌面程序中保存设置
本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。
129 0
|
存储 内存技术
STM32内部flash详解(1)(下)
STM32内部flash详解(1)
|
存储 缓存 关系型数据库
STM32内部flash详解(1)(上)
STM32内部flash详解(1)
|
Python
pygame包打开的图片要默认放在什么地方?
pygame包打开的图片要默认放在什么地方?
464 0
pygame包打开的图片要默认放在什么地方?
|
存储 内存技术
FLASH操作注意事项
FLASH操作注意事项
557 0
FLASH操作注意事项
|
内存技术
【玩转.Net MF – 01】Flash远程读写
目前在PC远程访问设备Flash,也就是部署TinyCLR和下载应用程序
557 0