src/protocols/silc/silc.c

changeset 12216
d80739091a63
parent 12167
f3ad3170f09d
child 12217
ea610d8ab584
--- a/src/protocols/silc/silc.c	Thu Nov 24 20:38:24 2005 +0000
+++ b/src/protocols/silc/silc.c	Thu Nov 24 20:47:46 2005 +0000
@@ -1062,38 +1062,45 @@
 }
 
 static int
-silcgaim_send_im(GaimConnection *gc, const char *who, const char *msg,
-		 GaimConvImFlags flags)
+silcgaim_send_im(GaimConnection *gc, const char *who, const char *message,
+		 GaimMessageFlags flags)
 {
 	SilcGaim sg = gc->proto_data;
 	SilcClient client = sg->client;
 	SilcClientConnection conn = sg->conn;
 	SilcClientEntry *clients;
 	SilcUInt32 clients_count, mflags;
-	char *nickname;
+	char *nickname, *msg, *tmp;
 	int ret;
 	gboolean sign = gaim_account_get_bool(sg->account, "sign-verify", FALSE);
 
-	if (!who || !msg)
+	if (!who || !message)
 		return 0;
 
 	mflags = SILC_MESSAGE_FLAG_UTF8;
 
+	tmp = msg = gaim_unescape_html(message);
+
 	if (!g_ascii_strncasecmp(msg, "/me ", 4)) {
 		msg += 4;
-		if (!msg)
+		if (!*msg) {
+			g_free(tmp);
 			return 0;
+		}
 		mflags |= SILC_MESSAGE_FLAG_ACTION;
 	} else if (strlen(msg) > 1 && msg[0] == '/') {
 		if (!silc_client_command_call(client, conn, msg + 1))
 			gaim_notify_error(gc, ("Call Command"), _("Cannot call command"),
 					_("Unknown command"));
+		g_free(tmp);
 		return 0;
 	}
 
 
-	if (!silc_parse_userfqdn(who, &nickname, NULL))
+	if (!silc_parse_userfqdn(who, &nickname, NULL)) {
+		g_free(tmp);
 		return 0;
+	}
 
 	if (sign)
 		mflags |= SILC_MESSAGE_FLAG_SIGNED;
@@ -1104,8 +1111,10 @@
 	if (!clients) {
 		/* Resolve unknown user */
 		SilcGaimIM im = silc_calloc(1, sizeof(*im));
-		if (!im)
+		if (!im) {
+			g_free(tmp);
 			return 0;
+		}
 		im->nick = g_strdup(who);
 		im->message = g_strdup(msg);
 		im->message_len = strlen(im->message);
@@ -1113,6 +1122,7 @@
 		silc_client_get_clients(client, conn, nickname, NULL,
 					silcgaim_send_im_resolved, im);
 		silc_free(nickname);
+		g_free(tmp);
 		return 0;
 	}
 
@@ -1121,6 +1131,7 @@
 					       mflags, (unsigned char *)msg,
 					       strlen(msg), TRUE);
 
+	g_free(tmp);
 	silc_free(nickname);
 	silc_free(clients);
 	return ret;

mercurial