Add random string at the end of the default resource

When connecting for the first time or when creating a new account don't
use only 'profanity' as default resource.

Some server don't support having 2 connection with same resource. Using
profanity as default lead to deconnections.
This commit is contained in:
Paul Fariello
2019-04-12 11:46:01 +02:00
parent 0dfe61c01c
commit 9714d1d867
4 changed files with 27 additions and 3 deletions

View File

@@ -194,3 +194,22 @@ jid_fulljid_or_barejid(Jid *jid)
return jid->barejid;
}
}
char*
jid_random_resource(void)
{
GRand *prng;
char rand[5];
char alphabet[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
prng = g_rand_new();
int i;
for (i = 0; i < 4; i++) {
rand[i] = alphabet[g_rand_int_range(prng, 0, sizeof(alphabet))];
}
rand[4] = '\0';
g_rand_free(prng);
return g_strdup_printf("profanity.%s", rand);
}

View File

@@ -57,5 +57,6 @@ char* create_fulljid(const char *const barejid, const char *const resource);
char* get_nick_from_full_jid(const char *const full_room_jid);
char* jid_fulljid_or_barejid(Jid *jid);
char* jid_random_resource(void);
#endif

View File

@@ -173,7 +173,9 @@ session_connect_with_details(const char *const jid, const char *const passwd, co
Jid *jidp = jid_create(jid);
if (jidp->resourcepart == NULL) {
jid_destroy(jidp);
jidp = jid_create_from_bare_and_resource(jid, "profanity");
char *resource = jid_random_resource();
jidp = jid_create_from_bare_and_resource(jid, resource);
free(resource);
saved_details.jid = strdup(jidp->fulljid);
} else {
saved_details.jid = strdup(jid);