changeset 900:b41684465283

MUC: join password-protected room
author Mikael Berthe <mikael@lilotux.net>
date Fri, 16 Jun 2006 22:38:49 +0200
parents a833f3d6119a
children 45ddb3ada74f
files mcabber/src/commands.c mcabber/src/jabglue.c mcabber/src/jabglue.h
diffstat 3 files changed, 27 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- 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);