sas             Wed Nov 13 18:01:42 2002 EDT

  Modified files:              
    /php4/ext/ircg      ircg.c 
  Log:
  always use the mass_join formats, when the server is sending a namelist
  
  always use the single join format, when the server is sending a JOIN
  
  combining both was originally seen as more convenient, but proved
  to be difficult when developing frontends.
  
  
Index: php4/ext/ircg/ircg.c
diff -u php4/ext/ircg/ircg.c:1.137 php4/ext/ircg/ircg.c:1.138
--- php4/ext/ircg/ircg.c:1.137  Thu Oct 17 06:40:17 2002
+++ php4/ext/ircg/ircg.c        Wed Nov 13 18:01:42 2002
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ircg.c,v 1.137 2002/10/17 10:40:17 sas Exp $ */
+/* $Id: ircg.c,v 1.138 2002/11/13 23:01:42 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;
@@ -1386,10 +1415,14 @@
        thttpd_register_on_close(http_closed_connection);
        thttpd_set_dont_close();
        conn->fd = thttpd_get_fd();
+       printf("conn->fd is %d\n", conn->fd);
+       fflush(stdout);
        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;
        }
+       ADD_HEADER("Connection: close");
        zend_hash_index_update(&h_fd2irconn, conn->fd, &Z_LVAL_PP(p1), sizeof(int), 
NULL);
        if (conn->file_fd == -1) {
                flush_data = conn;
@@ -1818,7 +1851,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 +1881,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