sas             Wed Aug 13 14:53:43 2003 EDT

  Modified files:              (Branch: PHP_4_3)
    /php-src/ext/ircg   ircg.c 
  Log:
  Fix CTCP handling so that commands without parameters are processed
  
  Use %ld for time_t's
  
  Provide a warning when irc_connect fails
  
  
Index: php-src/ext/ircg/ircg.c
diff -u php-src/ext/ircg/ircg.c:1.137.2.15 php-src/ext/ircg/ircg.c:1.137.2.16
--- php-src/ext/ircg/ircg.c:1.137.2.15  Tue Jul  8 00:25:40 2003
+++ php-src/ext/ircg/ircg.c     Wed Aug 13 14:53:42 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ircg.c,v 1.137.2.15 2003/07/08 04:25:40 sas Exp $ */
+/* $Id: ircg.c,v 1.137.2.16 2003/08/13 18:53:42 sas Exp $ */
 
 /* {{{ includes */
 
@@ -867,35 +867,42 @@
 static void handle_ctcp(php_irconn_t *conn, smart_str *chan, smart_str *from,
                smart_str *msg, smart_str *result, smart_str *recipient)
 {
+       char *token;
        char *token_end;
-       char *real_msg;
-       char *real_msg_end;
-
-       for (token_end = msg->c + 1; *token_end; token_end++)
-               if (!isalpha(*token_end)) break;
+       char *ctcp_arg;
+       char *ctcp_arg_end;
+       format_msg_t *fmt_msg;
+       smart_str tmp = {0};
+       int status = 0;
 
-       if (*token_end != '\001') {
-               real_msg = token_end + 1;
+       token = msg->c + 1;
+       token_end = strchr(token, 1);
 
-               real_msg_end = strchr(real_msg, '\001');
-               if (real_msg_end) {
-                       format_msg_t *fmt_msg;
-                       smart_str tmp;
-                       int status = 0;
-                       
-                       *real_msg_end = '\0';
-                       *token_end = '\0';
-                       
-                       if (zend_hash_find(&conn->ctcp_msgs, msg->c + 1, token_end - 
msg->c - 1, (void **) &fmt_msg) != SUCCESS) {
-                               return;
-                       }
+       if (!token_end) return;
 
-                       smart_str_setl(&tmp, real_msg, real_msg_end - real_msg);
-                       format_msg(fmt_msg, chan, recipient, from, &tmp, result, 
conn->conn.username, conn->conn.username_len, &status);
+       *token_end = 0;
+       
+       ctcp_arg = strchr(token, ' ');
+       
+       if (ctcp_arg) {
+               ctcp_arg_end = token_end;
+               token_end = ctcp_arg;
+               *token_end = 0;
+               ctcp_arg++;
+               smart_str_setl(&tmp, ctcp_arg, ctcp_arg_end - ctcp_arg);
+       }
+       
+       if (zend_hash_find(&conn->ctcp_msgs, token, token_end - token, 
+                               (void **) &fmt_msg) != SUCCESS) {
+                       return;
+       }
+               
+       format_msg(fmt_msg, chan, recipient, from, &tmp, result, 
+                       conn->conn.username, conn->conn.username_len, &status);
 
-                       if (status == 1)
-                               irc_disconnect(&conn->conn, "Connection terminated by 
authenticated CTCP message");
-               }
+       if (status == 1) {
+               irc_disconnect(&conn->conn, "Connection terminated by "
+                               "authenticated CTCP message");
        }
 }
        
@@ -1390,7 +1397,7 @@
        else if (conn->file_fd < 0 && (ircg_now() - conn->login) > WINDOW_TIMEOUT) {
                char buf[1024];
 
-               sprintf(buf, "timeout after %d seconds (%d, %d)", 
ircg_now()-conn->login,
+               sprintf(buf, "timeout after %ld seconds (%ld, %ld)", 
ircg_now()-conn->login,
                                ircg_now(), conn->login);
                irc_disconnect(ircc, buf);
        }
@@ -2314,6 +2321,7 @@
        if (irc_connect(username, register_hooks, 
                        conn, server, port, &conn->conn)) {
                free(conn);
+               php_error(E_WARNING, "%s(): irc_connect() failed prematurely", 
get_active_function_name(TSRMLS_C));
                RETURN_FALSE;
        }
        irc_connects++;



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

Reply via email to