zoukankan      html  css  js  c++  java
  • 修改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' ||== '\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"10);
    }


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

      提示:这样修改后,对于正常的IRC客户端软件连接又会带来一定的问题,以致于有些消息不能被正常解析,如mirc等,最好的办法是扩展IRC协议并修改ircd源码,让其能根据不同的客户端类型发送不同的消息格式,随后在我应用到时,我再写文章来详细如何改造。
  • 相关阅读:
    数据库默认隔离级别
    openldap安装
    new word
    ldap概念
    Oracle 计算函数
    informix 学习资料收集
    convert to groovy project
    ldap资料
    hibernate session
    IE BUG相关文章集合
  • 原文地址:https://www.cnblogs.com/taobataoma/p/567373.html
Copyright © 2011-2022 走看看