diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/command/command.c | 13 | ||||
-rw-r--r-- | src/command/commands.c | 21 | ||||
-rw-r--r-- | src/xmpp/message.c | 4 |
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); |