about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/command/command.c13
-rw-r--r--src/command/commands.c21
-rw-r--r--src/xmpp/message.c4
3 files changed, 29 insertions, 9 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 994c1155..ab59e2a0 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -321,20 +321,21 @@ static struct cmd_t command_defs[] =
           NULL } } },
 
     { "/join",
-        cmd_join, parse_args, 1, 5, NULL,
-        { "/join room[@server] [nick value] [password value]", "Join a chat room.",
-        { "/join room[@server] [nick value] [password value]",
-          "-------------------------------------------------",
+        cmd_join, parse_args, 0, 5, NULL,
+        { "/join [room] [nick value] [password value]", "Join a chat room.",
+        { "/join [room] [nick value] [password value]",
+          "-----------------------------------------",
           "Join a chat room at the conference server.",
           "",
-          "room           : Bare room JID, the chat server is determined by the 'muc.service' account property, 'conference.<domainpart>' by default.",
-          "room@server    : Full room JID.",
+          "room           : Bare room JID (the chat server is determined by the 'muc.service' account property) or full room jid."
           "nick value     : Nickname to use in the room",
           "password value : Password if the room requires it.",
           "",
+          "If no room is supplied, a generated name will be used with the format private-chat-[UUID].",
           "If no nickname is specified the account preference 'muc.nick' will be used which by default is the localpart of your JID.",
           "If the room doesn't exist, and the server allows it, a new one will be created.",
           "",
+          "Example: /join",
           "Example: /join jdev@conference.jabber.org",
           "Example: /join jdev@conference.jabber.org nick mynick",
           "Example: /join private@conference.jabber.org nick mynick password mypassword",
diff --git a/src/command/commands.c b/src/command/commands.c
index 1d1b10e3..5cd9c347 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -38,6 +38,7 @@
 #include <stdlib.h>
 #include <errno.h>
 #include <assert.h>
+#include <uuid/uuid.h>
 #include <glib.h>
 
 #include "chat_session.h"
@@ -2081,8 +2082,24 @@ cmd_join(gchar **args, struct cmd_help_t help)
     }
 
     if (args[0] == NULL) {
-        cons_show("Usage: %s", help.usage);
-        cons_show("");
+        uuid_t uuid;
+        uuid_generate(uuid);
+        char *uuid_str = malloc(sizeof(char) * 37);
+        uuid_unparse_lower(uuid, uuid_str);
+
+        char *account_name = jabber_get_account_name();
+        ProfAccount *account = accounts_get_account(account_name);
+
+        GString *room_str = g_string_new("");
+        g_string_append_printf(room_str, "private-chat-%s@%s", uuid_str, account->muc_service);
+
+        presence_join_room(room_str->str, account->muc_nick, NULL);
+        muc_join(room_str->str, account->muc_nick, NULL, FALSE);
+
+        g_string_free(room_str, TRUE);
+        free(uuid_str);
+        account_free(account);
+
         return TRUE;
     }
 
diff --git a/src/xmpp/message.c b/src/xmpp/message.c
index c106517b..9b5419f4 100644
--- a/src/xmpp/message.c
+++ b/src/xmpp/message.c
@@ -372,7 +372,9 @@ _muc_user_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
 
         char *password = NULL;
         xmpp_stanza_t *password_st = xmpp_stanza_get_child_by_name(xns_muc_user, STANZA_NAME_PASSWORD);
-        password = xmpp_stanza_get_text(password_st);
+        if (password_st) {
+            password = xmpp_stanza_get_text(password_st);
+        }
 
         handle_room_invite(INVITE_MEDIATED, invitor, room, reason, password);
         jid_destroy(jidp);