sas Mon Jul 7 21:16:59 2003 EDT Modified files: (Branch: PHP_4_3) /php-src/ext/ircg ircg.c Log: Enable HTML-encoding for all IRC data Encode all channel names in the default format messages Index: php-src/ext/ircg/ircg.c diff -u php-src/ext/ircg/ircg.c:1.137.2.13 php-src/ext/ircg/ircg.c:1.137.2.14 --- php-src/ext/ircg/ircg.c:1.137.2.13 Mon Jul 7 11:33:08 2003 +++ php-src/ext/ircg/ircg.c Mon Jul 7 21:16:59 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg.c,v 1.137.2.13 2003/07/07 15:33:08 sas Exp $ */ +/* $Id: ircg.c,v 1.137.2.14 2003/07/08 01:16:59 sas Exp $ */ /* {{{ includes */ @@ -229,8 +229,8 @@ P_JS = 1, P_NICKNAME = 2, P_NICKNAME_JS = 3, - P_MIRC = 4, - P_MIRC_JS = 5, + P_HTML = 4, + P_HTML_JS = 5, P_NOAUTO_LINKS = 8, /* Don't automatically convert links */ P_CONV_BR = 16, /* Convert a special character to <br> */ P_COND_STOP = 32, /* If argument != username, stop */ @@ -251,39 +251,39 @@ /* {{{ Default format messages */ static char *fmt_msgs_default[] = { - "[EMAIL PROTECTED]: %m<br />", + "[EMAIL PROTECTED]: %m<br />", "%f: %m<br />", "To %t: %m<br />", - "%f leaves %c<br />", - "%f joins %c<br />", - "%t was kicked by %f from %c (%m)<br />", - "%f changes topic on %c to %m<br />", + "%f leaves %6c<br />", + "%f joins %6c<br />", + "%t was kicked by %f from %6c (%m)<br />", + "%f changes topic on %6c to %m<br />", "Error: %m<br />", "Fatal Error: %m<br />", "", "", "%f changes nick to %t<br />", "%f quits (%m)<br />", - "Welcome to channel %c:", + "Welcome to channel %6c:", " %f", - " are in the channel %c<br />", + " are in the channel %6c<br />", "%f: user(%t) host(%c) real name(%m)<br />", "%f: server(%c) server info(%m)<br />", "%f has been idle for %m seconds<br />", - "%f is on channel %c<br />", + "%f is on channel %6c<br />", "End of whois for %f<br />", - "%f sets voice flag of %t to %m on %c<br />", - "%f sets channel operator flag of %t to %m on %c<br />", - "banned from %c: %m<br />", - "end of ban list for %c<br />", + "%f sets voice flag of %t to %m on %6c<br />", + "%f sets channel operator flag of %t to %m on %6c<br />", + "banned from %6c: %m<br />", + "end of ban list for %6c<br />", "You have been disconnected<br />", - "Channel %c has %t users and the topic is '%m'<br />", + "Channel %6c has %t users and the topic is '%m'<br />", "End of LIST<br />", "Nickname %t has ident %f, realname '%m', hostname %c, ", "is on server %t, has flag %f, hopcount %m, and channel %c.<br />", - "end of who<br />", - "%f is inviting %t to %c<br />", - "[notice %c] %f: %m<br />", + "End of WHO<br />", + "%f has invited %t to %6c<br />", + "[notice %6c] %f: %m<br />", "notice from %f: %m<br />", "notice to %t: %m<br />", "%t users, %f services, %r servers<br />", @@ -620,6 +620,7 @@ case '3': mode |= P_NOAUTO_LINKS; goto next; case '4': mode |= P_CONV_BR; goto next; case '5': mode |= P_COND_STOP; goto next; + case '6': mode |= P_HTML; goto next; /* associate mode bits with each command where applicable */ case 'c': NEW_TOKEN(C_CHANNEL, v) = mode; break; @@ -627,8 +628,8 @@ case 't': NEW_TOKEN(C_TO, v) = mode; break; case 'f': NEW_TOKEN(C_FROM, v) = mode; break; case 'r': NEW_TOKEN(C_MESSAGE, v) = mode; break; - case 'm': NEW_TOKEN(C_MESSAGE, v) = mode | P_MIRC; break; - case 'j': NEW_TOKEN(C_MESSAGE, v) = mode | P_MIRC | P_JS; break; + case 'm': NEW_TOKEN(C_MESSAGE, v) = mode | P_HTML; break; + case 'j': NEW_TOKEN(C_MESSAGE, v) = mode | P_HTML | P_JS; break; case '%': NEW_TOKEN(C_PERCENT, v) = 0; break; @@ -650,15 +651,14 @@ smart_str *to, smart_str *from, smart_str *msg, smart_str *result, const char *username, int username_len, int *status) { - smart_str encoded_msg = {0}; - int encoded = 0; int i = 0; const token_t *t = fmt_msg->t; int ntoken = fmt_msg->ntoken; + smart_str tmp = {0}; exec_fmt_msgs++; -#define IRCG_APPEND(what) \ +#define IRCG_APPEND(what, use_cache) \ if (t[i].para.v & P_COND_STOP) { \ if (username_len != what->len || memcmp(what->c, username, username_len) != 0) \ goto stop; \ @@ -685,37 +685,45 @@ if (!what) break; \ smart_str_append_ex(result, what, 1); \ break; \ - case P_MIRC_JS: \ + case P_HTML_JS: \ if (!what) break; \ - if (!encoded) { \ + if (use_cache) { \ ircg_mirc_color_cache(msg, \ - &encoded_msg, channel, \ + &tmp, channel, \ + !(t[i].para.v & P_NOAUTO_LINKS), \ + t[i].para.v & P_CONV_BR); \ + } else { \ + ircg_mirc_color(what->c, &tmp, \ + what->len, \ !(t[i].para.v & P_NOAUTO_LINKS), \ t[i].para.v & P_CONV_BR); \ - encoded = 1; \ } \ - ircg_js_escape(&encoded_msg, result); \ + ircg_js_escape(&tmp, result); \ + smart_str_free(&tmp); \ break; \ - case P_MIRC: \ + case P_HTML: \ if (!what) break; \ - if (!encoded) { \ + if (use_cache) { \ ircg_mirc_color_cache(msg, \ - &encoded_msg, channel, \ + result, channel, \ + !(t[i].para.v & P_NOAUTO_LINKS), \ + t[i].para.v & P_CONV_BR); \ + } else { \ + ircg_mirc_color(what->c, result, \ + what->len, \ !(t[i].para.v & P_NOAUTO_LINKS), \ t[i].para.v & P_CONV_BR); \ - encoded = 1; \ } \ - smart_str_append_ex(result, &encoded_msg, 1); \ break; \ } for (; ntoken-- > 0; i++) { switch (t[i].code) { case C_STRING: smart_str_append_ex(result, t[i].para.ptr, 1); break; - case C_FROM: IRCG_APPEND(from); break; - case C_TO: IRCG_APPEND(to); break; - case C_CHANNEL: IRCG_APPEND(channel); break; - case C_MESSAGE: IRCG_APPEND(msg); break; + case C_FROM: IRCG_APPEND(from, 0); break; + case C_TO: IRCG_APPEND(to, 0); break; + case C_CHANNEL: IRCG_APPEND(channel, 0); break; + case C_MESSAGE: IRCG_APPEND(msg, 1); break; case C_PERCENT: smart_str_appendc_ex(result, '%', 1); break; case C_TERMINATE_1: /* auth by username */ if (ntoken > 0 && t[i+1].code == C_STRING) { @@ -728,8 +736,6 @@ } stop: - if (encoded) - smart_str_free_ex(&encoded_msg, 1); if (result->c) smart_str_0(result);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php