# HG changeset patch # User Mikael Berthe # Date 1150490329 -7200 # Node ID b416844652838d916024fe9024ac3491298eab9c # Parent a833f3d6119a9ce15801a41d00793bce57897b36 MUC: join password-protected room diff -r a833f3d6119a -r b41684465283 mcabber/src/commands.c --- 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); } } diff -r a833f3d6119a -r b41684465283 mcabber/src/jabglue.c --- 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); diff -r a833f3d6119a -r b41684465283 mcabber/src/jabglue.h --- 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);