--- a/mcabber/src/commands.c Sat Jun 10 12:16:09 2006 +0200
+++ b/mcabber/src/commands.c Fri Jun 16 22:38:49 2006 +0200
@@ -1492,12 +1492,17 @@
static void room_join(gpointer bud, char *arg)
{
char **paramlst;
- char *roomname, *nick, *roomname_tmp;
+ char *roomname, *nick, *pass, *roomname_tmp;
char *tmpnick = NULL;
+ char *pass_utf8;
- paramlst = split_arg(arg, 2, 0); // roomid, nickname
+ paramlst = split_arg(arg, 3, 0); // roomid, nickname, password
roomname = *paramlst;
nick = *(paramlst+1);
+ pass = *(paramlst+2);
+
+ if (!nick)
+ pass = NULL;
if (!roomname || !strcmp(roomname, ".")) {
// If the current_buddy is recognized as a room, the room name
@@ -1540,17 +1545,20 @@
return;
}
+ pass_utf8 = to_utf8(pass);
+
roomname_tmp = g_strdup(roomname);
mc_strtolower(roomname_tmp);
roomname = to_utf8(roomname_tmp);
g_free(roomname_tmp);
- jb_room_join(roomname, nick);
+ jb_room_join(roomname, nick, pass_utf8);
scr_LogPrint(LPRINT_LOGNORM, "Sent a join request to <%s>...", roomname);
g_free(roomname);
g_free(tmpnick);
+ g_free(pass_utf8);
buddylist_build();
update_roster = TRUE;
free_arg_lst(paramlst);
@@ -1753,10 +1761,16 @@
else
scr_LogPrint(LPRINT_NORMAL, "You have no nickname in this room.");
} else {
- gchar *cmd;
- cmd = g_strdup_printf("%s %s", buddy_getjid(bud), arg);
- room_join(bud, cmd);
- g_free(cmd);
+ gchar *roomname, *roomname_tmp, *nick;
+ roomname_tmp = g_strdup(buddy_getjid(bud));
+ mc_strtolower(roomname_tmp);
+ roomname = to_utf8(roomname_tmp);
+ g_free(roomname_tmp);
+ nick = to_utf8(arg);
+
+ jb_room_join(roomname, nick, NULL);
+ g_free(roomname);
+ g_free(nick);
}
}
--- a/mcabber/src/jabglue.c Sat Jun 10 12:16:09 2006 +0200
+++ b/mcabber/src/jabglue.c Fri Jun 16 22:38:49 2006 +0200
@@ -605,7 +605,7 @@
}
// Join a MUC room
-void jb_room_join(const char *room, const char *nickname)
+void jb_room_join(const char *room, const char *nickname, const char *passwd)
{
xmlnode x, y;
gchar *roomid;
@@ -640,6 +640,10 @@
x = presnew(mystatus, roomid, mystatusmsg);
y = xmlnode_insert_tag(x, "x");
xmlnode_put_attrib(y, "xmlns", "http://jabber.org/protocol/muc");
+ if (passwd) {
+ xmlnode_insert_cdata(xmlnode_insert_tag(y, "password"), passwd,
+ (unsigned) -1);
+ }
jab_send(jc, x);
xmlnode_free(x);
--- a/mcabber/src/jabglue.h Sat Jun 10 12:16:09 2006 +0200
+++ b/mcabber/src/jabglue.h Fri Jun 16 22:38:49 2006 +0200
@@ -55,7 +55,7 @@
void jb_keepalive();
inline void jb_reset_keepalive();
void jb_set_keepalive_delay(unsigned int delay);
-void jb_room_join(const char *room, const char *nickname);
+void jb_room_join(const char *room, const char *nickname, const char *passwd);
void jb_room_unlock(const char *room);
void jb_room_destroy(const char *room, const char *venue, const char *reason);
void jb_room_invite(const char *room, const char *jid, const char *reason);