Rework logging code to be able to turn it off completely.
This commit is contained in:
		
							parent
							
								
									5048ff9ae5
								
							
						
					
					
						commit
						6e5d28c2d4
					
				@ -244,7 +244,7 @@ struct adc_message* adc_msg_parse_verify(struct user* u, const char* line, size_
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	if (command->source && (!u || command->source != u->id.sid))
 | 
						if (command->source && (!u || command->source != u->id.sid))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_debug, "Command does not match user's SID (command->source=%d, user->id.sid=%d)", command->source, (u ? u->id.sid : 0));
 | 
							LOG_DEBUG("Command does not match user's SID (command->source=%d, user->id.sid=%d)", command->source, (u ? u->id.sid : 0));
 | 
				
			||||||
		adc_msg_free(command);
 | 
							adc_msg_free(command);
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -268,7 +268,7 @@ struct adc_message* adc_msg_parse(const char* line, size_t length)
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
	if (!is_printable_utf8(line, length))
 | 
						if (!is_printable_utf8(line, length))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_debug, "Dropped message with non-printable UTF-8 characters.");
 | 
							LOG_DEBUG("Dropped message with non-printable UTF-8 characters.");
 | 
				
			||||||
		hub_free(command);
 | 
							hub_free(command);
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -520,7 +520,6 @@ int adc_msg_remove_named_argument(struct adc_message* cmd, const char prefix_[2]
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			temp_len = &end[0] - &start[0]; // strlen(start);
 | 
								temp_len = &end[0] - &start[0]; // strlen(start);
 | 
				
			||||||
			/* hub_log(log_trace, "                     length=%d", (int) (temp_len)); */
 | 
					 | 
				
			||||||
			endlen = strlen(end);
 | 
								endlen = strlen(end);
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			memmove(start, end, endlen);
 | 
								memmove(start, end, endlen);
 | 
				
			||||||
 | 
				
			|||||||
@ -55,12 +55,12 @@ static int check_cmd_bool(const char* cmd, struct linked_list* list, char* line,
 | 
				
			|||||||
		data = strip_white_space(data);
 | 
							data = strip_white_space(data);
 | 
				
			||||||
		if (!*data)
 | 
							if (!*data)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "ACL parse error on line %d", line_count);
 | 
								LOG_FATAL("ACL parse error on line %d", line_count);
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		list_append(list, hub_strdup(data));
 | 
							list_append(list, hub_strdup(data));
 | 
				
			||||||
		hub_log(log_debug, "ACL: Deny access for: '%s' (%s)", data, cmd);
 | 
							LOG_DEBUG("ACL: Deny access for: '%s' (%s)", data, cmd);
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
@ -82,7 +82,7 @@ static int check_cmd_user(const char* cmd, int status, struct linked_list* list,
 | 
				
			|||||||
		data = strip_white_space(data);
 | 
							data = strip_white_space(data);
 | 
				
			||||||
		if (!*data)
 | 
							if (!*data)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "ACL parse error on line %d", line_count);
 | 
								LOG_FATAL("ACL parse error on line %d", line_count);
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -90,7 +90,7 @@ static int check_cmd_user(const char* cmd, int status, struct linked_list* list,
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		if (!info)
 | 
							if (!info)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_error, "ACL parse error. Out of memory!");
 | 
								LOG_ERROR("ACL parse error. Out of memory!");
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -108,7 +108,7 @@ static int check_cmd_user(const char* cmd, int status, struct linked_list* list,
 | 
				
			|||||||
		info->password = data_extra ? hub_strdup(data_extra) : 0;
 | 
							info->password = data_extra ? hub_strdup(data_extra) : 0;
 | 
				
			||||||
		info->status = status;
 | 
							info->status = status;
 | 
				
			||||||
		list_append(list, info);
 | 
							list_append(list, info);
 | 
				
			||||||
		hub_log(log_debug, "ACL: Added user '%s' (%s)", info->username, get_user_credential_string(info->status));
 | 
							LOG_DEBUG("ACL: Added user '%s' (%s)", info->username, get_user_credential_string(info->status));
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
@ -130,7 +130,7 @@ static void add_ip_range(struct linked_list* list, struct ip_ban_record* info)
 | 
				
			|||||||
		net_address_to_string(AF_INET6, &info->lo.internal_ip_data.in6, buf1, INET6_ADDRSTRLEN);
 | 
							net_address_to_string(AF_INET6, &info->lo.internal_ip_data.in6, buf1, INET6_ADDRSTRLEN);
 | 
				
			||||||
		net_address_to_string(AF_INET6, &info->hi.internal_ip_data.in6, buf2, INET6_ADDRSTRLEN);
 | 
							net_address_to_string(AF_INET6, &info->hi.internal_ip_data.in6, buf2, INET6_ADDRSTRLEN);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	hub_log(log_debug, "ACL: Deny access for: %s-%s", buf1, buf2);
 | 
						LOG_DEBUG("ACL: Deny access for: %s-%s", buf1, buf2);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	list_append(list, info);
 | 
						list_append(list, info);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -157,7 +157,7 @@ static int check_ip_range(const char* lo, const char* hi, struct ip_ban_record*
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static int check_ip_mask(const char* text_addr, int bits, struct ip_ban_record* info)
 | 
					static int check_ip_mask(const char* text_addr, int bits, struct ip_ban_record* info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	hub_log(log_debug, "ACL: Deny access for: %s/%d", text_addr, bits);
 | 
						LOG_DEBUG("ACL: Deny access for: %s/%d", text_addr, bits);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (ip_is_valid_ipv4(text_addr) ||
 | 
						if (ip_is_valid_ipv4(text_addr) ||
 | 
				
			||||||
		ip_is_valid_ipv6(text_addr))
 | 
							ip_is_valid_ipv6(text_addr))
 | 
				
			||||||
@ -194,7 +194,7 @@ static int check_cmd_addr(const char* cmd, struct linked_list* list, char* line,
 | 
				
			|||||||
		data1 = strip_white_space(data1);
 | 
							data1 = strip_white_space(data1);
 | 
				
			||||||
		if (!*data1)
 | 
							if (!*data1)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "ACL parse error on line %d", line_count);
 | 
								LOG_FATAL("ACL parse error on line %d", line_count);
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -202,7 +202,7 @@ static int check_cmd_addr(const char* cmd, struct linked_list* list, char* line,
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		if (!info)
 | 
							if (!info)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_error, "ACL parse error. Out of memory!");
 | 
								LOG_ERROR("ACL parse error. Out of memory!");
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -269,20 +269,16 @@ static int acl_parse_line(char* line, int line_count, void* ptr_data)
 | 
				
			|||||||
	if (!*line)
 | 
						if (!*line)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef ACL_DEBUG
 | 
						LOG_DEBUG("acl_parse_line(): '%s'", line);
 | 
				
			||||||
	hub_log(log_trace, "acl_parse_line(): '%s'", line);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	line = strip_white_space(line);
 | 
						line = strip_white_space(line);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (!*line)
 | 
						if (!*line)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_fatal, "ACL parse error on line %d", line_count);
 | 
							LOG_FATAL("ACL parse error on line %d", line_count);
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef ACL_DEBUG
 | 
						LOG_DEBUG("acl_parse_line: '%s'", line);
 | 
				
			||||||
	hub_log(log_trace, "acl_parse_line: '%s'", line);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	ACL_ADD_USER("bot",        handle->users, cred_bot);
 | 
						ACL_ADD_USER("bot",        handle->users, cred_bot);
 | 
				
			||||||
	ACL_ADD_USER("user_admin", handle->users, cred_admin);
 | 
						ACL_ADD_USER("user_admin", handle->users, cred_admin);
 | 
				
			||||||
@ -296,7 +292,7 @@ static int acl_parse_line(char* line, int line_count, void* ptr_data)
 | 
				
			|||||||
	ACL_ADD_ADDR("deny_ip",    handle->networks);
 | 
						ACL_ADD_ADDR("deny_ip",    handle->networks);
 | 
				
			||||||
	ACL_ADD_ADDR("nat_ip",     handle->nat_override);
 | 
						ACL_ADD_ADDR("nat_ip",     handle->nat_override);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	hub_log(log_error, "Unknown ACL command on line %d: '%s'", line_count, line);
 | 
						LOG_ERROR("Unknown ACL command on line %d: '%s'", line_count, line);
 | 
				
			||||||
	return -1;
 | 
						return -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -315,7 +311,7 @@ int acl_initialize(struct hub_config* config, struct acl_handle* handle)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	if (!handle->users || !handle->cids || !handle->networks || !handle->users_denied || !handle->users_banned || !handle->nat_override)
 | 
						if (!handle->users || !handle->cids || !handle->networks || !handle->users_denied || !handle->users_banned || !handle->nat_override)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_fatal, "acl_initialize: Out of memory");
 | 
							LOG_FATAL("acl_initialize: Out of memory");
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		list_destroy(handle->users);
 | 
							list_destroy(handle->users);
 | 
				
			||||||
		list_destroy(handle->users_denied);
 | 
							list_destroy(handle->users_denied);
 | 
				
			||||||
@ -451,7 +447,7 @@ int acl_user_ban_nick(struct acl_handle* handle, const char* nick)
 | 
				
			|||||||
	struct user_access_info* info = hub_malloc_zero(sizeof(struct user_access_info));
 | 
						struct user_access_info* info = hub_malloc_zero(sizeof(struct user_access_info));
 | 
				
			||||||
	if (!info)
 | 
						if (!info)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_error, "ACL error: Out of memory!");
 | 
							LOG_ERROR("ACL error: Out of memory!");
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	list_append(handle->users_banned, hub_strdup(nick));
 | 
						list_append(handle->users_banned, hub_strdup(nick));
 | 
				
			||||||
@ -463,7 +459,7 @@ int acl_user_ban_cid(struct acl_handle* handle, const char* cid)
 | 
				
			|||||||
	struct user_access_info* info = hub_malloc_zero(sizeof(struct user_access_info));
 | 
						struct user_access_info* info = hub_malloc_zero(sizeof(struct user_access_info));
 | 
				
			||||||
	if (!info)
 | 
						if (!info)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_error, "ACL error: Out of memory!");
 | 
							LOG_ERROR("ACL error: Out of memory!");
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	list_append(handle->cids, hub_strdup(cid));
 | 
						list_append(handle->cids, hub_strdup(cid));
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
		else if (strncasecmp(data, "off",   3) == 0) TARGET = 0; \
 | 
							else if (strncasecmp(data, "off",   3) == 0) TARGET = 0; \
 | 
				
			||||||
		else\
 | 
							else\
 | 
				
			||||||
		{ \
 | 
							{ \
 | 
				
			||||||
			hub_log(log_fatal, "Configuration error on line %d: '%s' must be either '1' or '0'", line_count, key); \
 | 
								LOG_FATAL("Configuration error on line %d: '%s' must be either '1' or '0'", line_count, key); \
 | 
				
			||||||
			return -1; \
 | 
								return -1; \
 | 
				
			||||||
		} \
 | 
							} \
 | 
				
			||||||
		TARGET |= 0x80000000; \
 | 
							TARGET |= 0x80000000; \
 | 
				
			||||||
@ -65,7 +65,7 @@
 | 
				
			|||||||
		errno = 0; \
 | 
							errno = 0; \
 | 
				
			||||||
		val = strtol(data, &endptr, 10); \
 | 
							val = strtol(data, &endptr, 10); \
 | 
				
			||||||
		if (((errno == ERANGE && (val == INT_MAX || val == INT_MIN)) || (errno != 0 && val == 0)) || endptr == data) { \
 | 
							if (((errno == ERANGE && (val == INT_MAX || val == INT_MIN)) || (errno != 0 && val == 0)) || endptr == data) { \
 | 
				
			||||||
			hub_log(log_fatal, "Configuration error on line %d: '%s' must be a number", line_count, key); \
 | 
								LOG_FATAL("Configuration error on line %d: '%s' must be a number", line_count, key); \
 | 
				
			||||||
			return -1; \
 | 
								return -1; \
 | 
				
			||||||
		} \
 | 
							} \
 | 
				
			||||||
		TARGET = val; \
 | 
							TARGET = val; \
 | 
				
			||||||
@ -103,7 +103,7 @@
 | 
				
			|||||||
#define IGNORED(NAME) \
 | 
					#define IGNORED(NAME) \
 | 
				
			||||||
    if (strcmp(#NAME, key) == 0) \
 | 
					    if (strcmp(#NAME, key) == 0) \
 | 
				
			||||||
    { \
 | 
					    { \
 | 
				
			||||||
        hub_log(log_warning, "Configuration option %s deprecated and ingnored.", key); \
 | 
					        LOG_WARN("Configuration option %s deprecated and ingnored.", key); \
 | 
				
			||||||
        return 0; \
 | 
					        return 0; \
 | 
				
			||||||
    } \
 | 
					    } \
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -304,7 +304,7 @@ static int apply_config(struct hub_config* config, char* key, char* data, int li
 | 
				
			|||||||
	GET_STR (tls_private_key);
 | 
						GET_STR (tls_private_key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Still here -- unknown directive */
 | 
					    /* Still here -- unknown directive */
 | 
				
			||||||
	hub_log(log_fatal, "Unknown configuration directive: '%s'", key);
 | 
						LOG_ERROR("Unknown configuration directive: '%s'", key);
 | 
				
			||||||
	return -1;
 | 
						return -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -460,13 +460,11 @@ static int config_parse_line(char* line, int line_count, void* ptr_data)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (!*line) return 0;
 | 
						if (!*line) return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_DUMP
 | 
						LOG_DUMP("config_parse_line(): '%s'", line);
 | 
				
			||||||
	hub_log(log_trace, "config_parse_line(): '%s'", line);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!is_valid_utf8(line))
 | 
						if (!is_valid_utf8(line))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_warning, "Invalid utf-8 characters on line %d", line_count);
 | 
							LOG_WARN("Invalid utf-8 characters on line %d", line_count);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((pos = strchr(line, '=')) != NULL)
 | 
						if ((pos = strchr(line, '=')) != NULL)
 | 
				
			||||||
@ -486,13 +484,11 @@ static int config_parse_line(char* line, int line_count, void* ptr_data)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (!*key || !*data)
 | 
						if (!*key || !*data)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_fatal, "Configuration parse error on line %d", line_count);
 | 
							LOG_FATAL("Configuration parse error on line %d", line_count);
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_DUMP
 | 
						LOG_DUMP("config_parse_line: '%s' => '%s'", key, data);
 | 
				
			||||||
	hub_log(log_trace, "config_parse_line: '%s' => '%s'", key, data);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return apply_config(config, key, data, line_count);
 | 
						return apply_config(config, key, data, line_count);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -509,7 +505,7 @@ int read_config(const char* file, struct hub_config* config, int allow_missing)
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		if (allow_missing && ret == -2)
 | 
							if (allow_missing && ret == -2)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_debug, "Using default configuration.");
 | 
								LOG_DUMP("Using default configuration.");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
				
			|||||||
@ -22,7 +22,7 @@
 | 
				
			|||||||
#ifdef EQ_DEBUG
 | 
					#ifdef EQ_DEBUG
 | 
				
			||||||
static void eq_debug(const char* prefix, struct event_data* data)
 | 
					static void eq_debug(const char* prefix, struct event_data* data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	printf(">>> %s: %p, id: %x, flags=%d\n", prefix, data, data->id, data->flags);
 | 
						LOG_DUMP(">>> %s: %p, id: %x, flags=%d\n", prefix, data, data->id, data->flags);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -130,7 +130,7 @@ void event_queue_post(struct event_queue* queue, struct event_data* message)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_error, "event_queue_post: OUT OF MEMORY");
 | 
							LOG_ERROR("event_queue_post: OUT OF MEMORY");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -21,16 +21,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct hub_info* g_hub = 0;
 | 
					struct hub_info* g_hub = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NETWORK_DUMP_DEBUG 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int hub_handle_message(struct hub_info* hub, struct user* u, const char* line, size_t length)
 | 
					int hub_handle_message(struct hub_info* hub, struct user* u, const char* line, size_t length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret = 0;
 | 
						int ret = 0;
 | 
				
			||||||
	struct adc_message* cmd = 0;
 | 
						struct adc_message* cmd = 0;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#ifdef NETWORK_DUMP_DEBUG
 | 
						LOG_PROTO("recv %s: %s", sid_to_string(u->id.sid), line);
 | 
				
			||||||
	hub_log(log_protocol, "recv %s: %s", sid_to_string(u->id.sid), line);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (user_is_disconnecting(u))
 | 
						if (user_is_disconnecting(u))
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
@ -399,7 +395,7 @@ struct hub_info* hub_start_service(struct hub_config* config)
 | 
				
			|||||||
	hub = hub_malloc_zero(sizeof(struct hub_info));
 | 
						hub = hub_malloc_zero(sizeof(struct hub_info));
 | 
				
			||||||
	if (!hub)
 | 
						if (!hub)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_fatal, "Unable to allocate memory for hub");
 | 
							LOG_FATAL("Unable to allocate memory for hub");
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -408,9 +404,9 @@ struct hub_info* hub_start_service(struct hub_config* config)
 | 
				
			|||||||
	ipv6_supported = net_is_ipv6_supported();
 | 
						ipv6_supported = net_is_ipv6_supported();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (ipv6_supported)
 | 
						if (ipv6_supported)
 | 
				
			||||||
		hub_log(log_debug, "IPv6 supported.");
 | 
							LOG_DEBUG("IPv6 supported.");
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		hub_log(log_debug, "IPv6 not supported.");
 | 
							LOG_DEBUG("IPv6 not supported.");
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (ip_convert_address(config->server_bind_addr, config->server_port, (struct sockaddr*) &addr, &sockaddr_size) == -1)
 | 
						if (ip_convert_address(config->server_bind_addr, config->server_port, (struct sockaddr*) &addr, &sockaddr_size) == -1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -435,13 +431,13 @@ struct hub_info* hub_start_service(struct hub_config* config)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if (!hub->evbase)
 | 
						if (!hub->evbase)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_error, "Unable to initialize libevent.");
 | 
							LOG_ERROR("Unable to initialize libevent.");
 | 
				
			||||||
		hub_free(hub);
 | 
							hub_free(hub);
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hub_log(log_info, "Starting " PRODUCT "/" VERSION ", listening on %s:%d...", address_buf, config->server_port);
 | 
						LOG_INFO("Starting " PRODUCT "/" VERSION ", listening on %s:%d...", address_buf, config->server_port);
 | 
				
			||||||
	hub_log(log_debug, "Using libevent %s, backend: %s", event_get_version(), event_get_method());
 | 
						LOG_DEBUG("Using libevent %s, backend: %s", event_get_version(), event_get_method());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	server_tcp = net_socket_create(af, SOCK_STREAM, IPPROTO_TCP);
 | 
						server_tcp = net_socket_create(af, SOCK_STREAM, IPPROTO_TCP);
 | 
				
			||||||
	if (server_tcp == -1)
 | 
						if (server_tcp == -1)
 | 
				
			||||||
@ -472,7 +468,7 @@ struct hub_info* hub_start_service(struct hub_config* config)
 | 
				
			|||||||
	ret = net_bind(server_tcp, (struct sockaddr*) &addr, sockaddr_size);
 | 
						ret = net_bind(server_tcp, (struct sockaddr*) &addr, sockaddr_size);
 | 
				
			||||||
	if (ret == -1)
 | 
						if (ret == -1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_fatal, "hub_start_service(): Unable to bind to TCP local address. errno=%d, str=%s", net_error(), net_error_string(net_error()));
 | 
							LOG_FATAL("hub_start_service(): Unable to bind to TCP local address. errno=%d, str=%s", net_error(), net_error_string(net_error()));
 | 
				
			||||||
		event_base_free(hub->evbase);
 | 
							event_base_free(hub->evbase);
 | 
				
			||||||
		hub_free(hub);
 | 
							hub_free(hub);
 | 
				
			||||||
		net_close(server_tcp);
 | 
							net_close(server_tcp);
 | 
				
			||||||
@ -482,7 +478,7 @@ struct hub_info* hub_start_service(struct hub_config* config)
 | 
				
			|||||||
	ret = net_listen(server_tcp, SERVER_BACKLOG);
 | 
						ret = net_listen(server_tcp, SERVER_BACKLOG);
 | 
				
			||||||
	if (ret == -1)
 | 
						if (ret == -1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_fatal, "hub_start_service(): Unable to listen to socket");
 | 
							LOG_FATAL("hub_start_service(): Unable to listen to socket");
 | 
				
			||||||
		event_base_free(hub->evbase);
 | 
							event_base_free(hub->evbase);
 | 
				
			||||||
		hub_free(hub);
 | 
							hub_free(hub);
 | 
				
			||||||
		net_close(server_tcp);
 | 
							net_close(server_tcp);
 | 
				
			||||||
@ -539,7 +535,7 @@ struct hub_info* hub_start_service(struct hub_config* config)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void hub_shutdown_service(struct hub_info* hub)
 | 
					void hub_shutdown_service(struct hub_info* hub)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	hub_log(log_trace, "hub_shutdown_service()");
 | 
						LOG_TRACE("hub_shutdown_service()");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	event_queue_shutdown(hub->queue);
 | 
						event_queue_shutdown(hub->queue);
 | 
				
			||||||
	event_del(&hub->ev_accept);
 | 
						event_del(&hub->ev_accept);
 | 
				
			||||||
@ -903,7 +899,7 @@ void hub_event_loop(struct hub_info* hub)
 | 
				
			|||||||
		 
 | 
							 
 | 
				
			||||||
		 if (ret != 0)
 | 
							 if (ret != 0)
 | 
				
			||||||
		 {
 | 
							 {
 | 
				
			||||||
			 hub_log(log_debug, "event_base_loop returned: %d", (int) ret);
 | 
								 LOG_DEBUG("event_base_loop returned: %d", (int) ret);
 | 
				
			||||||
		 }
 | 
							 }
 | 
				
			||||||
		 
 | 
							 
 | 
				
			||||||
		 if (ret < 0)
 | 
							 if (ret < 0)
 | 
				
			||||||
@ -937,7 +933,7 @@ void hub_disconnect_user(struct hub_info* hub, struct user* user, int reason)
 | 
				
			|||||||
	/* stop reading from user */
 | 
						/* stop reading from user */
 | 
				
			||||||
	net_shutdown_r(user->net.sd);
 | 
						net_shutdown_r(user->net.sd);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	hub_log(log_trace, "hub_disconnect_user(), user=%p, reason=%d, state=%d", user, reason, user->state);
 | 
						LOG_TRACE("hub_disconnect_user(), user=%p, reason=%d, state=%d", user, reason, user->state);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	need_notify = user_is_logged_in(user);
 | 
						need_notify = user_is_logged_in(user);
 | 
				
			||||||
	user->quit_reason = reason;
 | 
						user->quit_reason = reason;
 | 
				
			||||||
 | 
				
			|||||||
@ -23,26 +23,26 @@ static void log_user_login(struct user* u)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	const char* cred = get_user_credential_string(u->credentials);
 | 
						const char* cred = get_user_credential_string(u->credentials);
 | 
				
			||||||
	const char* addr = ip_convert_to_string(&u->net.ipaddr);
 | 
						const char* addr = ip_convert_to_string(&u->net.ipaddr);
 | 
				
			||||||
	hub_log(log_user, "LoginOK     %s/%s %s \"%s\" (%s) \"%s\"", sid_to_string(u->id.sid), u->id.cid, addr, u->id.nick, cred, u->user_agent);
 | 
						LOG_USER("LoginOK     %s/%s %s \"%s\" (%s) \"%s\"", sid_to_string(u->id.sid), u->id.cid, addr, u->id.nick, cred, u->user_agent);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void log_user_login_error(struct user* u, enum status_message msg)
 | 
					static void log_user_login_error(struct user* u, enum status_message msg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const char* addr = ip_convert_to_string(&u->net.ipaddr);
 | 
						const char* addr = ip_convert_to_string(&u->net.ipaddr);
 | 
				
			||||||
	const char* message = hub_get_status_message_log(u->hub, msg);
 | 
						const char* message = hub_get_status_message_log(u->hub, msg);
 | 
				
			||||||
	hub_log(log_user, "LoginError  %s/%s %s \"%s\" (%s) \"%s\"", sid_to_string(u->id.sid), u->id.cid, addr, u->id.nick, message, u->user_agent);
 | 
						LOG_USER("LoginError  %s/%s %s \"%s\" (%s) \"%s\"", sid_to_string(u->id.sid), u->id.cid, addr, u->id.nick, message, u->user_agent);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void log_user_logout(struct user* u, const char* message)
 | 
					static void log_user_logout(struct user* u, const char* message)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const char* addr = ip_convert_to_string(&u->net.ipaddr);
 | 
						const char* addr = ip_convert_to_string(&u->net.ipaddr);
 | 
				
			||||||
	hub_log(log_user, "Logout      %s/%s %s \"%s\" (%s)", sid_to_string(u->id.sid), u->id.cid, addr, u->id.nick, message);
 | 
						LOG_USER("Logout      %s/%s %s \"%s\" (%s)", sid_to_string(u->id.sid), u->id.cid, addr, u->id.nick, message);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void log_user_nick_change(struct user* u, const char* nick)
 | 
					static void log_user_nick_change(struct user* u, const char* nick)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const char* addr = ip_convert_to_string(&u->net.ipaddr);
 | 
						const char* addr = ip_convert_to_string(&u->net.ipaddr);
 | 
				
			||||||
	hub_log(log_user, "NickChange  %s/%s %s \"%s\" -> \"%s\"", sid_to_string(u->id.sid), u->id.cid, addr, u->id.nick, nick);
 | 
						LOG_USER("NickChange  %s/%s %s \"%s\" -> \"%s\"", sid_to_string(u->id.sid), u->id.cid, addr, u->id.nick, nick);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -35,7 +35,7 @@ static void debug_msg(const char* prefix, struct adc_message* msg)
 | 
				
			|||||||
		if (buf[n] == '\r' || buf[n] == '\n')
 | 
							if (buf[n] == '\r' || buf[n] == '\n')
 | 
				
			||||||
			buf[n] = '_';
 | 
								buf[n] = '_';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	hub_log(log_trace, "%s: [%s] (%d bytes)", prefix, buf, (int) msg->length);
 | 
						LOG_TRACE("%s: [%s] (%d bytes)", prefix, buf, (int) msg->length);
 | 
				
			||||||
	free(buf);
 | 
						free(buf);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -336,7 +336,7 @@ static int check_logged_in(struct hub_info* hub, struct user* user, struct adc_m
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		if (lookup1 == lookup2)
 | 
							if (lookup1 == lookup2)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_debug, "check_logged_in: exact same user is logged in: %s", user->id.nick);
 | 
								LOG_DEBUG("check_logged_in: exact same user is logged in: %s", user->id.nick);
 | 
				
			||||||
			hub_disconnect_user(hub, lookup1, quit_ghost_timeout);
 | 
								hub_disconnect_user(hub, lookup1, quit_ghost_timeout);
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -344,12 +344,12 @@ static int check_logged_in(struct hub_info* hub, struct user* user, struct adc_m
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			if (lookup1)
 | 
								if (lookup1)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				hub_log(log_debug, "check_logged_in: nickname is in use: %s", user->id.nick);
 | 
									LOG_DEBUG("check_logged_in: nickname is in use: %s", user->id.nick);
 | 
				
			||||||
				return status_msg_inf_error_nick_taken;
 | 
									return status_msg_inf_error_nick_taken;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				hub_log(log_debug, "check_logged_in: CID is in use: %s", user->id.cid);
 | 
									LOG_DEBUG("check_logged_in: CID is in use: %s", user->id.cid);
 | 
				
			||||||
				return status_msg_inf_error_cid_taken;
 | 
									return status_msg_inf_error_cid_taken;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -42,12 +42,12 @@ void hub_handle_signal(int fd, short events, void* arg)
 | 
				
			|||||||
	switch (signal)
 | 
						switch (signal)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		case SIGINT:
 | 
							case SIGINT:
 | 
				
			||||||
			hub_log(log_info, "Interrupted. Shutting down...");
 | 
								LOG_INFO("Interrupted. Shutting down...");
 | 
				
			||||||
			hub->status = hub_status_shutdown;
 | 
								hub->status = hub_status_shutdown;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case SIGTERM:
 | 
							case SIGTERM:
 | 
				
			||||||
			hub_log(log_info, "Terminated. Shutting down...");
 | 
								LOG_INFO("Terminated. Shutting down...");
 | 
				
			||||||
			hub->status = hub_status_shutdown;
 | 
								hub->status = hub_status_shutdown;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -59,7 +59,7 @@ void hub_handle_signal(int fd, short events, void* arg)
 | 
				
			|||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			hub_log(log_trace, "hub_handle_signal(): caught unknown signal: %d", signal);
 | 
								LOG_TRACE("hub_handle_signal(): caught unknown signal: %d", signal);
 | 
				
			||||||
			hub->status = hub_status_shutdown;
 | 
								hub->status = hub_status_shutdown;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -84,7 +84,7 @@ void setup_signal_handlers(struct hub_info* hub)
 | 
				
			|||||||
		event_base_set(hub->evbase, &signal_events[i]);
 | 
							event_base_set(hub->evbase, &signal_events[i]);
 | 
				
			||||||
		if (signal_add(&signal_events[i], NULL))
 | 
							if (signal_add(&signal_events[i], NULL))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_error, "Error setting signal handler %d", signals[i]);
 | 
								LOG_ERROR("Error setting signal handler %d", signals[i]);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -114,8 +114,8 @@ int main_loop()
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		if (hub)
 | 
							if (hub)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_info, "Reloading configuration files...");
 | 
								LOG_INFO("Reloading configuration files...");
 | 
				
			||||||
			hub_log(log_debug, "Hub status: %d", (int) hub->status);
 | 
								LOG_DEBUG("Hub status: %d", (int) hub->status);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
		if (read_config(arg_config, &configuration, !arg_have_config) == -1)
 | 
							if (read_config(arg_config, &configuration, !arg_have_config) == -1)
 | 
				
			||||||
@ -335,15 +335,15 @@ int drop_privileges()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (!ret)
 | 
							if (!ret)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "Unable to determine group id, check group name.");
 | 
								LOG_FATAL("Unable to determine group id, check group name.");
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		hub_log(log_trace, "Setting group id %d (%s)", (int) perm_gid, arg_gid);
 | 
							LOG_TRACE("Setting group id %d (%s)", (int) perm_gid, arg_gid);
 | 
				
			||||||
		ret = setgid(perm_gid);
 | 
							ret = setgid(perm_gid);
 | 
				
			||||||
		if (ret == -1)
 | 
							if (ret == -1)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "Unable to change group id, permission denied.");
 | 
								LOG_FATAL("Unable to change group id, permission denied.");
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		gid_ok = 1;
 | 
							gid_ok = 1;
 | 
				
			||||||
@ -368,25 +368,25 @@ int drop_privileges()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (!ret)
 | 
							if (!ret)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "Unable to determine user id, check user name.");
 | 
								LOG_FATAL("Unable to determine user id, check user name.");
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!gid_ok) {
 | 
							if (!gid_ok) {
 | 
				
			||||||
			hub_log(log_trace, "Setting group id %d (%s)", (int) perm_gid, arg_gid);
 | 
								LOG_TRACE("Setting group id %d (%s)", (int) perm_gid, arg_gid);
 | 
				
			||||||
			ret = setgid(perm_gid);
 | 
								ret = setgid(perm_gid);
 | 
				
			||||||
			if (ret == -1)
 | 
								if (ret == -1)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				hub_log(log_fatal, "Unable to change group id, permission denied.");
 | 
									LOG_FATAL("Unable to change group id, permission denied.");
 | 
				
			||||||
				return -1;
 | 
									return -1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		hub_log(log_trace, "Setting user id %d (%s)", (int) perm_uid, arg_uid);
 | 
							LOG_TRACE("Setting user id %d (%s)", (int) perm_uid, arg_uid);
 | 
				
			||||||
		ret = setuid(perm_uid);
 | 
							ret = setuid(perm_uid);
 | 
				
			||||||
		if (ret == -1)
 | 
							if (ret == -1)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "Unable to change user id, permission denied.");
 | 
								LOG_FATAL("Unable to change user id, permission denied.");
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -401,7 +401,7 @@ int pidfile_create()
 | 
				
			|||||||
		FILE* pidfile = fopen(arg_pid, "w");
 | 
							FILE* pidfile = fopen(arg_pid, "w");
 | 
				
			||||||
	        if (!pidfile)
 | 
						        if (!pidfile)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "Unable to write pid file: %s\n", arg_pid);
 | 
								LOG_FATAL("Unable to write pid file: %s\n", arg_pid);
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -440,7 +440,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
		ret = fork();
 | 
							ret = fork();
 | 
				
			||||||
		if (ret == -1)
 | 
							if (ret == -1)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "Unable to fork to background!");
 | 
								LOG_FATAL("Unable to fork to background!");
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (ret == 0)
 | 
							else if (ret == 0)
 | 
				
			||||||
@ -456,7 +456,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			/* parent process */
 | 
								/* parent process */
 | 
				
			||||||
			hub_log(log_debug, "Forked to background\n");
 | 
								LOG_DEBUG("Forked to background\n");
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -26,27 +26,27 @@ extern struct hub_info* g_hub;
 | 
				
			|||||||
#ifdef DEBUG_SENDQ
 | 
					#ifdef DEBUG_SENDQ
 | 
				
			||||||
void debug_sendq_send(struct user* user, int sent, int total)
 | 
					void debug_sendq_send(struct user* user, int sent, int total)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	printf("SEND: sd=%d, %d/%d bytes\n", user->net.sd, sent, total);
 | 
						LOG_DUMP("SEND: sd=%d, %d/%d bytes\n", user->net.sd, sent, total);
 | 
				
			||||||
	if (sent == -1)
 | 
						if (sent == -1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		int err = net_error();
 | 
							int err = net_error();
 | 
				
			||||||
		printf("    errno: %d - %s\n", err, net_error_string(err));
 | 
							LOG_DUMP("    errno: %d - %s\n", err, net_error_string(err));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void debug_sendq_recv(struct user* user, int received, int max, const char* buffer)
 | 
					void debug_sendq_recv(struct user* user, int received, int max, const char* buffer)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	printf("RECV: %d/%d bytes\n", received, (int) max);
 | 
						LOG_DUMP("RECV: %d/%d bytes\n", received, (int) max);
 | 
				
			||||||
	if (received == -1)
 | 
						if (received == -1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		int err = net_error();
 | 
							int err = net_error();
 | 
				
			||||||
		printf("    errno: %d - %s\n", err, net_error_string(err));
 | 
							LOG_DUMP("    errno: %d - %s\n", err, net_error_string(err));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (received > 0)
 | 
						else if (received > 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		char* data = hub_malloc_zero(received + 1);
 | 
							char* data = hub_malloc_zero(received + 1);
 | 
				
			||||||
		memcpy(data, buffer, received);
 | 
							memcpy(data, buffer, received);
 | 
				
			||||||
		printf("RECV: \"%s\"\n", data);
 | 
							LOG_DUMP("RECV: \"%s\"\n", data);
 | 
				
			||||||
		hub_free(data);
 | 
							hub_free(data);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -165,7 +165,7 @@ int handle_net_read(struct user* user)
 | 
				
			|||||||
			pos[0] = '\0';
 | 
								pos[0] = '\0';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef DEBUG_SENDQ
 | 
					#ifdef DEBUG_SENDQ
 | 
				
			||||||
			printf("PROC: \"%s\" (%d)\n", start, (int) (pos - start));
 | 
								LOG_DUMP("PROC: \"%s\" (%d)\n", start, (int) (pos - start));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (user_flag_get(user, flag_maxbuf))
 | 
								if (user_flag_get(user, flag_maxbuf))
 | 
				
			||||||
@ -239,7 +239,7 @@ void net_event(int fd, short ev, void *arg)
 | 
				
			|||||||
	int flag_close = 0;
 | 
						int flag_close = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef DEBUG_SENDQ
 | 
					#ifdef DEBUG_SENDQ
 | 
				
			||||||
	hub_log(log_trace, "net_on_read() : fd=%d, ev=%d, arg=%p", fd, (int) ev, arg);
 | 
						LOG_TRACE("net_on_read() : fd=%d, ev=%d, arg=%p", fd, (int) ev, arg);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ev & EV_TIMEOUT)
 | 
						if (ev & EV_TIMEOUT)
 | 
				
			||||||
@ -315,7 +315,7 @@ void net_on_accept(int server_fd, short ev, void *arg)
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				hub_log(log_error, "Accept error: %d %s", net_error(), strerror(net_error()));
 | 
									LOG_ERROR("Accept error: %d %s", net_error(), strerror(net_error()));
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -323,12 +323,12 @@ void net_on_accept(int server_fd, short ev, void *arg)
 | 
				
			|||||||
		addr = ip_convert_to_string(&ipaddr); 
 | 
							addr = ip_convert_to_string(&ipaddr); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* FIXME: Should have a plugin log this */
 | 
							/* FIXME: Should have a plugin log this */
 | 
				
			||||||
		hub_log(log_trace, "Got connection from %s", addr);
 | 
							LOG_TRACE("Got connection from %s", addr);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		/* FIXME: A plugin should perform this check: is IP banned? */
 | 
							/* FIXME: A plugin should perform this check: is IP banned? */
 | 
				
			||||||
		if (acl_is_ip_banned(hub->acl, addr))
 | 
							if (acl_is_ip_banned(hub->acl, addr))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_info, "Denied      [%s] (IP banned)", addr);
 | 
								LOG_INFO("Denied      [%s] (IP banned)", addr);
 | 
				
			||||||
			net_close(fd);
 | 
								net_close(fd);
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -336,7 +336,7 @@ void net_on_accept(int server_fd, short ev, void *arg)
 | 
				
			|||||||
		user = user_create(hub, fd);
 | 
							user = user_create(hub, fd);
 | 
				
			||||||
		if (!user)
 | 
							if (!user)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_error, "Unable to create user after socket accepted. Out of memory?");
 | 
								LOG_ERROR("Unable to create user after socket accepted. Out of memory?");
 | 
				
			||||||
			net_close(fd);
 | 
								net_close(fd);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -93,7 +93,7 @@ int route_to_user(struct hub_info* hub, struct user* user, struct adc_message* m
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
#ifdef DEBUG_SENDQ
 | 
					#ifdef DEBUG_SENDQ
 | 
				
			||||||
	char* data = strndup(msg->cache, msg->length-1);
 | 
						char* data = strndup(msg->cache, msg->length-1);
 | 
				
			||||||
	hub_log(log_protocol, "send %s: \"%s\"", sid_to_string(user->id.sid), data);
 | 
						LOG_PROTO("send %s: \"%s\"", sid_to_string(user->id.sid), data);
 | 
				
			||||||
	free(data);
 | 
						free(data);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -39,7 +39,7 @@ struct user* user_create(struct hub_info* hub, int sd)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	struct user* user = NULL;
 | 
						struct user* user = NULL;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	hub_log(log_trace, "user_create(), hub=%p, sd=%d", hub, sd);
 | 
						LOG_TRACE("user_create(), hub=%p, sd=%d", hub, sd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	user = (struct user*) hub_malloc_zero(sizeof(struct user));
 | 
						user = (struct user*) hub_malloc_zero(sizeof(struct user));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -68,7 +68,7 @@ struct user* user_create(struct hub_info* hub, int sd)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void user_destroy(struct user* user)
 | 
					void user_destroy(struct user* user)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	hub_log(log_trace, "user_destroy(), user=%p", user);
 | 
						LOG_TRACE("user_destroy(), user=%p", user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	event_del(&user->net.event);
 | 
						event_del(&user->net.event);
 | 
				
			||||||
	evtimer_del(&user->net.timeout);
 | 
						evtimer_del(&user->net.timeout);
 | 
				
			||||||
@ -173,7 +173,7 @@ static int convert_support_fourcc(int fourcc)
 | 
				
			|||||||
			return feature_link;
 | 
								return feature_link;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			hub_log(log_debug, "Unknown extension: %x", fourcc);
 | 
								LOG_DEBUG("Unknown extension: %x", fourcc);
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -330,7 +330,7 @@ int user_is_registered(struct user* user)
 | 
				
			|||||||
void user_net_io_want_write(struct user* user)
 | 
					void user_net_io_want_write(struct user* user)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef DEBUG_SENDQ
 | 
					#ifdef DEBUG_SENDQ
 | 
				
			||||||
	hub_log(log_trace, "user_net_io_want_write: %s (pending: %d)", user_log_str(user), event_pending(&user->net.event, EV_READ | EV_WRITE, 0));
 | 
						LOG_TRACE("user_net_io_want_write: %s (pending: %d)", user_log_str(user), event_pending(&user->net.event, EV_READ | EV_WRITE, 0));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if (event_pending(&user->net.event, EV_READ | EV_WRITE, 0) == (EV_READ | EV_WRITE))
 | 
						if (event_pending(&user->net.event, EV_READ | EV_WRITE, 0) == (EV_READ | EV_WRITE))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
@ -342,7 +342,7 @@ void user_net_io_want_write(struct user* user)
 | 
				
			|||||||
void user_net_io_want_read(struct user* user)
 | 
					void user_net_io_want_read(struct user* user)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef DEBUG_SENDQ
 | 
					#ifdef DEBUG_SENDQ
 | 
				
			||||||
	hub_log(log_trace, "user_net_io_want_read: %s (pending: %d)", user_log_str(user), event_pending(&user->net.event, EV_READ | EV_WRITE, 0));
 | 
						LOG_TRACE("user_net_io_want_read: %s (pending: %d)", user_log_str(user), event_pending(&user->net.event, EV_READ | EV_WRITE, 0));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if (event_pending(&user->net.event, EV_READ | EV_WRITE, 0) == EV_READ)
 | 
						if (event_pending(&user->net.event, EV_READ | EV_WRITE, 0) == EV_READ)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
@ -364,7 +364,7 @@ void user_reset_last_read(struct user* user)
 | 
				
			|||||||
void user_set_timeout(struct user* user, int seconds)
 | 
					void user_set_timeout(struct user* user, int seconds)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef DEBUG_SENDQ
 | 
					#ifdef DEBUG_SENDQ
 | 
				
			||||||
	hub_log(log_trace, "user_set_timeout to %d seconds: %s", seconds, user_log_str(user));
 | 
						LOG_TRACE("user_set_timeout to %d seconds: %s", seconds, user_log_str(user));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	struct timeval timeout = { seconds, 0 };
 | 
						struct timeval timeout = { seconds, 0 };
 | 
				
			||||||
	evtimer_add(&user->net.timeout, &timeout);
 | 
						evtimer_add(&user->net.timeout, &timeout);
 | 
				
			||||||
 | 
				
			|||||||
@ -61,7 +61,7 @@ void uman_update_stats(struct hub_info* hub)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void uman_print_stats(struct hub_info* hub)
 | 
					void uman_print_stats(struct hub_info* hub)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	hub_log(log_info, "Statistics  users=%zu (peak_users=%zu), net_tx=%d KB/s, net_rx=%d KB/s (peak_tx=%d KB/s, peak_rx=%d KB/s)",
 | 
						LOG_INFO("Statistics  users=%zu (peak_users=%zu), net_tx=%d KB/s, net_rx=%d KB/s (peak_tx=%d KB/s, peak_rx=%d KB/s)",
 | 
				
			||||||
		hub->users->count,
 | 
							hub->users->count,
 | 
				
			||||||
		hub->users->count_peak,
 | 
							hub->users->count_peak,
 | 
				
			||||||
		(int) hub->stats.net_tx / 1024,
 | 
							(int) hub->stats.net_tx / 1024,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,326 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * uhub - A tiny ADC p2p connection hub
 | 
					 | 
				
			||||||
 * Copyright (C) 2007, Jan Vidar Krey
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 * the Free Software Foundation; either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU General Public License for more details.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "uhub.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef HAVE_EPOLL
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// #define DEBUG_EPOLL
 | 
					 | 
				
			||||||
static struct epoll_event* events = 0;
 | 
					 | 
				
			||||||
static int epfd = -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef DEBUG_EPOLL
 | 
					 | 
				
			||||||
static void dump_listeners()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int i;
 | 
					 | 
				
			||||||
	struct net_event_listener* listener;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	hub_log(log_dump, "listeners: number=%d", num_connections);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	for (i = 0; i < num_connections; i++)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		listener = &listeners[i];
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		if (listener)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (listener->fd != -1)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				hub_log(log_dump, "epoll_dump_listeners: pos=%d/%d fd=%d, ptr=%p", i, num_connections, listeners->fd, listeners);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				hub_log(log_dump, "epoll_dump_listeners: pos=%d/%d (unused)", i, num_connections);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			listener = 0;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	getc(stdin);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void set_poll_events(struct epoll_event* handle, short trigger)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	memset(handle, 0, sizeof(struct epoll_event));
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (trigger & evt_accept || trigger & evt_read || trigger & evt_close)
 | 
					 | 
				
			||||||
		handle->events |= EPOLLIN;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (trigger & evt_write)
 | 
					 | 
				
			||||||
		handle->events |= EPOLLOUT;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (trigger & evt_urgent)
 | 
					 | 
				
			||||||
		handle->events |= EPOLLPRI;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef EPOLLRDHUP
 | 
					 | 
				
			||||||
	if (triggers & evt_close)
 | 
					 | 
				
			||||||
		handle->events |= EPOLLRDHUP;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static short get_poll_events(struct epoll_event* handle)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	short trig = handle->events;
 | 
					 | 
				
			||||||
	short evt  = 0;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (trig & EPOLLIN)
 | 
					 | 
				
			||||||
		evt |= evt_read;
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
	if (trig & EPOLLPRI)
 | 
					 | 
				
			||||||
		evt |= evt_urgent;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (trig & EPOLLOUT)
 | 
					 | 
				
			||||||
		evt |= evt_write;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (trig & EPOLLHUP)
 | 
					 | 
				
			||||||
		evt |= evt_close;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (trig & EPOLLERR)
 | 
					 | 
				
			||||||
		evt |= evt_error;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef EPOLLRDHUP
 | 
					 | 
				
			||||||
	if (trig & EPOLLRDHUP)
 | 
					 | 
				
			||||||
		evt |= evt_close;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return evt;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_initialize(int capacity)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int i;
 | 
					 | 
				
			||||||
	max_connections = capacity;
 | 
					 | 
				
			||||||
	num_connections = 0;
 | 
					 | 
				
			||||||
	epfd = epoll_create(max_connections);
 | 
					 | 
				
			||||||
	if (epfd == -1)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_initialize(): epoll_create failed");
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	events = hub_malloc_zero(sizeof(struct epoll_event) * max_connections);
 | 
					 | 
				
			||||||
	if (!events)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_initialize(): hub_malloc failed");
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	monitor_allocate((size_t) capacity);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
#ifdef DEBUG_EPOLL
 | 
					 | 
				
			||||||
	dump_listeners();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	net_stats_initialize();
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_shutdown()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	hub_log(log_trace, "Shutting down network monitor");
 | 
					 | 
				
			||||||
	if (epfd != -1)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		close(epfd);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	hub_free(events);
 | 
					 | 
				
			||||||
	hub_free(listeners);
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef DEBUG_EPOLL
 | 
					 | 
				
			||||||
uint64_t get_time_difference_in_msec(struct timeval before, struct timeval after)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	uint64_t seconds = (after.tv_sec - before.tv_sec);
 | 
					 | 
				
			||||||
	uint64_t out = seconds*1000;
 | 
					 | 
				
			||||||
	if (seconds > 0)
 | 
					 | 
				
			||||||
		out += ((after.tv_usec / 1000) + (1000 - (before.tv_usec / 1000)));
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		out += ((after.tv_usec - before.tv_usec) / 1000);
 | 
					 | 
				
			||||||
	return out;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_wait(int timeout_ms)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int fired, n, max, ret;
 | 
					 | 
				
			||||||
	struct net_event_listener* listener;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
#ifdef DEBUG_EPOLL
 | 
					 | 
				
			||||||
	struct timeval tm_before;
 | 
					 | 
				
			||||||
	struct timeval tm_after;
 | 
					 | 
				
			||||||
	gettimeofday(&tm_before, NULL);
 | 
					 | 
				
			||||||
	dump_listeners();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	fired = epoll_wait(epfd, events, num_connections, timeout_ms);
 | 
					 | 
				
			||||||
	if (fired == -1) {
 | 
					 | 
				
			||||||
		if (errno != EINTR)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			hub_log(log_error, "net_wait(): epoll_wait failed");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	for (n = 0; n < fired; n++)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		listener = (struct net_event_listener*) events[n].data.ptr;
 | 
					 | 
				
			||||||
		listener->revents = get_poll_events(&events[n]);
 | 
					 | 
				
			||||||
		hub_log(log_dump, "net_wait(): epoll event detected (fd=%d, evt=%d, ptr=%p)", listener->fd, listener->revents, listener);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	max = num_connections;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	for (n = 0; n < max; n++)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		listener = &listeners[n];
 | 
					 | 
				
			||||||
		if (listener && listener->fd != -1 && listener->revents)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			hub_log(log_dump, "net_wait(): epoll trigger call  (fd=%d, evt=%d, ptr=%p)", listener->fd, listener->revents, listener);
 | 
					 | 
				
			||||||
			ret = listener->handler(listener);
 | 
					 | 
				
			||||||
			listener->revents = 0;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
#ifdef DEBUG_EPOLL
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (listener)
 | 
					 | 
				
			||||||
				hub_log(log_dump, "net_wait(): epoll trigger ignore (fd=%d, evt=%d, ptr=%p)", listener->fd, listener->revents, listener);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef DEBUG_EPOLL
 | 
					 | 
				
			||||||
	gettimeofday(&tm_after, NULL);
 | 
					 | 
				
			||||||
	size_t diff = (size_t) get_time_difference_in_msec(tm_before, tm_after);
 | 
					 | 
				
			||||||
	dump_listeners();
 | 
					 | 
				
			||||||
	hub_log(log_debug, "net_wait(): time=%dms, triggered=%d", diff, fired);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_add(int fd, short events, void* data, net_event_handler_t handler)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct epoll_event ev;
 | 
					 | 
				
			||||||
	struct net_event_listener* listener = monitor_get_free_listener();
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	hub_log(log_trace, "net_add(): adding socket (fd=%d, pos=%d)", fd, pos);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (!listener)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_add(): unable to poll more sockets");
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	net_event_listener_set(listener, fd, events, data, handler);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	set_poll_events(&ev, events);
 | 
					 | 
				
			||||||
	ev.data.ptr = listener;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev) < 0)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_add(): epoll_ctl error while adding socket (fd=%d)", fd);
 | 
					 | 
				
			||||||
		net_event_listener_clear(listener);
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	num_connections++;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
#ifdef DEBUG_EPOLL
 | 
					 | 
				
			||||||
	dump_listeners();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_modify(int fd, short events)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct epoll_event ev;
 | 
					 | 
				
			||||||
	struct net_event_listener* listener = monitor_get_listener(fd);
 | 
					 | 
				
			||||||
	hub_log(log_trace, "net_modify(): modifying socket events (fd=%d)", fd);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (!listener)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_modify(): unable to find socket.");
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	listener->events = events;
 | 
					 | 
				
			||||||
	set_poll_events(&ev, events);
 | 
					 | 
				
			||||||
	ev.data.ptr = listener;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (epoll_ctl(epfd, EPOLL_CTL_MOD, fd, &ev) < 0)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_add(): epoll_ctl error while modifying socket (fd=%d)", fd);
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
#ifdef DEBUG_EPOLL
 | 
					 | 
				
			||||||
	dump_listeners();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_remove(int fd)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct epoll_event ev;
 | 
					 | 
				
			||||||
	struct net_event_listener* listener = monitor_get_listener(fd);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	hub_log(log_trace, "net_remove(): removing socket (fd=%d, pos=%d)", fd, pos);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (!listener)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		/* The socket is not being monitored */
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_remove(): unable to remove socket (fd=%d)", fd);
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	net_event_listener_clear(listener);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (epoll_ctl(epfd, EPOLL_CTL_DEL, fd, &ev) < 0)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_remove(): epoll_ctl error while removing socket (fd=%d)", fd);
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	num_connections--;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
#ifdef DEBUG_EPOLL
 | 
					 | 
				
			||||||
	dump_listeners();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* HAVE_EPOLL */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -1,290 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * uhub - A tiny ADC p2p connection hub
 | 
					 | 
				
			||||||
 * Copyright (C) 2007-2009, Jan Vidar Krey
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 * the Free Software Foundation; either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU General Public License for more details.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "uhub.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef HAVE_KQUEUE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct kevent* events = 0;
 | 
					 | 
				
			||||||
static struct kevent* change = 0;
 | 
					 | 
				
			||||||
static int kfd = -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void set_poll_events(struct kevent* handle, short trigger)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!handle) {
 | 
					 | 
				
			||||||
		hub_log(log_error, "OOOPS!!");
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	memset(handle, 0, sizeof(struct kevent));
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (trigger & evt_accept || trigger & evt_read || trigger & evt_close)
 | 
					 | 
				
			||||||
		handle->filter |= EVFILT_READ;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (trigger & evt_write /* || trigger & evt_accept*/)
 | 
					 | 
				
			||||||
		handle->filter |= EVFILT_WRITE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static short get_poll_events(struct kevent* handle)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	short trig = handle->flags;
 | 
					 | 
				
			||||||
	short evt  = 0;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (trig & EVFILT_READ)
 | 
					 | 
				
			||||||
		evt |= evt_read;
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
	if (trig & EVFILT_WRITE)
 | 
					 | 
				
			||||||
		evt |= evt_write;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (trig & EV_EOF)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		evt |= evt_close;
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		if (handle->fflags)
 | 
					 | 
				
			||||||
			evt |= evt_error;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (handle->filter == -1)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		evt |= evt_error;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (handle->data)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		evt |= evt_accept;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (evt)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "Evt: fd=%d, filter=%d, flags=%d, fflags=%d, data=%d evt=%#x", handle->ident, handle->filter, handle->flags, handle->fflags, (int) handle->data, evt);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	return evt;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_initialize(int capacity)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int i;
 | 
					 | 
				
			||||||
	max_connections = capacity;
 | 
					 | 
				
			||||||
	num_connections = 0;
 | 
					 | 
				
			||||||
	kfd = kqueue();
 | 
					 | 
				
			||||||
	if (kfd == -1)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_initialize(): kqueue failed");
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	events = (void*) hub_malloc_zero(sizeof(struct kevent) * max_connections);
 | 
					 | 
				
			||||||
	if (!events)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_initialize(): hub_malloc failed");
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	change = (void*) hub_malloc_zero(sizeof(struct kevent) * max_connections);
 | 
					 | 
				
			||||||
	if (!events)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_initialize(): hub_malloc failed");
 | 
					 | 
				
			||||||
		hub_free(events);
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	listeners = (void*) hub_malloc_zero(sizeof(struct net_event_listener) * max_connections);
 | 
					 | 
				
			||||||
	if (!listeners)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_initialize(): hub_malloc failed");
 | 
					 | 
				
			||||||
		hub_free(change);
 | 
					 | 
				
			||||||
		hub_free(events);
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	for (i = 0; i < max_connections; i++)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		listeners[i].fd = -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	net_stats_initialize();
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_shutdown()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (kfd != -1) {
 | 
					 | 
				
			||||||
		return close(kfd);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	hub_free(events);
 | 
					 | 
				
			||||||
	hub_free(change);
 | 
					 | 
				
			||||||
	hub_free(listeners);
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_wait(int timeout_ms)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int fired, n, max, ret;
 | 
					 | 
				
			||||||
	struct net_event_listener* listener;
 | 
					 | 
				
			||||||
	struct timespec timeout = { (timeout_ms / 1000), (timeout_ms % 1000) * 1000 };
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	fired = kevent(kfd, events, num_connections, change, num_connections, &timeout);
 | 
					 | 
				
			||||||
	if (fired == -1) {
 | 
					 | 
				
			||||||
		if (errno != EINTR)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			hub_log(log_error, "net_wait(): kevent failed");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	for (n = 0; n < fired; n++)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		listener = (struct net_event_listener*) events[n].udata;
 | 
					 | 
				
			||||||
		if (listener)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			listener->revents = get_poll_events(&events[n]);
 | 
					 | 
				
			||||||
			hub_log(log_dump, "net_wait(): kqueue event detected (fd=%d, evt=%d, ptr=%p)", listener->fd, listener->revents, listener);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	max = num_connections;
 | 
					 | 
				
			||||||
	for (n = 0; n < max; n++)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		listener = &listeners[n];
 | 
					 | 
				
			||||||
		if (listener && listener->fd != -1 && listener->revents != 0)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			hub_log(log_dump, "net_wait(): kqueue trigger call  (fd=%d, evt=%d, ptr=%p)", listener->fd, listener->revents, listener);
 | 
					 | 
				
			||||||
			ret = listener->handler(listener);
 | 
					 | 
				
			||||||
			listener->revents = 0;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_add(int fd, short events_, void* data, net_event_handler_t handler)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct kevent* event;
 | 
					 | 
				
			||||||
	struct net_event_listener* listener = monitor_get_listener(fd);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	hub_log(log_trace, "net_add(): adding socket (fd=%d)", fd);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (listener)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		/* Already added! */
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	listener = monitor_get_free_listener();
 | 
					 | 
				
			||||||
	if (!listener)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_add(): unable to poll more sockets");
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	net_event_listener_set(listener, fd, events_, data, handler);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	event = &events[pos];
 | 
					 | 
				
			||||||
	set_poll_events(event, events_);
 | 
					 | 
				
			||||||
	event->ident = fd;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	event->flags |= EV_ADD;
 | 
					 | 
				
			||||||
	event->flags |= EV_ONESHOT;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
#ifdef __APPLE__
 | 
					 | 
				
			||||||
	 event->flags |= EV_ENABLE;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	event->udata = listener;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	num_connections++;
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_modify(int fd, short events_)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct kevent* event;
 | 
					 | 
				
			||||||
	struct net_event_listener* listener = monitor_get_listener(fd);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	hub_log(log_trace, "net_modify(): modifying socket (fd=%d)", fd);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (!listener)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		/* The socket is not being monitored */
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_modify(): unable to find socket (fd=%d)", fd);
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	event = &events[pos];
 | 
					 | 
				
			||||||
	// set_poll_events(event, events_);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	event->ident = fd;
 | 
					 | 
				
			||||||
	event->flags |= EV_ADD;
 | 
					 | 
				
			||||||
	event->flags |= EV_ONESHOT;
 | 
					 | 
				
			||||||
#ifdef __APPLE__
 | 
					 | 
				
			||||||
	event->flags |= EV_ENABLE;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int net_remove(int fd)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct kevent* event;
 | 
					 | 
				
			||||||
	struct net_event_listener* listener = monitor_get_listener(fd);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	hub_log(log_trace, "net_remove(): removing socket (fd=%d)", fd);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (!listener)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		/* The socket is not being monitored */
 | 
					 | 
				
			||||||
		hub_log(log_error, "net_remove(): unable to remove socket (fd=%d)", fd);
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	net_event_listener_clear(listener);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	event = &events[pos];
 | 
					 | 
				
			||||||
	event->ident = fd;
 | 
					 | 
				
			||||||
	event->filter = 0;
 | 
					 | 
				
			||||||
	event->flags = EV_DELETE;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __APPLE__
 | 
					 | 
				
			||||||
	event->flasg |= EV_DISABLE;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	event->fflags = 0;
 | 
					 | 
				
			||||||
	event->data = 0;
 | 
					 | 
				
			||||||
	event->udata = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	num_connections--;
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* HAVE_KQUEUE */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -40,16 +40,16 @@ int net_initialize()
 | 
				
			|||||||
		struct WSAData wsa;
 | 
							struct WSAData wsa;
 | 
				
			||||||
		if (WSAStartup(MAKEWORD(2, 2), &wsa) != NO_ERROR)
 | 
							if (WSAStartup(MAKEWORD(2, 2), &wsa) != NO_ERROR)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_error, "Unable to initialize winsock.");
 | 
								LOG_ERROR("Unable to initialize winsock.");
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
#endif /* WINSOCK */
 | 
					#endif /* WINSOCK */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		hub_log(log_trace, "Initializing network monitor.");
 | 
							LOG_TRACE("Initializing network monitor.");
 | 
				
			||||||
		net_stats_initialize();
 | 
							net_stats_initialize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef SSL_SUPPORT
 | 
					#ifdef SSL_SUPPORT
 | 
				
			||||||
		hub_log(log_trace, "Initializing OpenSSL...");
 | 
							LOG_TRACE("Initializing OpenSSL...");
 | 
				
			||||||
		SSL_load_error_strings();
 | 
							SSL_load_error_strings();
 | 
				
			||||||
		SSL_library_init();
 | 
							SSL_library_init();
 | 
				
			||||||
		OpenSSL_add_all_algorithms();
 | 
							OpenSSL_add_all_algorithms();
 | 
				
			||||||
@ -66,7 +66,7 @@ int net_destroy()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	if (net_initialized)
 | 
						if (net_initialized)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_trace, "Shutting down network monitor");
 | 
							LOG_TRACE("Shutting down network monitor");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef SSL_SUPPORT
 | 
					#ifdef SSL_SUPPORT
 | 
				
			||||||
		/* FIXME: Shutdown OpenSSL here. */
 | 
							/* FIXME: Shutdown OpenSSL here. */
 | 
				
			||||||
@ -84,7 +84,7 @@ int net_destroy()
 | 
				
			|||||||
static void net_error_out(int fd, const char* func)
 | 
					static void net_error_out(int fd, const char* func)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int err = net_error();
 | 
						int err = net_error();
 | 
				
			||||||
	hub_log(log_error, "%s, fd=%d: %s (%d)", func, fd, net_error_string(err), err);
 | 
						LOG_ERROR("%s, fd=%d: %s (%d)", func, fd, net_error_string(err), err);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int net_error()
 | 
					int net_error()
 | 
				
			||||||
@ -379,7 +379,7 @@ int net_is_ipv6_supported()
 | 
				
			|||||||
			if (net_error() == EAFNOSUPPORT)
 | 
								if (net_error() == EAFNOSUPPORT)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				hub_log(log_trace, "net_is_ipv6_supported(): IPv6 is not supported on this system.");
 | 
									LOG_TRACE("net_is_ipv6_supported(): IPv6 is not supported on this system.");
 | 
				
			||||||
				is_ipv6_supported = 0;
 | 
									is_ipv6_supported = 0;
 | 
				
			||||||
				return 0;
 | 
									return 0;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -392,7 +392,7 @@ int net_is_ipv6_supported()
 | 
				
			|||||||
			int off = 0;
 | 
								int off = 0;
 | 
				
			||||||
			if (net_setsockopt(ret, IPPROTO_IPV6, SOCK_DUAL_STACK_OPT, (char*) &off, sizeof(off)) < 0)
 | 
								if (net_setsockopt(ret, IPPROTO_IPV6, SOCK_DUAL_STACK_OPT, (char*) &off, sizeof(off)) < 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				hub_log(log_error, "net_socket_create(): Dual stack IPv6/IPv4 is not supported.");
 | 
									LOG_ERROR("net_socket_create(): Dual stack IPv6/IPv4 is not supported.");
 | 
				
			||||||
				is_ipv6_supported = 0;
 | 
									is_ipv6_supported = 0;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
@ -424,7 +424,7 @@ int net_socket_create(int af, int type, int protocol)
 | 
				
			|||||||
		int off = 0;
 | 
							int off = 0;
 | 
				
			||||||
		if (net_setsockopt(sd, IPPROTO_IPV6, SOCK_DUAL_STACK_OPT, (char*) &off, sizeof(off)) < 0)
 | 
							if (net_setsockopt(sd, IPPROTO_IPV6, SOCK_DUAL_STACK_OPT, (char*) &off, sizeof(off)) < 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_error, "net_socket_create():  Cannot set socket to dual stack mode IPv6/IPv4 (%d - %s).", net_error(), net_error_string(net_error()));
 | 
								LOG_ERROR("net_socket_create():  Cannot set socket to dual stack mode IPv6/IPv4 (%d - %s).", net_error(), net_error_string(net_error()));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										20
									
								
								src/uhub.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/uhub.h
									
									
									
									
									
								
							@ -157,23 +157,25 @@
 | 
				
			|||||||
extern "C" {
 | 
					extern "C" {
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "util/memory.h"
 | 
					 | 
				
			||||||
#include "util/misc.h"
 | 
					 | 
				
			||||||
#include "core/eventid.h"
 | 
					 | 
				
			||||||
#include "core/eventqueue.h"
 | 
					 | 
				
			||||||
#include "util/ipcalc.h"
 | 
					#include "util/ipcalc.h"
 | 
				
			||||||
#include "util/list.h"
 | 
					#include "util/list.h"
 | 
				
			||||||
 | 
					#include "util/log.h"
 | 
				
			||||||
 | 
					#include "util/memory.h"
 | 
				
			||||||
 | 
					#include "util/misc.h"
 | 
				
			||||||
 | 
					#include "util/tiger.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "adc/sid.h"
 | 
					#include "adc/sid.h"
 | 
				
			||||||
 | 
					#include "adc/message.h"
 | 
				
			||||||
#include "network/network.h"
 | 
					#include "network/network.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "core/auth.h"
 | 
				
			||||||
 | 
					#include "core/config.h"
 | 
				
			||||||
 | 
					#include "core/eventid.h"
 | 
				
			||||||
 | 
					#include "core/eventqueue.h"
 | 
				
			||||||
#include "core/netevent.h"
 | 
					#include "core/netevent.h"
 | 
				
			||||||
#include "core/hubio.h"
 | 
					#include "core/hubio.h"
 | 
				
			||||||
#include "core/auth.h"
 | 
					 | 
				
			||||||
#include "util/tiger.h"
 | 
					 | 
				
			||||||
#include "core/config.h"
 | 
					 | 
				
			||||||
#include "util/log.h"
 | 
					 | 
				
			||||||
#include "core/user.h"
 | 
					#include "core/user.h"
 | 
				
			||||||
#include "core/usermanager.h"
 | 
					#include "core/usermanager.h"
 | 
				
			||||||
#include "adc/message.h"
 | 
					 | 
				
			||||||
#include "core/route.h"
 | 
					#include "core/route.h"
 | 
				
			||||||
#include "core/hub.h"
 | 
					#include "core/hub.h"
 | 
				
			||||||
#include "core/commands.h"
 | 
					#include "core/commands.h"
 | 
				
			||||||
 | 
				
			|||||||
@ -147,7 +147,7 @@ int ip_convert_address(const char* text_address, int port, struct sockaddr* addr
 | 
				
			|||||||
		addr6.sin6_port = htons(port);
 | 
							addr6.sin6_port = htons(port);
 | 
				
			||||||
		if (net_string_to_address(AF_INET6, taddr, &addr6.sin6_addr) <= 0)
 | 
							if (net_string_to_address(AF_INET6, taddr, &addr6.sin6_addr) <= 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "Unable to convert socket address (ipv6)");
 | 
								LOG_ERROR("Unable to convert socket address (ipv6)");
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -163,7 +163,7 @@ int ip_convert_address(const char* text_address, int port, struct sockaddr* addr
 | 
				
			|||||||
		addr4.sin_port = htons(port);
 | 
							addr4.sin_port = htons(port);
 | 
				
			||||||
		if (net_string_to_address(AF_INET, taddr, &addr4.sin_addr) <= 0)
 | 
							if (net_string_to_address(AF_INET, taddr, &addr4.sin_addr) <= 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_log(log_fatal, "Unable to convert socket address (ipv4)");
 | 
								LOG_ERROR("Unable to convert socket address (ipv4)");
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		memcpy(addr, &addr4, sockaddr_size);
 | 
							memcpy(addr, &addr4, sockaddr_size);
 | 
				
			||||||
@ -219,7 +219,7 @@ int ip_mask_create_left(int af, int bits, struct ip_addr_encap* result)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#ifdef IP_CALC_DEBUG
 | 
					#ifdef IP_CALC_DEBUG
 | 
				
			||||||
	char* r_str = hub_strdup(ip_convert_to_string(result));
 | 
						char* r_str = hub_strdup(ip_convert_to_string(result));
 | 
				
			||||||
	hub_log(log_debug, "Created left mask: %s", r_str);
 | 
						LOG_DUMP("Created left mask: %s", r_str);
 | 
				
			||||||
	hub_free(r_str);
 | 
						hub_free(r_str);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -272,7 +272,7 @@ int ip_mask_create_right(int af, int bits, struct ip_addr_encap* result)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
#ifdef IP_CALC_DEBUG
 | 
					#ifdef IP_CALC_DEBUG
 | 
				
			||||||
	char* r_str = hub_strdup(ip_convert_to_string(result));
 | 
						char* r_str = hub_strdup(ip_convert_to_string(result));
 | 
				
			||||||
	hub_log(log_debug, "Created right mask: %s", r_str);
 | 
						LOG_DUMP("Created right mask: %s", r_str);
 | 
				
			||||||
	hub_free(r_str);
 | 
						hub_free(r_str);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -405,7 +405,7 @@ int ip_compare(struct ip_addr_encap* a, struct ip_addr_encap* b)
 | 
				
			|||||||
#ifdef IP_CALC_DEBUG
 | 
					#ifdef IP_CALC_DEBUG
 | 
				
			||||||
	char* a_str = hub_strdup(ip_convert_to_string(a));
 | 
						char* a_str = hub_strdup(ip_convert_to_string(a));
 | 
				
			||||||
	char* b_str = hub_strdup(ip_convert_to_string(b));
 | 
						char* b_str = hub_strdup(ip_convert_to_string(b));
 | 
				
			||||||
	hub_log(log_debug, "Comparing IPs '%s' AND '%s' => %d", a_str, b_str, ret);
 | 
						LOG_DUMP("Comparing IPs '%s' AND '%s' => %d", a_str, b_str, ret);
 | 
				
			||||||
	hub_free(a_str);
 | 
						hub_free(a_str);
 | 
				
			||||||
	hub_free(b_str);
 | 
						hub_free(b_str);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -33,6 +33,31 @@ enum log_verbosity {
 | 
				
			|||||||
	log_protocol = 9,
 | 
						log_protocol = 9,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LOG_FATAL(format, ...)  hub_log(log_fatal,    format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					#define LOG_ERROR(format, ...)  hub_log(log_error,    format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					#define LOG_WARN(format, ...)   hub_log(log_warning,  format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					#define LOG_USER(format, ...)   hub_log(log_user,     format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					#define LOG_INFO(format, ...)   hub_log(log_info,     format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef DEBUG
 | 
				
			||||||
 | 
					# define LOG_DEBUG(format, ...)  hub_log(log_debug,    format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					# define LOG_TRACE(format, ...)  hub_log(log_trace,    format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					# define LOG_DEBUG(format, ...)  do { } while(0)
 | 
				
			||||||
 | 
					# define LOG_TRACE(format, ...)  do { } while(0)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef LOWLEVEL_DEBUG
 | 
				
			||||||
 | 
					# define LOG_DUMP(format, ...)   hub_log(log_dump,     format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					# define LOG_MEMORY(format, ...) hub_log(log_memory,   format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					# define LOG_PROTO(format, ...)  hub_log(log_protocol, format, ## __VA_ARGS__)
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					# define LOG_DUMP(format, ...)   do { } while(0)
 | 
				
			||||||
 | 
					# define LOG_MEMORY(format, ...) do { } while(0)
 | 
				
			||||||
 | 
					# define LOG_PROTO(format, ...)  do { } while(0)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Specify a minimum log verbosity for what messages should
 | 
					 * Specify a minimum log verbosity for what messages should
 | 
				
			||||||
 * be printed in the log.
 | 
					 * be printed in the log.
 | 
				
			||||||
 | 
				
			|||||||
@ -47,7 +47,7 @@ void internal_debug_print_leaks()
 | 
				
			|||||||
	size_t n = 0;
 | 
						size_t n = 0;
 | 
				
			||||||
	size_t leak = 0;
 | 
						size_t leak = 0;
 | 
				
			||||||
	size_t count = 0;
 | 
						size_t count = 0;
 | 
				
			||||||
	hub_log(log_memory, "--- exit (allocs: %d, size: %zu) ---", hub_alloc_count, hub_alloc_size);
 | 
						LOG_MEMORY("--- exit (allocs: %d, size: %zu) ---", hub_alloc_count, hub_alloc_size);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	for (; n < UHUB_MAX_ALLOCS; n++)
 | 
						for (; n < UHUB_MAX_ALLOCS; n++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -55,11 +55,11 @@ void internal_debug_print_leaks()
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			leak += hub_allocs[n].size;
 | 
								leak += hub_allocs[n].size;
 | 
				
			||||||
			count++;
 | 
								count++;
 | 
				
			||||||
			hub_log(log_memory, "leak %p size: %zu (bt: %p %p)", hub_allocs[n].ptr, hub_allocs[n].size, hub_allocs[n].stack1, hub_allocs[n].stack2);
 | 
								LOG_MEMORY("leak %p size: %zu (bt: %p %p)", hub_allocs[n].ptr, hub_allocs[n].size, hub_allocs[n].stack1, hub_allocs[n].stack2);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	hub_log(log_memory, "--- done (allocs: %d, size: %zu, peak: %d/%zu, oom: %zu) ---", count, leak, hub_alloc_peak_count, hub_alloc_peak_size, hub_alloc_oom);
 | 
						LOG_MEMORY("--- done (allocs: %d, size: %zu, peak: %d/%zu, oom: %zu) ---", count, leak, hub_alloc_peak_count, hub_alloc_peak_size, hub_alloc_oom);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif /* REALTIME_MALLOC_TRACKING */
 | 
					#endif /* REALTIME_MALLOC_TRACKING */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -73,7 +73,7 @@ void* internal_debug_mem_malloc(size_t size, const char* where)
 | 
				
			|||||||
	/* Make sure the malloc info struct is initialized */
 | 
						/* Make sure the malloc info struct is initialized */
 | 
				
			||||||
	if (!hub_alloc_count)
 | 
						if (!hub_alloc_count)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_memory, "--- start ---");
 | 
							LOG_MEMORY("--- start ---");
 | 
				
			||||||
		for (n = 0; n < UHUB_MAX_ALLOCS; n++)
 | 
							for (n = 0; n < UHUB_MAX_ALLOCS; n++)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			hub_allocs[n].ptr    = 0;
 | 
								hub_allocs[n].ptr    = 0;
 | 
				
			||||||
@ -107,14 +107,14 @@ void* internal_debug_mem_malloc(size_t size, const char* where)
 | 
				
			|||||||
				hub_alloc_peak_count = MAX(hub_alloc_count, hub_alloc_peak_count);
 | 
									hub_alloc_peak_count = MAX(hub_alloc_count, hub_alloc_peak_count);
 | 
				
			||||||
				hub_alloc_peak_size  = MAX(hub_alloc_size,  hub_alloc_peak_size);
 | 
									hub_alloc_peak_size  = MAX(hub_alloc_size,  hub_alloc_peak_size);
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
				hub_log(log_memory, "%s %p (%d bytes) (bt: %p %p) {allocs: %d, size: %zu}", where, ptr, (int) size, hub_allocs[n].stack1, hub_allocs[n].stack2, hub_alloc_count, hub_alloc_size);
 | 
									LOG_MEMORY("%s %p (%d bytes) (bt: %p %p) {allocs: %d, size: %zu}", where, ptr, (int) size, hub_allocs[n].stack1, hub_allocs[n].stack2, hub_alloc_count, hub_alloc_size);
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_memory, "%s *** OOM for %d bytes", where, size);
 | 
							LOG_MEMORY("%s *** OOM for %d bytes", where, size);
 | 
				
			||||||
		hub_alloc_oom++;
 | 
							hub_alloc_oom++;
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -141,7 +141,7 @@ void internal_debug_mem_free(void* ptr)
 | 
				
			|||||||
			hub_allocs[n].size   = 0;
 | 
								hub_allocs[n].size   = 0;
 | 
				
			||||||
			hub_allocs[n].stack1 = 0;
 | 
								hub_allocs[n].stack1 = 0;
 | 
				
			||||||
			hub_allocs[n].stack2 = 0;
 | 
								hub_allocs[n].stack2 = 0;
 | 
				
			||||||
			hub_log(log_memory, "free %p (bt: %p %p) {allocs: %d, size: %zu}", ptr, stack1, stack2, hub_alloc_count, hub_alloc_size);
 | 
								LOG_MEMORY("free %p (bt: %p %p) {allocs: %d, size: %zu}", ptr, stack1, stack2, hub_alloc_count, hub_alloc_size);
 | 
				
			||||||
			malloc_slot = n;
 | 
								malloc_slot = n;
 | 
				
			||||||
			free(ptr);
 | 
								free(ptr);
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
@ -150,7 +150,7 @@ void internal_debug_mem_free(void* ptr)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	malloc_slot = -1;
 | 
						malloc_slot = -1;
 | 
				
			||||||
	abort();
 | 
						abort();
 | 
				
			||||||
	hub_log(log_memory, "free %p *** NOT ALLOCATED *** (bt: %p %p)", ptr, stack1, stack2);
 | 
						LOG_MEMORY("free %p *** NOT ALLOCATED *** (bt: %p %p)", ptr, stack1, stack2);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	free(ptr);
 | 
						free(ptr);
 | 
				
			||||||
#endif /* REALTIME_MALLOC_TRACKING */
 | 
					#endif /* REALTIME_MALLOC_TRACKING */
 | 
				
			||||||
 | 
				
			|||||||
@ -179,26 +179,26 @@ int file_read_lines(const char* file, void* data, file_line_handler_t handler)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	memset(buf, 0, MAX_RECV_BUF);
 | 
						memset(buf, 0, MAX_RECV_BUF);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hub_log(log_trace, "Opening file %s for line reading.", file);
 | 
						LOG_TRACE("Opening file %s for line reading.", file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fd = open(file, 0);
 | 
						fd = open(file, 0);
 | 
				
			||||||
	if (fd == -1)
 | 
						if (fd == -1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_error, "Unable to open file %s: %s", file, strerror(errno));
 | 
							LOG_ERROR("Unable to open file %s: %s", file, strerror(errno));
 | 
				
			||||||
		return -2;
 | 
							return -2;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	ret = read(fd, buf, MAX_RECV_BUF);
 | 
						ret = read(fd, buf, MAX_RECV_BUF);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		hub_log(log_error, "Unable to read from file %s: %s", file, strerror(errno));
 | 
							LOG_ERROR("Unable to read from file %s: %s", file, strerror(errno));
 | 
				
			||||||
		close(fd);
 | 
							close(fd);
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else  if (ret == 0)
 | 
						else  if (ret == 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		close(fd);
 | 
							close(fd);
 | 
				
			||||||
		hub_log(log_warning, "File is empty.");
 | 
							LOG_WARN("File is empty.");
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
@ -212,7 +212,7 @@ int file_read_lines(const char* file, void* data, file_line_handler_t handler)
 | 
				
			|||||||
			pos[0] = '\0';
 | 
								pos[0] = '\0';
 | 
				
			||||||
			if (*start)
 | 
								if (*start)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				hub_log(log_dump, "Line: %s", start);
 | 
									LOG_DUMP("Line: %s", start);
 | 
				
			||||||
				if (handler(start, line_count+1, data) < 0)
 | 
									if (handler(start, line_count+1, data) < 0)
 | 
				
			||||||
					return -1;
 | 
										return -1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -223,7 +223,7 @@ int file_read_lines(const char* file, void* data, file_line_handler_t handler)
 | 
				
			|||||||
		if (*start)
 | 
							if (*start)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			buf[strlen(start)] = 0;
 | 
								buf[strlen(start)] = 0;
 | 
				
			||||||
			hub_log(log_dump, "Line: %s", start);
 | 
								LOG_DUMP("Line: %s", start);
 | 
				
			||||||
			if (handler(start, line_count+1, data) < 0)
 | 
								if (handler(start, line_count+1, data) < 0)
 | 
				
			||||||
				return -1;
 | 
									return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user