Cleaned up all list iterations, added macro named LIST_FOREACH.
Previously you would have to do something like this: for (type foo = (type) list_get_first(list); foo; foo = (type) list_get_next(list) { /* code */ } Now, you can instead write this as: LIST_FOREACH(type, foo, list, { /* code */ }) Basically, boilerplate stuff including the casting is gone.
This commit is contained in:
parent
50e720861e
commit
b81bb2cbd9
@ -283,23 +283,19 @@ struct adc_message* adc_msg_copy(const struct adc_message* cmd)
|
|||||||
if (cmd->feature_cast_include)
|
if (cmd->feature_cast_include)
|
||||||
{
|
{
|
||||||
copy->feature_cast_include = list_create();
|
copy->feature_cast_include = list_create();
|
||||||
tmp = list_get_first(cmd->feature_cast_include);
|
LIST_FOREACH(char*, tmp, cmd->feature_cast_include,
|
||||||
while (tmp)
|
|
||||||
{
|
{
|
||||||
list_append(copy->feature_cast_include, hub_strdup(tmp));
|
list_append(copy->feature_cast_include, hub_strdup(tmp));
|
||||||
tmp = list_get_next(cmd->feature_cast_include);
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd->feature_cast_exclude)
|
if (cmd->feature_cast_exclude)
|
||||||
{
|
{
|
||||||
copy->feature_cast_exclude = list_create();
|
copy->feature_cast_exclude = list_create();
|
||||||
tmp = list_get_first(cmd->feature_cast_exclude);
|
LIST_FOREACH(char*, tmp, cmd->feature_cast_exclude,
|
||||||
while (tmp)
|
|
||||||
{
|
{
|
||||||
list_append(copy->feature_cast_exclude, hub_strdup(tmp));
|
list_append(copy->feature_cast_exclude, hub_strdup(tmp));
|
||||||
tmp = list_get_next(cmd->feature_cast_exclude);
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ADC_MSG_ASSERT(copy);
|
ADC_MSG_ASSERT(copy);
|
||||||
|
@ -330,13 +330,11 @@ struct auth_info* acl_get_access_info(struct hub_info* hub, const char* name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define STR_LIST_CONTAINS(LIST, STR) \
|
#define STR_LIST_CONTAINS(LIST, STR) \
|
||||||
str = (char*) list_get_first(LIST); \
|
LIST_FOREACH(char*, str, LIST, \
|
||||||
while (str) \
|
|
||||||
{ \
|
{ \
|
||||||
if (strcasecmp(str, STR) == 0) \
|
if (strcasecmp(str, STR) == 0) \
|
||||||
return 1; \
|
return 1; \
|
||||||
str = (char*) list_get_next(LIST); \
|
}); \
|
||||||
} \
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
int acl_is_cid_banned(struct acl_handle* handle, const char* data)
|
int acl_is_cid_banned(struct acl_handle* handle, const char* data)
|
||||||
@ -400,34 +398,28 @@ int acl_user_unban_cid(struct acl_handle* handle, const char* cid)
|
|||||||
int acl_is_ip_banned(struct acl_handle* handle, const char* ip_address)
|
int acl_is_ip_banned(struct acl_handle* handle, const char* ip_address)
|
||||||
{
|
{
|
||||||
struct ip_addr_encap raw;
|
struct ip_addr_encap raw;
|
||||||
struct ip_range* info = (struct ip_range*) list_get_first(handle->networks);
|
struct ip_range* info;
|
||||||
|
|
||||||
ip_convert_to_binary(ip_address, &raw);
|
ip_convert_to_binary(ip_address, &raw);
|
||||||
|
LIST_FOREACH(struct ip_range*, info, handle->networks,
|
||||||
while (info)
|
|
||||||
{
|
{
|
||||||
if (ip_in_range(&raw, info))
|
if (ip_in_range(&raw, info))
|
||||||
{
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
});
|
||||||
info = (struct ip_range*) list_get_next(handle->networks);
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int acl_is_ip_nat_override(struct acl_handle* handle, const char* ip_address)
|
int acl_is_ip_nat_override(struct acl_handle* handle, const char* ip_address)
|
||||||
{
|
{
|
||||||
struct ip_addr_encap raw;
|
struct ip_addr_encap raw;
|
||||||
struct ip_range* info = (struct ip_range*) list_get_first(handle->nat_override);
|
struct ip_range* info;
|
||||||
|
|
||||||
ip_convert_to_binary(ip_address, &raw);
|
ip_convert_to_binary(ip_address, &raw);
|
||||||
|
LIST_FOREACH(struct ip_range*, info, handle->nat_override,
|
||||||
while (info)
|
|
||||||
{
|
{
|
||||||
if (ip_in_range(&raw, info))
|
if (ip_in_range(&raw, info))
|
||||||
{
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
});
|
||||||
info = (struct ip_range*) list_get_next(handle->nat_override);
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* uhub - A tiny ADC p2p connection hub
|
* uhub - A tiny ADC p2p connection hub
|
||||||
* Copyright (C) 2007-2012, Jan Vidar Krey
|
* Copyright (C) 2007-2013, Jan Vidar Krey
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -26,7 +26,7 @@ static void hub_command_args_free(struct hub_command* cmd)
|
|||||||
if (!cmd->args)
|
if (!cmd->args)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (data = (struct hub_command_arg_data*) list_get_first(cmd->args); data; data = (struct hub_command_arg_data*) list_get_next(cmd->args))
|
LIST_FOREACH(struct hub_command_arg_data*, data, cmd->args,
|
||||||
{
|
{
|
||||||
switch (data->type)
|
switch (data->type)
|
||||||
{
|
{
|
||||||
@ -39,7 +39,7 @@ static void hub_command_args_free(struct hub_command* cmd)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
list_clear(cmd->args, hub_free);
|
list_clear(cmd->args, hub_free);
|
||||||
list_destroy(cmd->args);
|
list_destroy(cmd->args);
|
||||||
@ -77,8 +77,7 @@ static enum command_parse_status command_extract_arguments(struct hub_info* hub,
|
|||||||
if (greedy)
|
if (greedy)
|
||||||
{
|
{
|
||||||
size = 1;
|
size = 1;
|
||||||
for (tmp = (char*) list_get_first(tokens); tmp; tmp = (char*) list_get_next(tokens))
|
LIST_FOREACH(char*, tmp, tokens, { size += (strlen(tmp) + 1); });
|
||||||
size += (strlen(tmp) + 1);
|
|
||||||
token = hub_malloc_zero(size);
|
token = hub_malloc_zero(size);
|
||||||
|
|
||||||
while ((tmp = list_get_first(tokens)))
|
while ((tmp = list_get_first(tokens)))
|
||||||
|
@ -98,14 +98,14 @@ struct command_handle* command_handler_lookup(struct command_base* cbase, const
|
|||||||
struct command_handle* handler = NULL;
|
struct command_handle* handler = NULL;
|
||||||
size_t prefix_len = strlen(prefix);
|
size_t prefix_len = strlen(prefix);
|
||||||
|
|
||||||
for (handler = (struct command_handle*) list_get_first(cbase->handlers); handler; handler = (struct command_handle*) list_get_next(cbase->handlers))
|
LIST_FOREACH(struct command_handle*, handler, cbase->handlers,
|
||||||
{
|
{
|
||||||
if (prefix_len != handler->length)
|
if (prefix_len != handler->length)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!memcmp(prefix, handler->prefix, handler->length))
|
if (!memcmp(prefix, handler->prefix, handler->length))
|
||||||
return handler;
|
return handler;
|
||||||
}
|
});
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,7 +292,7 @@ static int command_help(struct command_base* cbase, struct hub_user* user, struc
|
|||||||
{
|
{
|
||||||
cbuf_append(buf, "Available commands:\n");
|
cbuf_append(buf, "Available commands:\n");
|
||||||
|
|
||||||
for (command = (struct command_handle*) list_get_first(cbase->handlers); command; command = (struct command_handle*) list_get_next(cbase->handlers))
|
LIST_FOREACH(struct command_handle*, command, cbase->handlers,
|
||||||
{
|
{
|
||||||
if (command_is_available(command, user->credentials))
|
if (command_is_available(command, user->credentials))
|
||||||
{
|
{
|
||||||
@ -301,7 +301,7 @@ static int command_help(struct command_base* cbase, struct hub_user* user, struc
|
|||||||
cbuf_append(buf, " ");
|
cbuf_append(buf, " ");
|
||||||
cbuf_append_format(buf, " - %s\n", command->description);
|
cbuf_append_format(buf, " - %s\n", command->description);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -432,12 +432,10 @@ static int command_whoip(struct command_base* cbase, struct hub_user* user, stru
|
|||||||
buf = cbuf_create(128 + ((MAX_NICK_LEN + INET6_ADDRSTRLEN + 5) * ret));
|
buf = cbuf_create(128 + ((MAX_NICK_LEN + INET6_ADDRSTRLEN + 5) * ret));
|
||||||
cbuf_append_format(buf, "*** %s: Found %d match%s:\n", cmd->prefix, ret, ((ret != 1) ? "es" : ""));
|
cbuf_append_format(buf, "*** %s: Found %d match%s:\n", cmd->prefix, ret, ((ret != 1) ? "es" : ""));
|
||||||
|
|
||||||
u = (struct hub_user*) list_get_first(users);
|
LIST_FOREACH(struct hub_user*, u, users,
|
||||||
while (u)
|
|
||||||
{
|
{
|
||||||
cbuf_append_format(buf, "%s (%s)\n", u->id.nick, user_get_address(u));
|
cbuf_append_format(buf, "%s (%s)\n", u->id.nick, user_get_address(u));
|
||||||
u = (struct hub_user*) list_get_next(users);
|
});
|
||||||
}
|
|
||||||
cbuf_append(buf, "\n");
|
cbuf_append(buf, "\n");
|
||||||
|
|
||||||
send_message(cbase, user, buf);
|
send_message(cbase, user, buf);
|
||||||
@ -462,8 +460,7 @@ static int command_broadcast(struct command_base* cbase, struct hub_user* user,
|
|||||||
memcpy(from_sid, sid_to_string(user->id.sid), sizeof(from_sid));
|
memcpy(from_sid, sid_to_string(user->id.sid), sizeof(from_sid));
|
||||||
memcpy(pm_flag + 2, from_sid, sizeof(from_sid));
|
memcpy(pm_flag + 2, from_sid, sizeof(from_sid));
|
||||||
|
|
||||||
target = (struct hub_user*) list_get_first(cbase->hub->users->list);
|
LIST_FOREACH(struct hub_user*, target, cbase->hub->users->list,
|
||||||
while (target)
|
|
||||||
{
|
{
|
||||||
if (target != user)
|
if (target != user)
|
||||||
{
|
{
|
||||||
@ -480,8 +477,7 @@ static int command_broadcast(struct command_base* cbase, struct hub_user* user,
|
|||||||
route_to_user(cbase->hub, target, command);
|
route_to_user(cbase->hub, target, command);
|
||||||
adc_msg_free(command);
|
adc_msg_free(command);
|
||||||
}
|
}
|
||||||
target = (struct hub_user*) list_get_next(cbase->hub->users->list);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
cbuf_append_format(buf, "*** %s: Delivered to " PRINTF_SIZE_T " user%s", cmd->prefix, recipients, (recipients != 1 ? "s" : ""));
|
cbuf_append_format(buf, "*** %s: Delivered to " PRINTF_SIZE_T " user%s", cmd->prefix, recipients, (recipients != 1 ? "s" : ""));
|
||||||
send_message(cbase, user, buf);
|
send_message(cbase, user, buf);
|
||||||
@ -513,8 +509,7 @@ static int command_log(struct command_base* cbase, struct hub_user* user, struct
|
|||||||
command_status(cbase, user, cmd, buf);
|
command_status(cbase, user, cmd, buf);
|
||||||
|
|
||||||
buf = cbuf_create(MAX_HELP_LINE);
|
buf = cbuf_create(MAX_HELP_LINE);
|
||||||
log = (struct hub_logout_info*) list_get_first(messages);
|
LIST_FOREACH(struct hub_logout_info*, log, messages,
|
||||||
while (log)
|
|
||||||
{
|
{
|
||||||
const char* address = ip_convert_to_string(&log->addr);
|
const char* address = ip_convert_to_string(&log->addr);
|
||||||
int show = 0;
|
int show = 0;
|
||||||
@ -538,8 +533,7 @@ static int command_log(struct command_base* cbase, struct hub_user* user, struct
|
|||||||
send_message(cbase, user, buf);
|
send_message(cbase, user, buf);
|
||||||
buf = cbuf_create(MAX_HELP_LINE);
|
buf = cbuf_create(MAX_HELP_LINE);
|
||||||
}
|
}
|
||||||
log = (struct hub_logout_info*) list_get_next(messages);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (search_len)
|
if (search_len)
|
||||||
{
|
{
|
||||||
|
@ -76,16 +76,14 @@ int event_queue_process(struct event_queue* queue)
|
|||||||
|
|
||||||
/* lock primary queue, and handle the primary queue messages. */
|
/* lock primary queue, and handle the primary queue messages. */
|
||||||
queue->locked = 1;
|
queue->locked = 1;
|
||||||
|
|
||||||
data = (struct event_data*) list_get_first(queue->q1);
|
LIST_FOREACH(struct event_data*, data, queue->q1,
|
||||||
while (data)
|
|
||||||
{
|
{
|
||||||
#ifdef EQ_DEBUG
|
#ifdef EQ_DEBUG
|
||||||
eq_debug("EXEC", data);
|
eq_debug("EXEC", data);
|
||||||
#endif
|
#endif
|
||||||
queue->callback(queue->callback_data, data);
|
queue->callback(queue->callback_data, data);
|
||||||
data = (struct event_data*) list_get_next(queue->q1);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
list_clear(queue->q1, event_queue_cleanup_callback);
|
list_clear(queue->q1, event_queue_cleanup_callback);
|
||||||
uhub_assert(list_size(queue->q1) == 0);
|
uhub_assert(list_size(queue->q1) == 0);
|
||||||
|
@ -40,14 +40,11 @@ static int plugin_command_dispatch(struct command_base* cbase, struct hub_user*
|
|||||||
|
|
||||||
LOG_PLUGIN("plugin_command_dispatch: cmd=%s", cmd->prefix);
|
LOG_PLUGIN("plugin_command_dispatch: cmd=%s", cmd->prefix);
|
||||||
|
|
||||||
cmdh = (struct plugin_command_handle*) list_get_first(data->commands);
|
LIST_FOREACH(struct plugin_command_handle*, cmdh, data->commands,
|
||||||
while (cmdh)
|
|
||||||
{
|
{
|
||||||
if (strcmp(cmdh->prefix, cmd->prefix) == 0)
|
if (strcmp(cmdh->prefix, cmd->prefix) == 0)
|
||||||
return cmdh->handler(plugin, puser, pcommand);
|
return cmdh->handler(plugin, puser, pcommand);
|
||||||
|
});
|
||||||
cmdh = (struct plugin_command_handle*) list_get_next(data->commands);
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,13 +27,12 @@
|
|||||||
PLUGIN_DEBUG(HUB, # FUNCNAME) \
|
PLUGIN_DEBUG(HUB, # FUNCNAME) \
|
||||||
if (HUB->plugins && HUB->plugins->loaded) \
|
if (HUB->plugins && HUB->plugins->loaded) \
|
||||||
{ \
|
{ \
|
||||||
struct plugin_handle* plugin = (struct plugin_handle*) list_get_first(HUB->plugins->loaded); \
|
struct plugin_handle* plugin;\
|
||||||
while (plugin) \
|
LIST_FOREACH(struct plugin_handle*, plugin, HUB->plugins->loaded, \
|
||||||
{ \
|
{ \
|
||||||
if (plugin->funcs.FUNCNAME) \
|
if (plugin->funcs.FUNCNAME) \
|
||||||
CODE \
|
CODE \
|
||||||
plugin = (struct plugin_handle*) list_get_next(HUB->plugins->loaded); \
|
}); \
|
||||||
} \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PLUGIN_INVOKE_STATUS_1(HUB, FUNCNAME, ARG1) \
|
#define PLUGIN_INVOKE_STATUS_1(HUB, FUNCNAME, ARG1) \
|
||||||
|
@ -139,12 +139,11 @@ int route_flush_pipeline(struct hub_info* hub, struct hub_user* u)
|
|||||||
|
|
||||||
int route_to_all(struct hub_info* hub, struct adc_message* command) /* iterate users */
|
int route_to_all(struct hub_info* hub, struct adc_message* command) /* iterate users */
|
||||||
{
|
{
|
||||||
struct hub_user* user = (struct hub_user*) list_get_first(hub->users->list);
|
struct hub_user* user;
|
||||||
while (user)
|
LIST_FOREACH(struct hub_user*, user, hub->users->list,
|
||||||
{
|
{
|
||||||
route_to_user(hub, user, command);
|
route_to_user(hub, user, command);
|
||||||
user = (struct hub_user*) list_get_next(hub->users->list);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -154,47 +153,38 @@ int route_to_subscribers(struct hub_info* hub, struct adc_message* command) /* i
|
|||||||
int do_send;
|
int do_send;
|
||||||
char* tmp;
|
char* tmp;
|
||||||
|
|
||||||
struct hub_user* user = (struct hub_user*) list_get_first(hub->users->list);
|
struct hub_user* user;
|
||||||
while (user)
|
LIST_FOREACH(struct hub_user*, user, hub->users->list,
|
||||||
{
|
{
|
||||||
if (user->feature_cast)
|
if (user->feature_cast)
|
||||||
{
|
{
|
||||||
do_send = 1;
|
do_send = 1;
|
||||||
|
|
||||||
tmp = list_get_first(command->feature_cast_include);
|
LIST_FOREACH(char*, tmp, command->feature_cast_include,
|
||||||
while (tmp)
|
|
||||||
{
|
{
|
||||||
if (!user_have_feature_cast_support(user, tmp))
|
if (!user_have_feature_cast_support(user, tmp))
|
||||||
{
|
{
|
||||||
do_send = 0;
|
do_send = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tmp = list_get_next(command->feature_cast_include);;
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (!do_send) {
|
if (!do_send)
|
||||||
user = (struct hub_user*) list_get_next(hub->users->list);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
tmp = list_get_first(command->feature_cast_exclude);
|
LIST_FOREACH(char*, tmp, command->feature_cast_exclude,
|
||||||
while (tmp)
|
|
||||||
{
|
{
|
||||||
if (user_have_feature_cast_support(user, tmp))
|
if (user_have_feature_cast_support(user, tmp))
|
||||||
{
|
{
|
||||||
do_send = 0;
|
do_send = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tmp = list_get_next(command->feature_cast_exclude);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (do_send)
|
if (do_send)
|
||||||
{
|
|
||||||
route_to_user(hub, user, command);
|
route_to_user(hub, user, command);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
user = (struct hub_user*) list_get_next(hub->users->list);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -213,17 +203,14 @@ int route_info_message(struct hub_info* hub, struct hub_user* u)
|
|||||||
|
|
||||||
adc_msg_remove_named_argument(cmd, ADC_INF_FLAG_IPV4_ADDR);
|
adc_msg_remove_named_argument(cmd, ADC_INF_FLAG_IPV4_ADDR);
|
||||||
adc_msg_add_named_argument(cmd, ADC_INF_FLAG_IPV4_ADDR, address);
|
adc_msg_add_named_argument(cmd, ADC_INF_FLAG_IPV4_ADDR, address);
|
||||||
|
|
||||||
user = (struct hub_user*) list_get_first(hub->users->list);
|
LIST_FOREACH(struct hub_user*, user, hub->users->list,
|
||||||
while (user)
|
|
||||||
{
|
{
|
||||||
if (user_is_nat_override(user))
|
if (user_is_nat_override(user))
|
||||||
route_to_user(hub, user, cmd);
|
route_to_user(hub, user, cmd);
|
||||||
else
|
else
|
||||||
route_to_user(hub, user, u->info);
|
route_to_user(hub, user, u->info);
|
||||||
|
});
|
||||||
user = (struct hub_user*) list_get_next(hub->users->list);
|
|
||||||
}
|
|
||||||
adc_msg_free(cmd);
|
adc_msg_free(cmd);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -232,15 +232,12 @@ void user_support_remove(struct hub_user* user, int fourcc)
|
|||||||
|
|
||||||
int user_have_feature_cast_support(struct hub_user* user, char feature[4])
|
int user_have_feature_cast_support(struct hub_user* user, char feature[4])
|
||||||
{
|
{
|
||||||
char* tmp = list_get_first(user->feature_cast);
|
char* tmp;
|
||||||
while (tmp)
|
LIST_FOREACH(char*, tmp, user->feature_cast,
|
||||||
{
|
{
|
||||||
if (strncmp(tmp, feature, 4) == 0)
|
if (strncmp(tmp, feature, 4) == 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
});
|
||||||
tmp = list_get_next(user->feature_cast);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ static void clear_user_list_callback(void* ptr)
|
|||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
struct hub_user* u = (struct hub_user*) ptr;
|
struct hub_user* u = (struct hub_user*) ptr;
|
||||||
|
|
||||||
/* Mark the user as already being disconnected.
|
/* Mark the user as already being disconnected.
|
||||||
* This prevents the hub from trying to send
|
* This prevents the hub from trying to send
|
||||||
* quit messages to other users.
|
* quit messages to other users.
|
||||||
@ -120,42 +120,39 @@ struct hub_user* uman_get_user_by_sid(struct hub_user_manager* users, sid_t sid)
|
|||||||
|
|
||||||
struct hub_user* uman_get_user_by_cid(struct hub_user_manager* users, const char* cid)
|
struct hub_user* uman_get_user_by_cid(struct hub_user_manager* users, const char* cid)
|
||||||
{
|
{
|
||||||
struct hub_user* user = (struct hub_user*) list_get_first(users->list); /* iterate users - only on incoming INF msg */
|
struct hub_user* user;
|
||||||
while (user)
|
LIST_FOREACH(struct hub_user*, user, users->list,
|
||||||
{
|
{
|
||||||
if (strcmp(user->id.cid, cid) == 0)
|
if (strcmp(user->id.cid, cid) == 0)
|
||||||
return user;
|
return user;
|
||||||
user = (struct hub_user*) list_get_next(users->list);
|
});
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct hub_user* uman_get_user_by_nick(struct hub_user_manager* users, const char* nick)
|
struct hub_user* uman_get_user_by_nick(struct hub_user_manager* users, const char* nick)
|
||||||
{
|
{
|
||||||
struct hub_user* user = (struct hub_user*) list_get_first(users->list); /* iterate users - only on incoming INF msg */
|
struct hub_user* user;
|
||||||
while (user)
|
LIST_FOREACH(struct hub_user*, user, users->list,
|
||||||
{
|
{
|
||||||
if (strcmp(user->id.nick, nick) == 0)
|
if (strcmp(user->id.nick, nick) == 0)
|
||||||
return user;
|
return user;
|
||||||
user = (struct hub_user*) list_get_next(users->list);
|
});
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t uman_get_user_by_addr(struct hub_user_manager* users, struct linked_list* target, struct ip_range* range)
|
size_t uman_get_user_by_addr(struct hub_user_manager* users, struct linked_list* target, struct ip_range* range)
|
||||||
{
|
{
|
||||||
size_t num = 0;
|
size_t num = 0;
|
||||||
struct hub_user* user = (struct hub_user*) list_get_first(users->list); /* iterate users - only on incoming INF msg */
|
struct hub_user* user;
|
||||||
while (user)
|
LIST_FOREACH(struct hub_user*, user, users->list,
|
||||||
{
|
{
|
||||||
if (ip_in_range(&user->id.addr, range))
|
if (ip_in_range(&user->id.addr, range))
|
||||||
{
|
{
|
||||||
list_append(target, user);
|
list_append(target, user);
|
||||||
num++;
|
num++;
|
||||||
}
|
}
|
||||||
user = (struct hub_user*) list_get_next(users->list);
|
});
|
||||||
}
|
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,8 +161,8 @@ int uman_send_user_list(struct hub_info* hub, struct hub_user_manager* users, st
|
|||||||
int ret = 1;
|
int ret = 1;
|
||||||
struct hub_user* user;
|
struct hub_user* user;
|
||||||
user_flag_set(target, flag_user_list);
|
user_flag_set(target, flag_user_list);
|
||||||
user = (struct hub_user*) list_get_first(users->list); /* iterate users - only on INF or PAS msg */
|
|
||||||
while (user)
|
LIST_FOREACH(struct hub_user*, user, users->list,
|
||||||
{
|
{
|
||||||
if (user_is_logged_in(user))
|
if (user_is_logged_in(user))
|
||||||
{
|
{
|
||||||
@ -173,8 +170,7 @@ int uman_send_user_list(struct hub_info* hub, struct hub_user_manager* users, st
|
|||||||
if (!ret)
|
if (!ret)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
user = (struct hub_user*) list_get_next(users->list);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
FIXME: FIXME FIXME handle send queue excess
|
FIXME: FIXME FIXME handle send queue excess
|
||||||
|
@ -120,7 +120,7 @@ void net_dns_process()
|
|||||||
uhub_mutex_lock(&g_dns->mutex);
|
uhub_mutex_lock(&g_dns->mutex);
|
||||||
LOG_DUMP("net_dns_process(): jobs=%d, results=%d", (int) list_size(g_dns->jobs), (int) list_size(g_dns->results));
|
LOG_DUMP("net_dns_process(): jobs=%d, results=%d", (int) list_size(g_dns->jobs), (int) list_size(g_dns->results));
|
||||||
|
|
||||||
for (result = (struct net_dns_result*) list_get_first(g_dns->results); result; result = (struct net_dns_result*) list_get_next(g_dns->results))
|
LIST_FOREACH(struct net_dns_result*, result, g_dns->results,
|
||||||
{
|
{
|
||||||
struct net_dns_job* job = result->job;
|
struct net_dns_job* job = result->job;
|
||||||
#ifdef DEBUG_LOOKUP_TIME
|
#ifdef DEBUG_LOOKUP_TIME
|
||||||
@ -146,7 +146,7 @@ void net_dns_process()
|
|||||||
result->job = NULL;
|
result->job = NULL;
|
||||||
free_job(job);
|
free_job(job);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
list_clear(g_dns->results, &dummy_free);
|
list_clear(g_dns->results, &dummy_free);
|
||||||
uhub_mutex_unlock(&g_dns->mutex);
|
uhub_mutex_unlock(&g_dns->mutex);
|
||||||
@ -273,14 +273,14 @@ extern struct net_dns_job* net_dns_gethostbyaddr(struct ip_addr_encap* ipaddr, n
|
|||||||
static struct net_dns_job* find_and_remove_job(struct net_dns_job* job)
|
static struct net_dns_job* find_and_remove_job(struct net_dns_job* job)
|
||||||
{
|
{
|
||||||
struct net_dns_job* it;
|
struct net_dns_job* it;
|
||||||
for (it = (struct net_dns_job*) list_get_first(g_dns->jobs); it; it = (struct net_dns_job*) list_get_next(g_dns->jobs))
|
LIST_FOREACH(struct net_dns_job*, it, g_dns->jobs,
|
||||||
{
|
{
|
||||||
if (it == job)
|
if (it == job)
|
||||||
{
|
{
|
||||||
list_remove(g_dns->jobs, it);
|
list_remove(g_dns->jobs, it);
|
||||||
return job;
|
return job;
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,14 +288,14 @@ static struct net_dns_job* find_and_remove_job(struct net_dns_job* job)
|
|||||||
static struct net_dns_result* find_and_remove_result(struct net_dns_job* job)
|
static struct net_dns_result* find_and_remove_result(struct net_dns_job* job)
|
||||||
{
|
{
|
||||||
struct net_dns_result* it;
|
struct net_dns_result* it;
|
||||||
for (it = (struct net_dns_result*) list_get_first(g_dns->results); it; it = (struct net_dns_result*) list_get_next(g_dns->results))
|
LIST_FOREACH(struct net_dns_result*, it, g_dns->results,
|
||||||
{
|
{
|
||||||
if (it->job == job)
|
if (it->job == job)
|
||||||
{
|
{
|
||||||
list_remove(g_dns->results, it);
|
list_remove(g_dns->results, it);
|
||||||
return it;
|
return it;
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,16 +177,15 @@ static void unload_acl(struct acl_data* data)
|
|||||||
static plugin_st get_user(struct plugin_handle* plugin, const char* nickname, struct auth_info* data)
|
static plugin_st get_user(struct plugin_handle* plugin, const char* nickname, struct auth_info* data)
|
||||||
{
|
{
|
||||||
struct acl_data* acl = (struct acl_data*) plugin->ptr;
|
struct acl_data* acl = (struct acl_data*) plugin->ptr;
|
||||||
struct auth_info* info = (struct auth_info*) list_get_first(acl->users);
|
struct auth_info* info;
|
||||||
while (info)
|
LIST_FOREACH(struct auth_info*, info, acl->users,
|
||||||
{
|
{
|
||||||
if (strcasecmp((char*)info->nickname, nickname) == 0)
|
if (strcasecmp((char*)info->nickname, nickname) == 0)
|
||||||
{
|
{
|
||||||
memcpy(data, info, sizeof(struct auth_info));
|
memcpy(data, info, sizeof(struct auth_info));
|
||||||
return st_allow;
|
return st_allow;
|
||||||
}
|
}
|
||||||
info = (struct auth_info*) list_get_next(acl->users);
|
});
|
||||||
}
|
|
||||||
if (acl->exclusive)
|
if (acl->exclusive)
|
||||||
return st_deny;
|
return st_deny;
|
||||||
return st_default;
|
return st_default;
|
||||||
|
@ -79,16 +79,14 @@ static size_t get_messages(struct chat_history_data* data, size_t num, struct cb
|
|||||||
skiplines = total - num;
|
skiplines = total - num;
|
||||||
|
|
||||||
cbuf_append(outbuf, "\n");
|
cbuf_append(outbuf, "\n");
|
||||||
message = (char*) list_get_first(messages);
|
LIST_FOREACH(char*, message, messages,
|
||||||
while (message)
|
|
||||||
{
|
{
|
||||||
if (--skiplines < 0)
|
if (--skiplines < 0)
|
||||||
{
|
{
|
||||||
cbuf_append(outbuf, message);
|
cbuf_append(outbuf, message);
|
||||||
lines++;
|
lines++;
|
||||||
}
|
}
|
||||||
message = (char*) list_get_next(messages);
|
});
|
||||||
}
|
|
||||||
cbuf_append(outbuf, "\n");
|
cbuf_append(outbuf, "\n");
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
@ -65,17 +65,14 @@ static void on_message(struct ADC_chat_message* chat)
|
|||||||
lines = list_create();
|
lines = list_create();
|
||||||
ret = split_string(chat->message, "\n", lines, 1);
|
ret = split_string(chat->message, "\n", lines, 1);
|
||||||
|
|
||||||
line = (char*) list_get_first(lines);
|
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
while (line)
|
LIST_FOREACH(char*, line, lines,
|
||||||
{
|
{
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
printf(" ");
|
printf(" ");
|
||||||
printf("%s\n", line);
|
printf("%s\n", line);
|
||||||
ret++;
|
ret++;
|
||||||
line = (char*) list_get_next(lines);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
list_clear(lines, &hub_free);
|
list_clear(lines, &hub_free);
|
||||||
list_destroy(lines);
|
list_destroy(lines);
|
||||||
|
@ -57,5 +57,9 @@ extern void* list_get_prev(struct linked_list*);
|
|||||||
extern struct node* list_get_first_node(struct linked_list*);
|
extern struct node* list_get_first_node(struct linked_list*);
|
||||||
extern struct node* list_get_last_node(struct linked_list*);
|
extern struct node* list_get_last_node(struct linked_list*);
|
||||||
|
|
||||||
|
#define LIST_FOREACH(TYPE, ITEM, LIST, BLOCK) \
|
||||||
|
for (ITEM = (TYPE) list_get_first(LIST); ITEM; ITEM = (TYPE) list_get_next(LIST)) \
|
||||||
|
BLOCK
|
||||||
|
|
||||||
#endif /* HAVE_UHUB_LINKED_LIST_H */
|
#endif /* HAVE_UHUB_LINKED_LIST_H */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user