1
0
Fork 0

minor changes

* fix typo
* less code duplication
* less `GString` usage
* more `auto_gchar` usage
* document connecting to servers supporting SASL ANONYMOUS
* ignore valgrind output

Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
This commit is contained in:
Steffen Jaeckel 2022-11-14 15:51:05 +01:00
parent b1b6c6f62d
commit e9aaba938b
8 changed files with 49 additions and 76 deletions

3
.gitignore vendored
View File

@ -55,6 +55,9 @@ tests/unittests/unittests.log
tests/unittests/unittests.trs
test-suite.log
# valgrind output
profval*
# local scripts
clean-test.sh
gen_docs.sh

View File

@ -170,15 +170,18 @@ static struct cmd_t command_defs[] = {
CMD_TAG_CONNECTION)
CMD_SYN(
"/connect [<account>]",
"/connect <account> [server <server>] [port <port>] [tls force|allow|trust|legacy|disable] [auth default|legacy]")
"/connect <account> [server <server>] [port <port>] [tls force|allow|trust|legacy|disable] [auth default|legacy]",
"/connect <server>")
CMD_DESC(
"Login to a chat service. "
"If no account is specified, the default is used if one is configured. "
"A local account is created with the JID as it's name if it doesn't already exist.")
"A local account is created with the JID as it's name if it doesn't already exist. "
"In case you want to connect to a server via SASL ANONYMOUS (c.f. XEP-0175) you can also do that.")
CMD_ARGS(
{ "<account>", "The local account you wish to connect with, or a JID if connecting for the first time." },
{ "server <server>", "Supply a server if it is different to the domain part of your JID." },
{ "port <port>", "The port to use if different to the default (5222, or 5223 for SSL)." },
{ "<server>", "Connect to said server in an anonymous way. (Be aware: There aren't many servers that support this.)" },
{ "tls force", "Force TLS connection, and fail if one cannot be established, this is default behaviour." },
{ "tls allow", "Use TLS for the connection if it is available." },
{ "tls trust", "Force TLS connection and trust server's certificate." },
@ -192,7 +195,8 @@ static struct cmd_t command_defs[] = {
"/connect odin@valhalla.edda server talk.google.com",
"/connect freyr@vanaheimr.edda port 5678",
"/connect me@localhost.test.org server 127.0.0.1 tls disable",
"/connect me@chatty server chatty.com port 5443")
"/connect me@chatty server chatty.com port 5443",
"/connect server.supporting.sasl.anonymous.example")
},
{ "/tls",
@ -2013,7 +2017,7 @@ static struct cmd_t command_defs[] = {
{ "rotate on|off", "Rotate log, default on. Does not take effect if you specified a filename yourself when starting Profanity." },
{ "maxsize <bytes>", "With rotate enabled, specifies the max log size, defaults to 10485760 (10MB)." },
{ "shared on|off", "Share logs between all instances, default: on. When off, the process id will be included in the log filename. Does not take effect if you specified a filename yourself when starting Profanity." },
{"level INFO|DEBUG|WARN|EFFOR", "Set the log level. Default is INFO. Only works with default log file, not with user provided log file during startup via -f." })
{"level INFO|DEBUG|WARN|ERROR", "Set the log level. Default is INFO. Only works with default log file, not with user provided log file during startup via -f." })
CMD_NOEXAMPLES
},

View File

@ -120,8 +120,8 @@
static void _update_presence(const resource_presence_t presence,
const char* const show, gchar** args);
static void _cmd_set_boolean_preference(gchar* arg, const char* const command,
const char* const display, preference_t pref);
static gboolean _cmd_set_boolean_preference(gchar* arg, const char* const command,
const char* const display, preference_t pref);
static void _who_room(ProfWin* window, const char* const command, gchar** args);
static void _who_roster(ProfWin* window, const char* const command, gchar** args);
static gboolean _cmd_execute(ProfWin* window, const char* const command, const char* const inp);
@ -6517,9 +6517,8 @@ cmd_log(ProfWin* window, const char* const command, gchar** args)
}
if (strcmp(subcmd, "level") == 0) {
if (g_strcmp0(value, "INFO") == 0 || g_strcmp0(value, "DEBUG") == 0 || g_strcmp0(value, "WARN") == 0 || g_strcmp0(value, "ERROR") == 0) {
log_level_t prof_log_level = log_level_from_string(value);
log_level_t prof_log_level;
if (log_level_from_string(value, &prof_log_level) == 0) {
log_close();
log_init(prof_log_level, NULL);
@ -8580,31 +8579,24 @@ _update_presence(const resource_presence_t resource_presence,
}
// helper function for boolean preference commands
static void
static gboolean
_cmd_set_boolean_preference(gchar* arg, const char* const command,
const char* const display, preference_t pref)
{
if (arg == NULL) {
cons_bad_cmd_usage(command);
} else if (strcmp(arg, "on") == 0) {
GString* enabled = g_string_new(display);
g_string_append(enabled, " enabled.");
cons_show(enabled->str);
return FALSE;
} else if (g_strcmp0(arg, "on") == 0) {
cons_show("%s enabled.", display);
prefs_set_boolean(pref, TRUE);
g_string_free(enabled, TRUE);
} else if (strcmp(arg, "off") == 0) {
GString* disabled = g_string_new(display);
g_string_append(disabled, " disabled.");
cons_show(disabled->str);
} else if (g_strcmp0(arg, "off") == 0) {
cons_show("%s disabled.", display);
prefs_set_boolean(pref, FALSE);
g_string_free(disabled, TRUE);
} else {
cons_bad_cmd_usage(command);
return FALSE;
}
return TRUE;
}
gboolean

View File

@ -233,21 +233,25 @@ log_msg(log_level_t level, const char* const area, const char* const msg)
}
}
log_level_t
log_level_from_string(char* log_level)
int
log_level_from_string(char* log_level, log_level_t* level)
{
int ret = 0;
assert(log_level != NULL);
assert(level != NULL);
if (strcmp(log_level, "DEBUG") == 0) {
return PROF_LEVEL_DEBUG;
*level = PROF_LEVEL_DEBUG;
} else if (strcmp(log_level, "INFO") == 0) {
return PROF_LEVEL_INFO;
*level = PROF_LEVEL_INFO;
} else if (strcmp(log_level, "WARN") == 0) {
return PROF_LEVEL_WARN;
*level = PROF_LEVEL_WARN;
} else if (strcmp(log_level, "ERROR") == 0) {
return PROF_LEVEL_ERROR;
*level = PROF_LEVEL_ERROR;
} else { // default logging is warn
return PROF_LEVEL_WARN;
*level = PROF_LEVEL_WARN;
ret = -1;
}
return ret;
}
const char*

View File

@ -55,7 +55,7 @@ void log_info(const char* const msg, ...);
void log_warning(const char* const msg, ...);
void log_error(const char* const msg, ...);
void log_msg(log_level_t level, const char* const area, const char* const msg);
log_level_t log_level_from_string(char* log_level);
int log_level_from_string(char* log_level, log_level_t* level);
const char* log_string_from_level(log_level_t level);
void log_stderr_init(log_level_t level);

View File

@ -175,7 +175,8 @@ _init(char* log_level, char* config_file, char* log_file, char* theme_name)
pthread_mutex_lock(&lock);
files_create_directories();
log_level_t prof_log_level = log_level_from_string(log_level);
log_level_t prof_log_level;
log_level_from_string(log_level, &prof_log_level);
prefs_load(config_file);
log_init(prof_log_level, log_file);
log_stderr_init(PROF_LEVEL_ERROR);

View File

@ -367,34 +367,20 @@ char*
autocomplete_param_no_with_func(const char* const input, char* command, int arg_number, autocomplete_func func, gboolean previous, void* context)
{
if (strncmp(input, command, strlen(command)) == 0) {
GString* result_str = NULL;
// count tokens properly
int num_tokens = count_tokens(input);
// if correct number of tokens, then candidate for autocompletion of last param
if (num_tokens == arg_number) {
gchar* start_str = get_start(input, arg_number);
gchar* comp_str = g_strdup(&input[strlen(start_str)]);
auto_gchar gchar* start_str = get_start(input, arg_number);
auto_gchar gchar* comp_str = g_strdup(&input[strlen(start_str)]);
// autocomplete param
if (comp_str) {
char* found = func(comp_str, previous, context);
auto_gchar gchar* found = func(comp_str, previous, context);
if (found) {
result_str = g_string_new("");
g_string_append(result_str, start_str);
g_string_append(result_str, found);
free(start_str);
free(comp_str);
char* result = result_str->str;
g_string_free(result_str, FALSE);
return result;
return g_strdup_printf("%s%s", start_str, found);
}
} else {
free(start_str);
}
}
}
@ -418,14 +404,12 @@ autocomplete_remove_older_than_max_reverse(Autocomplete ac, int maxsize)
static gchar*
_search(Autocomplete ac, GList* curr, gboolean quote, search_direction direction)
{
gchar* search_str_ascii = g_str_to_ascii(ac->search_str, NULL);
gchar* search_str_lower = g_ascii_strdown(search_str_ascii, -1);
g_free(search_str_ascii);
auto_gchar gchar* search_str_ascii = g_str_to_ascii(ac->search_str, NULL);
auto_gchar gchar* search_str_lower = g_ascii_strdown(search_str_ascii, -1);
while (curr) {
gchar* curr_ascii = g_str_to_ascii(curr->data, NULL);
gchar* curr_lower = g_ascii_strdown(curr_ascii, -1);
g_free(curr_ascii);
auto_gchar gchar* curr_ascii = g_str_to_ascii(curr->data, NULL);
auto_gchar gchar* curr_lower = g_ascii_strdown(curr_ascii, -1);
// match found
if (strncmp(curr_lower, search_str_lower, strlen(search_str_lower)) == 0) {
@ -435,27 +419,13 @@ _search(Autocomplete ac, GList* curr, gboolean quote, search_direction direction
// if contains space, quote before returning
if (quote && g_strrstr(curr->data, " ")) {
GString* quoted = g_string_new("\"");
g_string_append(quoted, curr->data);
g_string_append(quoted, "\"");
gchar* result = quoted->str;
g_string_free(quoted, FALSE);
g_free(search_str_lower);
g_free(curr_lower);
return result;
return g_strdup_printf("\"%s\"", (gchar*)curr->data);
// otherwise just return the string
} else {
g_free(search_str_lower);
g_free(curr_lower);
return strdup(curr->data);
}
}
g_free(curr_lower);
if (direction == PREVIOUS) {
curr = g_list_previous(curr);
} else {
@ -463,6 +433,5 @@ _search(Autocomplete ac, GList* curr, gboolean quote, search_direction direction
}
}
g_free(search_str_lower);
return NULL;
}

View File

@ -67,10 +67,10 @@ get_log_file_location(void)
return mock_ptr_type(char*);
}
log_level_t
log_level_from_string(char* log_level)
int
log_level_from_string(char* log_level, log_level_t* level)
{
return mock_type(log_level_t);
return mock_type(int);
}
void