sas             Wed Jan 22 04:13:46 2003 EDT

  Modified files:              (Branch: PHP_4)
    /php4/ext/ircg      ircg.c 
  Log:
  Fix for treating a NAMES list as single join
  
  
Index: php4/ext/ircg/ircg.c
diff -u php4/ext/ircg/ircg.c:1.137.2.1 php4/ext/ircg/ircg.c:1.137.2.1.2.1
--- php4/ext/ircg/ircg.c:1.137.2.1      Tue Dec 31 11:34:47 2002
+++ php4/ext/ircg/ircg.c        Wed Jan 22 04:13:45 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ircg.c,v 1.137.2.1 2002/12/31 16:34:47 sebastian Exp $ */
+/* $Id: ircg.c,v 1.137.2.1.2.1 2003/01/22 09:13:45 sas Exp $ */
 
 /* {{{ includes */
 
@@ -1128,32 +1128,61 @@
        msg_send(conn, &m);
 }
 
-static void user_add(irconn_t *ircc, smart_str *channel, smart_str *users,
-               int nr, void *dummy)
+static void user_add_single(php_irconn_t *conn, smart_str *channel, smart_str *users)
+{
+       smart_str m = {0};
+       FORMAT_MSG(conn, FMT_MSG_JOIN, channel, NULL, &users[0],
+                       NULL, &m, conn->conn.username, conn->conn.username_len);
+       FORMAT_MSG(conn, FMT_MSG_JOIN_LIST_END, channel, NULL, NULL,
+               NULL, &m, conn->conn.username, conn->conn.username_len);
+       msg_send(conn, &m);
+}
+
+static void user_add_multiple(php_irconn_t *conn, smart_str *channel, smart_str 
+*users, int nr)
 {
-       php_irconn_t *conn = dummy;
        int i;
        smart_str m = {0};
 
-       if (nr > 1) {
-               FORMAT_MSG(conn, FMT_MSG_MASS_JOIN_BEGIN, channel, NULL, NULL,
-                               NULL, &m, conn->conn.username, 
conn->conn.username_len);
-               for (i = 0; i < nr; i++) {
-                       FORMAT_MSG(conn, FMT_MSG_MASS_JOIN_ELEMENT, channel, NULL,
-                                       &users[i], NULL, &m, conn->conn.username, 
conn->conn.username_len);
-               }
-       
-               FORMAT_MSG(conn, FMT_MSG_MASS_JOIN_END, channel, NULL, NULL,
-                               NULL, &m, conn->conn.username, 
conn->conn.username_len);
-       } else {
-               FORMAT_MSG(conn, FMT_MSG_JOIN, channel, NULL, &users[0],
-                               NULL, &m, conn->conn.username, 
conn->conn.username_len);
-               FORMAT_MSG(conn, FMT_MSG_JOIN_LIST_END, channel, NULL, NULL,
+       FORMAT_MSG(conn, FMT_MSG_MASS_JOIN_BEGIN, channel, NULL, NULL,
                        NULL, &m, conn->conn.username, conn->conn.username_len);
+       for (i = 0; i < nr; i++) {
+               FORMAT_MSG(conn, FMT_MSG_MASS_JOIN_ELEMENT, channel, NULL,
+                               &users[i], NULL, &m, conn->conn.username, 
+conn->conn.username_len);
        }
+
+       FORMAT_MSG(conn, FMT_MSG_MASS_JOIN_END, channel, NULL, NULL,
+                       NULL, &m, conn->conn.username, conn->conn.username_len);
+
+
        msg_send(conn, &m);
 }
 
+#if IRCG_API_VERSION >= 20021109
+
+static void user_add_ex(irconn_t *ircc, smart_str *channel, smart_str *users,
+               int nr, int namelist, void *dummy)
+{
+       if (namelist) {
+               user_add_multiple(dummy, channel, users, nr);
+       } else {
+               user_add_single(dummy, channel, users);
+       }
+}
+
+#else
+
+static void user_add(irconn_t *ircc, smart_str *channel, smart_str *users,
+               int nr, void *dummy)
+{
+       if (nr > 1) {
+               user_add_multiple(dummy, channel, users, nr);
+       } else {
+               user_add_single(dummy, channel, users);
+       }
+}
+
+#endif
+
 static void new_topic(irconn_t *ircc, smart_str *channel, smart_str *who, smart_str 
*topic, void *dummy)
 {
        php_irconn_t *conn = dummy;
@@ -1388,6 +1417,7 @@
        conn->fd = thttpd_get_fd();
        if (fcntl(conn->fd, F_GETFL) == -1) {
                zend_hash_index_del(&h_irconn, Z_LVAL_PP(p1));
+               php_error(E_WARNING, "current fd is not valid");
                RETURN_FALSE;
        }
        zend_hash_index_update(&h_fd2irconn, conn->fd, &Z_LVAL_PP(p1), sizeof(int), 
NULL);
@@ -1818,7 +1848,6 @@
        IFMSG(FMT_MSG_NICK, IRCG_NICK, nick_handler);
 
        IFMSG(FMT_MSG_SELF_PART, IRCG_PART, part_handler);
-       IFMSG(FMT_MSG_MASS_JOIN_ELEMENT, IRCG_USER_ADD, user_add);
        IFMSG(FMT_MSG_LEAVE, IRCG_USER_LEAVE, user_leave);
        IFMSG(FMT_MSG_KICK, IRCG_USER_KICK, user_kick);
        IFMSG(FMT_MSG_QUIT, IRCG_USER_QUIT, user_quit);
@@ -1849,6 +1878,12 @@
        /* RPL_LIST/RPL_LISTEND */
        irc_register_hook(conn, IRCG_LIST, list_handler);
        irc_register_hook(conn, IRCG_LISTEND, listend_handler);
+#endif
+
+#if IRCG_API_VERSION >= 20021109
+       IFMSG(FMT_MSG_MASS_JOIN_ELEMENT, IRCG_USER_ADD_EX, user_add_ex);
+#else  
+       IFMSG(FMT_MSG_MASS_JOIN_ELEMENT, IRCG_USER_ADD, user_add);
 #endif
        
 }



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to