diff options
43 files changed, 1408 insertions, 1332 deletions
diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..32ca6ad --- /dev/null +++ b/.clang-format @@ -0,0 +1,190 @@ +# +# Configuration for clang-format 11.0. +# +UseTab: Always +TabWidth: 8 +IndentWidth: 8 +ContinuationIndentWidth: 8 +ColumnLimit: 80 + +# C Language specifics +Language: Cpp + +# Align parameters on the open bracket +# someLongFunction(argument1, +#                  argument2); +AlignAfterOpenBracket: Align + +# Don't align consecutive assignments +# int aaaa = 12; +# int b = 14; +AlignConsecutiveAssignments: false + +# Don't align consecutive declarations +# int aaaa = 12; +# double b = 3.14; +AlignConsecutiveDeclarations: false + +# Align consecutive macros +# #define SHORT_NAME       42 +# #define LONGER_NAME      0x007f +# #define EVEN_LONGER_NAME (2) +# #define foo(x)           (x * x) +# #define bar(y, z)        (y + z) +AlignConsecutiveMacros: true + +# Align escaped newlines as far right as possible +# #define A                                                                    \ +#   int aaaa;                                                                  \ +#   int b;                                                                     \ +#  int dddddddddd; +AlignEscapedNewlines: Right + +# Align operands of binary and ternary expressions +# int aaa = bbbbbbbbbbb + +#           cccccc; +AlignOperands: true + +# Don't align trailing comments +# int a; // Comment a +# int b = 2; // Comment b +AlignTrailingComments: false + +# By default don't allow putting parameters onto the next line +# myFunction(foo, bar, baz); +AllowAllParametersOfDeclarationOnNextLine: false + +# Don't allow short braced statements to be on a single line +# if (a)           not       if (a) return; +#   return; +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false + +# By default don't add a line break after the return type of top-level functions +# int foo(); +AlwaysBreakAfterReturnType: None + +# Pack as many parameters or arguments onto the same line as possible +# int myFunction(int aaaaaaaaaaaa, int bbbbbbbb, +#                int cccc); +BinPackArguments: true +BinPackParameters: true + +# Attach braces to surrounding context except break before braces on function +# definitions. +# void foo() +# { +#    if (true) { +#    } else { +#    } +# }; +BreakBeforeBraces: Linux + +# Break after operators +# int valuve = aaaaaaaaaaaaa + +#              bbbbbb - +#              ccccccccccc; +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: false + +# Don't break string literals +BreakStringLiterals: false + +# Use the same indentation level as for the switch statement. +# Switch statement body is always indented one level more than case labels. +IndentCaseLabels: false + +# Don't indent a function definition or declaration if it is wrapped after the +# type +IndentWrappedFunctionNames: false + +# Align pointer to the right +# int *a; +PointerAlignment: Right + +# Don't insert a space after a cast +# x = (int32)y;    not    x = (int32) y; +SpaceAfterCStyleCast: false + +# Insert spaces before and after assignment operators +# int a = 5;    not    int a=5; +# a += 42;             a+=42; +SpaceBeforeAssignmentOperators: true + +# Put a space before opening parentheses only after control statement keywords. +# void f() { +#   if (true) { +#     f(); +#   } +# } +SpaceBeforeParens: ControlStatementsExceptForEachMacros + +# Don't insert spaces inside empty '()' +SpaceInEmptyParentheses: false + +# The number of spaces before trailing line comments (// - comments). +# This does not affect trailing block comments (/* - comments). +SpacesBeforeTrailingComments: 1 + +# Don't insert spaces in casts +# x = (int32) y;    not    x = ( int32 ) y; +SpacesInCStyleCastParentheses: false + +# Don't insert spaces inside container literals +# var arr = [1, 2, 3];    not    var arr = [ 1, 2, 3 ]; +SpacesInContainerLiterals: false + +# Don't insert spaces after '(' or before ')' +# f(arg);    not    f( arg ); +SpacesInParentheses: false + +# Don't insert spaces after '[' or before ']' +# int a[5];    not    int a[ 5 ]; +SpacesInSquareBrackets: false + +# Insert a space after '{' and before '}' in struct initializers +Cpp11BracedListStyle: false + +# A list of macros that should be interpreted as foreach loops instead of as +# function calls. Taken from: +#   git grep -h '^#define [^[:space:]]*for_each[^[:space:]]*(' \ +#   | sed "s,^#define \([^[:space:]]*for_each[^[:space:]]*\)(.*$,  - '\1'," \ +#   | sort | uniq +ForEachMacros: +  - 'list_for_each' +  - 'list_for_each_continue' +  - 'list_for_each_prev' +  - 'list_for_each_safe' +  - 'list_for_each_prev_safe' +  - 'list_for_each_entry' +  - 'list_for_each_entry_reverse' +  - 'list_for_each_entry_continue' +  - 'list_for_each_entry_continue_reverse' +  - 'list_for_each_entry_from' +  - 'list_for_each_entry_from_reverse' +  - 'list_for_each_entry_safe' +  - 'list_for_each_entry_safe_continue' +  - 'list_for_each_entry_safe_from' +  - 'list_for_each_entry_safe_reverse' + +# The maximum number of consecutive empty lines to keep. +MaxEmptyLinesToKeep: 1 + +# No empty line at the start of a block. +KeepEmptyLinesAtTheStartOfBlocks: false + +# Penalties +# This decides what order things should be done if a line is too long +PenaltyBreakAssignment: 10 +PenaltyBreakBeforeFirstCallParameter: 30 +PenaltyBreakComment: 10 +PenaltyBreakFirstLessLess: 0 +PenaltyBreakString: 10 +PenaltyExcessCharacter: 100 +PenaltyReturnTypeOnItsOwnLine: 60 + +# Don't sort #include's +SortIncludes: false diff --git a/minecctl/mc-commands.c b/minecctl/mc-commands.c index 0ac20d0..d4d2846 100644 --- a/minecctl/mc-commands.c +++ b/minecctl/mc-commands.c @@ -7,8 +7,7 @@  #include "misc.h"  #include "mc-protocol.h" -bool -do_mc_pcount(struct cfg *cfg, unsigned *online, unsigned *max) +bool do_mc_pcount(struct cfg *cfg, unsigned *online, unsigned *max)  {  	struct server *server;  	struct saddr *saddr; @@ -24,7 +23,7 @@ do_mc_pcount(struct cfg *cfg, unsigned *online, unsigned *max)  	if (fd < 0) {  		error("%s: unable to connect", server->name);  		return false; -	}	 +	}  	/* FIXME: connect_any needs to indicate the address it used */  	saddr = list_first_entry(&server->mc_addrs, struct saddr, list); @@ -33,7 +32,8 @@ do_mc_pcount(struct cfg *cfg, unsigned *online, unsigned *max)  		goto out;  	} -	if (!mc_protocol_create_status_request(buf, sizeof(buf), &plen, saddr)) { +	if (!mc_protocol_create_status_request(buf, sizeof(buf), &plen, +					       saddr)) {  		error("Failed to create req");  		goto out;  	} @@ -64,7 +64,7 @@ do_mc_pcount(struct cfg *cfg, unsigned *online, unsigned *max)  			break;  		}  	} -	 +  	if (!mc_protocol_parse_status_reply(buf, off, online, max)) {  		error("Failed to get player count");  		return false; @@ -74,4 +74,3 @@ out:  	close(fd);  	return rv;  } - diff --git a/minecctl/minecctl-commands.h b/minecctl/minecctl-commands.h index 444204f..2805a51 100644 --- a/minecctl/minecctl-commands.h +++ b/minecctl/minecctl-commands.h @@ -16,35 +16,41 @@ enum commands {  static struct command_list {  	const char *name;  	enum commands cmd; -} command_list[] = { -	{ -		.name = "list", -		.cmd = CMD_LIST, -	}, { -		.name = "status", -		.cmd = CMD_STATUS, -	}, { -		.name = "ping", -		.cmd = CMD_PING, -	}, { -		.name = "stop", -		.cmd = CMD_STOP, -	}, { -		.name = "stopall", -		.cmd = CMD_STOPALL, -	}, { -		.name = "pcount", -		.cmd = CMD_PCOUNT, -	}, { -		.name = "cmd", -		.cmd = CMD_COMMAND, -	}, { -		.name = "console", -		.cmd = CMD_CONSOLE, -	}, { -		.name = NULL, -		.cmd = CMD_INVALID, -	} -}; +} command_list[] = { { +			     .name = "list", +			     .cmd = CMD_LIST, +		     }, +		     { +			     .name = "status", +			     .cmd = CMD_STATUS, +		     }, +		     { +			     .name = "ping", +			     .cmd = CMD_PING, +		     }, +		     { +			     .name = "stop", +			     .cmd = CMD_STOP, +		     }, +		     { +			     .name = "stopall", +			     .cmd = CMD_STOPALL, +		     }, +		     { +			     .name = "pcount", +			     .cmd = CMD_PCOUNT, +		     }, +		     { +			     .name = "cmd", +			     .cmd = CMD_COMMAND, +		     }, +		     { +			     .name = "console", +			     .cmd = CMD_CONSOLE, +		     }, +		     { +			     .name = NULL, +			     .cmd = CMD_INVALID, +		     } };  #endif diff --git a/minecctl/minecctl.c b/minecctl/minecctl.c index b93f87b..5ac3942 100644 --- a/minecctl/minecctl.c +++ b/minecctl/minecctl.c @@ -22,8 +22,7 @@  #include "config-parser.h"  #include "config.h" -static void -dump_config(struct cfg *cfg) +static void dump_config(struct cfg *cfg)  {  	/* FIXME: return unless debugging enabled */  	struct server *server; @@ -44,7 +43,8 @@ dump_config(struct cfg *cfg)  		info("    name             : %s", server->name);  		info("    filename         : %s", server->filename);  		info("    rcon_password    : %s", server->rcon_password); -		info("    file_read        : %s", server->file_read ? "yes" : "no"); +		info("    file_read        : %s", +		     server->file_read ? "yes" : "no");  		list_for_each_entry(saddr, &server->rcon_addrs, list)  			info("    * rcon addr   : %s", saddr->addrstr);  		list_for_each_entry(saddr, &server->mc_addrs, list) @@ -54,8 +54,7 @@ dump_config(struct cfg *cfg)  	info("=============");  } -_noreturn_ static void -usage(bool no_error) +_noreturn_ static void usage(bool no_error)  {  	info("Usage: %s [OPTION...] COMMAND\n"  	     "\n" @@ -92,8 +91,7 @@ usage(bool no_error)  	exit(no_error ? EXIT_FAILURE : EXIT_SUCCESS);  } -static bool -str_to_addrs(const char *str, struct list_head *list) +static bool str_to_addrs(const char *str, struct list_head *list)  {  	struct cfg_value value;  	char *tmp = NULL; @@ -124,8 +122,7 @@ out:  	return rv;  } -static bool -create_server_from_cmdline_args(struct cfg *cfg) +static bool create_server_from_cmdline_args(struct cfg *cfg)  {  	struct server *server; @@ -167,8 +164,8 @@ error:  	return false;  } -static inline void -get_optional_server_arg(struct cfg *cfg, char * const **argv, bool more) +static inline void get_optional_server_arg(struct cfg *cfg, char *const **argv, +					   bool more)  {  	if (!cfg->rcon_addrstr) {  		if (!**argv) { @@ -177,7 +174,8 @@ get_optional_server_arg(struct cfg *cfg, char * const **argv, bool more)  		}  		if (!server_set_default(cfg, **argv)) { -			error("\"%s\" is not a known server or command", **argv); +			error("\"%s\" is not a known server or command", +			      **argv);  			usage(false);  		} @@ -190,8 +188,7 @@ get_optional_server_arg(struct cfg *cfg, char * const **argv, bool more)  	}  } -static void -parse_command(struct cfg *cfg, char * const *argv) +static void parse_command(struct cfg *cfg, char *const *argv)  {  	enum commands cmd = CMD_INVALID; @@ -280,8 +277,7 @@ parse_command(struct cfg *cfg, char * const *argv)  	}  } -static void -parse_cmdline(struct cfg *cfg, int argc, char * const *argv) +static void parse_cmdline(struct cfg *cfg, int argc, char *const *argv)  {  	int c;  	char *e; @@ -299,6 +295,7 @@ parse_cmdline(struct cfg *cfg, int argc, char * const *argv)  	while (true) {  		int option_index = 0; +		/* clang-format off */  		static struct option long_options[] = {  			{ "rcon-password", required_argument,	0, 'p' },  			{ "rcon-address",  required_argument,	0, 'r' }, @@ -309,9 +306,10 @@ parse_cmdline(struct cfg *cfg, int argc, char * const *argv)  			{ "help",	   no_argument,		0, 'h' },  			{ 0,		   0,			0,  0  }  		}; +		/* clang-format on */ -		c = getopt_long(argc, argv, ":p:r:m:c:vfh", -				long_options, &option_index); +		c = getopt_long(argc, argv, ":p:r:m:c:vfh", long_options, +				&option_index);  		if (c == -1)  			break; @@ -362,8 +360,7 @@ parse_cmdline(struct cfg *cfg, int argc, char * const *argv)  	}  } -int -main(int argc, char **argv) +int main(int argc, char **argv)  {  	struct cfg cfg = {  		.servers = LIST_HEAD_INIT(cfg.servers), @@ -401,4 +398,3 @@ out:  	xfree(cfg.cmdstr);  	exit(success ? EXIT_SUCCESS : EXIT_FAILURE);  } - diff --git a/minecctl/minecctl.h b/minecctl/minecctl.h index 60b71b4..259ac52 100644 --- a/minecctl/minecctl.h +++ b/minecctl/minecctl.h @@ -16,4 +16,3 @@ struct cfg {  };  #endif - diff --git a/minecctl/misc-commands.c b/minecctl/misc-commands.c index c64a005..52797da 100644 --- a/minecctl/misc-commands.c +++ b/minecctl/misc-commands.c @@ -5,8 +5,7 @@  #include "rcon-commands.h"  #include "mc-commands.h" -bool -do_list(struct cfg *cfg) +bool do_list(struct cfg *cfg)  {  	struct server *server; @@ -18,8 +17,7 @@ do_list(struct cfg *cfg)  	return true;  } -bool -do_pcount(struct cfg *cfg) +bool do_pcount(struct cfg *cfg)  {  	unsigned x, y; diff --git a/minecctl/misc-commands.h b/minecctl/misc-commands.h index 8270601..1a4363f 100644 --- a/minecctl/misc-commands.h +++ b/minecctl/misc-commands.h @@ -6,4 +6,3 @@ bool do_list(struct cfg *cfg);  bool do_pcount(struct cfg *cfg);  #endif - diff --git a/minecctl/misc.c b/minecctl/misc.c index 72eb03c..8f0761f 100644 --- a/minecctl/misc.c +++ b/minecctl/misc.c @@ -11,8 +11,7 @@  bool use_colors = false;  /* FIXME: Can be shared */ -void -set_use_colors() +void set_use_colors()  {  	int fd;  	const char *e; @@ -37,8 +36,7 @@ set_use_colors()  	use_colors = true;  } -char * -strv_join(char * const *strv) +char *strv_join(char *const *strv)  {  	size_t len = 0;  	char *r, *to; @@ -61,8 +59,7 @@ strv_join(char * const *strv)  	return r;  } -int -connect_any(struct list_head *addrs, bool may_fail) +int connect_any(struct list_head *addrs, bool may_fail)  {  	struct saddr *saddr;  	bool connected = false; @@ -78,13 +75,15 @@ connect_any(struct list_head *addrs, bool may_fail)  	list_for_each_entry(saddr, addrs, list) {  		verbose("Attempting connection to %s", saddr->addrstr); -		sfd = socket(saddr->storage.ss_family, SOCK_STREAM | SOCK_CLOEXEC, 0); +		sfd = socket(saddr->st.ss_family, SOCK_STREAM | SOCK_CLOEXEC, +			     0);  		if (sfd < 0)  			die("socket: %m");  		socket_set_low_latency(sfd, true, true, true); -		if (connect(sfd, (struct sockaddr *)&saddr->storage, saddr->addrlen) < 0) { +		if (connect(sfd, (struct sockaddr *)&saddr->st, +			    saddr->addrlen) < 0) {  			close(sfd);  			continue;  		} @@ -101,8 +100,7 @@ connect_any(struct list_head *addrs, bool may_fail)  	return sfd;  } -char * -ask_password() +char *ask_password()  {  	struct termios old, new;  	char *password = NULL; @@ -139,8 +137,7 @@ ask_password()  	return password;  } -void -free_password(char **password) +void free_password(char **password)  {  	if (!password || !*password)  		return; @@ -150,8 +147,7 @@ free_password(char **password)  	*password = NULL;  } -void -__debug(_unused_ enum debug_lvl lvl, const char *fmt, ...) +void __debug(_unused_ enum debug_lvl lvl, const char *fmt, ...)  {  	va_list ap; @@ -170,8 +166,7 @@ __debug(_unused_ enum debug_lvl lvl, const char *fmt, ...)  		fprintf(stderr, ANSI_NORMAL);  } -_noreturn_ void -__die(const char *fmt, ...) +_noreturn_ void __die(const char *fmt, ...)  {  	va_list ap; @@ -182,8 +177,7 @@ __die(const char *fmt, ...)  	exit(EXIT_FAILURE);  } -void * -__zmalloc(const char *fn, int line, size_t size) +void *__zmalloc(const char *fn, int line, size_t size)  {  	void *ptr; @@ -195,12 +189,12 @@ __zmalloc(const char *fn, int line, size_t size)  	return ptr;  } -char * -__xstrdup(const char *fn, int line, const char *s) +char *__xstrdup(const char *fn, int line, const char *s)  {  	char *ptr; -	assert_die(!empty_str(fn) && line > 0 && !empty_str(s), "invalid arguments"); +	assert_die(!empty_str(fn) && line > 0 && !empty_str(s), +		   "invalid arguments");  	ptr = strdup(s);  	if (!ptr) @@ -208,12 +202,12 @@ __xstrdup(const char *fn, int line, const char *s)  	return ptr;  } -char * -__xstrndup(const char *fn, int line, const char *s, size_t n) +char *__xstrndup(const char *fn, int line, const char *s, size_t n)  {  	char *ptr; -	assert_die(!empty_str(fn) && line > 0 && !empty_str(s) && n > 0, "invalid arguments"); +	assert_die(!empty_str(fn) && line > 0 && !empty_str(s) && n > 0, +		   "invalid arguments");  	ptr = strndup(s, n);  	if (ptr) @@ -221,11 +215,9 @@ __xstrndup(const char *fn, int line, const char *s, size_t n)  	return ptr;  } -void -__xfree(const char *fn, int line, void *ptr) +void __xfree(const char *fn, int line, void *ptr)  {  	assert_die(!empty_str(fn) && line > 0, "invalid arguments");  	free(ptr);  } - diff --git a/minecctl/misc.h b/minecctl/misc.h index 155681e..6abed5e 100644 --- a/minecctl/misc.h +++ b/minecctl/misc.h @@ -5,7 +5,7 @@ extern bool use_colors;  void set_use_colors(); -char *strv_join(char * const *strv); +char *strv_join(char *const *strv);  int connect_any(struct list_head *addrs, bool may_fail); diff --git a/minecctl/rcon-commands.c b/minecctl/rcon-commands.c index cf43c5e..b6a216f 100644 --- a/minecctl/rcon-commands.c +++ b/minecctl/rcon-commands.c @@ -16,8 +16,7 @@  #include "rcon-protocol.h"  #include "misc.h" -static void -send_packet(int sfd, const char *buf, size_t len) +static void send_packet(int sfd, const char *buf, size_t len)  {  	size_t off = 0;  	ssize_t r; @@ -38,8 +37,8 @@ send_packet(int sfd, const char *buf, size_t len)  }  /* Note: msg is null-terminated due to the mc protocol trailer */ -static void -read_packet(int sfd, char *buf, size_t len, int32_t *id, int32_t *type, const char **msg) +static void read_packet(int sfd, char *buf, size_t len, int32_t *id, +			int32_t *type, const char **msg)  {  	size_t off = 0;  	ssize_t r; @@ -69,16 +68,16 @@ read_packet(int sfd, char *buf, size_t len, int32_t *id, int32_t *type, const ch  		die("Failed to parse response: %s", error);  } -static void -send_msg(int sfd, char *buf, size_t len, enum rcon_packet_type type, -	 const char *msg, enum rcon_packet_type *rtype, const char **reply) +static void send_msg(int sfd, char *buf, size_t len, enum rcon_packet_type type, +		     const char *msg, enum rcon_packet_type *rtype, +		     const char **reply)  {  	static uint32_t rcon_packet_id = 1;  	size_t plen;  	int32_t id; -	if (!rcon_protocol_create_packet(buf, len, &plen, -					 rcon_packet_id, type, msg)) +	if (!rcon_protocol_create_packet(buf, len, &plen, rcon_packet_id, type, +					 msg))  		die("Failed to create rcon packet");  	send_packet(sfd, buf, plen); @@ -102,8 +101,7 @@ send_msg(int sfd, char *buf, size_t len, enum rcon_packet_type type,  	rcon_packet_id++;  } -static int -rcon_login(struct cfg *cfg, struct server *server) +static int rcon_login(struct cfg *cfg, struct server *server)  {  	char buf[4096];  	int32_t rtype; @@ -121,7 +119,7 @@ rcon_login(struct cfg *cfg, struct server *server)  	if (fd < 0) {  		error("%s: unable to connect", server->name);  		goto error; -	}	 +	}  	if (!server->rcon_password)  		server->rcon_password = ask_password(); @@ -154,21 +152,20 @@ error:  	return -1;  } -static bool -send_cmd(int sfd, const char *cmd) +static bool send_cmd(int sfd, const char *cmd)  {  	char buf[4096];  	int32_t rtype;  	const char *reply; -	send_msg(sfd, buf, sizeof(buf), RCON_PACKET_COMMAND, cmd, &rtype, &reply); +	send_msg(sfd, buf, sizeof(buf), RCON_PACKET_COMMAND, cmd, &rtype, +		 &reply);  	if (rtype != RCON_PACKET_RESPONSE) {  		die("Invalid return code: %" PRIi32, rtype);  		return false;  	} -  	if (use_colors)  		info("%s%s%s", ANSI_GREY, reply, ANSI_NORMAL);  	else @@ -177,13 +174,12 @@ send_cmd(int sfd, const char *cmd)  	return true;  } -static void -eat_whitespace(char **pos) +static void eat_whitespace(char **pos)  {  	char *end;  	size_t len; -	while(isspace(**pos)) +	while (isspace(**pos))  		(*pos)++;  	len = strlen(*pos); @@ -203,24 +199,24 @@ eat_whitespace(char **pos)  #define MCTIME_PER_HOUR 1000  #define MIN_PER_HOUR 60 -static inline unsigned -mctime_days(unsigned mctime) { +static inline unsigned mctime_days(unsigned mctime) +{  	return (mctime / MCTIME_PER_DAY);  } -static inline unsigned -mctime_hh(unsigned mctime) { +static inline unsigned mctime_hh(unsigned mctime) +{  	return (mctime % MCTIME_PER_DAY) / MCTIME_PER_HOUR;  } -static inline unsigned -mctime_mm(unsigned mctime) { +static inline unsigned mctime_mm(unsigned mctime) +{  	return ((mctime % MCTIME_PER_HOUR) * MIN_PER_HOUR) / MCTIME_PER_HOUR;  } -static bool -get_one_status(int fd, char *buf, size_t len, const char *cmd, -	       size_t argc, const char *replyscan, const char **reply, ...) +static bool get_one_status(int fd, char *buf, size_t len, const char *cmd, +			   size_t argc, const char *replyscan, +			   const char **reply, ...)  {  	int32_t rtype;  	va_list ap; @@ -240,8 +236,8 @@ get_one_status(int fd, char *buf, size_t len, const char *cmd,  		return false;  } -bool -do_status(struct cfg *cfg) { +bool do_status(struct cfg *cfg) +{  	char buf[4096];  	char tbuf[4096];  	const char *reply; @@ -256,17 +252,17 @@ do_status(struct cfg *cfg) {  	if (fd < 0)  		return false; -	if (get_one_status(fd, buf, sizeof(buf), "seed", 1, -			   "Seed : [ %[^]]]", &reply, tbuf)) +	if (get_one_status(fd, buf, sizeof(buf), "seed", 1, "Seed : [ %[^]]]", +			   &reply, tbuf))  		info("Seed: %s", tbuf); -		        +  	if (get_one_status(fd, buf, sizeof(buf), "difficulty", 1,  			   "The difficulty is %s", &reply, tbuf))  		info("Difficulty: %s", tbuf);  	if (get_one_status(fd, buf, sizeof(buf), "list", 2, -			   "There are %u of a max %u players online", -			   &reply, &cplayers, &maxplayers)) +			   "There are %u of a max %u players online", &reply, +			   &cplayers, &maxplayers))  		info("Players: %u/%u", cplayers, maxplayers);  	if (get_one_status(fd, buf, sizeof(buf), "time query day", 1, @@ -275,20 +271,23 @@ do_status(struct cfg *cfg) {  	if (get_one_status(fd, buf, sizeof(buf), "time query gametime", 1,  			   "The time is %u", &reply, >ime)) -		info("World age: %ud:%02uh:%02um", -		     mctime_days(gtime), mctime_hh(gtime), mctime_mm(gtime)); +		info("World age: %ud:%02uh:%02um", mctime_days(gtime), +		     mctime_hh(gtime), mctime_mm(gtime));  	if (get_one_status(fd, buf, sizeof(buf), "time query daytime", 1,  			   "The time is %u", &reply, >ime))  		info("Current in-game time: %02uh:%02um", -		     mctime_hh(gtime + MCTIME_OFFSET), mctime_mm(gtime + MCTIME_OFFSET)); +		     mctime_hh(gtime + MCTIME_OFFSET), +		     mctime_mm(gtime + MCTIME_OFFSET));  	if (get_one_status(fd, buf, sizeof(buf), "datapack list enabled", 2, -			   "There are %u data packs enabled: %[^\n]", &reply, &epacks, tbuf)) +			   "There are %u data packs enabled: %[^\n]", &reply, +			   &epacks, tbuf))  		info("Enabled data packs (%u): %s", epacks, tbuf);  	if (get_one_status(fd, buf, sizeof(buf), "datapack list available", 2, -			   "There are %u data packs available : %[^\n]", &reply, &apacks, tbuf)) +			   "There are %u data packs available : %[^\n]", &reply, +			   &apacks, tbuf))  		info("Available data packs (%u): %s", apacks, tbuf);  	else if (streq(reply, "There are no more data packs available"))  		info("Available data packs: none"); @@ -308,22 +307,21 @@ do_status(struct cfg *cfg) {  	return true;  } -bool -do_ping(_unused_ struct cfg *cfg) { +bool do_ping(_unused_ struct cfg *cfg) +{  	die("Not implemented");  	return false;  } -static bool -get_player_count(int fd, unsigned *current, unsigned *max) +static bool get_player_count(int fd, unsigned *current, unsigned *max)  {  	char buf[4096];  	const char *reply;  	unsigned c, m;  	if (!get_one_status(fd, buf, sizeof(buf), "list", 2, -			    "There are %u of a max %u players online", -			    &reply, &c, &m)) +			    "There are %u of a max %u players online", &reply, +			    &c, &m))  		return false;  	if (current) @@ -335,8 +333,7 @@ get_player_count(int fd, unsigned *current, unsigned *max)  	return true;  } -static bool -stop_one_server(struct cfg *cfg, struct server *server) +static bool stop_one_server(struct cfg *cfg, struct server *server)  {  	int fd;  	bool rv; @@ -366,16 +363,16 @@ stop_one_server(struct cfg *cfg, struct server *server)  	return rv;  } -bool -do_stop(struct cfg *cfg) { +bool do_stop(struct cfg *cfg) +{  	struct server *server;  	server = server_get_default(cfg);  	return stop_one_server(cfg, server);  } -bool -do_stop_all(struct cfg *cfg) { +bool do_stop_all(struct cfg *cfg) +{  	struct server *server;  	list_for_each_entry(server, &cfg->servers, list) { @@ -386,8 +383,7 @@ do_stop_all(struct cfg *cfg) {  	return true;  } -bool -do_rcon_pcount(struct cfg *cfg, unsigned *online, unsigned *max) +bool do_rcon_pcount(struct cfg *cfg, unsigned *online, unsigned *max)  {  	struct server *server;  	bool rv; @@ -399,14 +395,13 @@ do_rcon_pcount(struct cfg *cfg, unsigned *online, unsigned *max)  		return false;  	rv = get_player_count(fd, online, max); -	 +  	close(fd);  	return rv;  } -bool -do_console(struct cfg *cfg) +bool do_console(struct cfg *cfg)  {  	char *prompt;  	char *cmd; @@ -418,8 +413,8 @@ do_console(struct cfg *cfg)  	if (fd < 0)  		return false; -	prompt = alloca(strlen(program_invocation_short_name) + -			STRLEN(" (") + strlen(server->name) + STRLEN("): ") + 1); +	prompt = alloca(strlen(program_invocation_short_name) + STRLEN(" (") + +			strlen(server->name) + STRLEN("): ") + 1);  	sprintf(prompt, "%s (%s): ", program_invocation_short_name,  		server->name); @@ -437,8 +432,8 @@ do_console(struct cfg *cfg)  			continue;  		} -		if (streq(tmp, "q") || streq(tmp, "quit") || -		    streq(tmp, "/q") || streq(tmp, "/quit")) +		if (streq(tmp, "q") || streq(tmp, "quit") || streq(tmp, "/q") || +		    streq(tmp, "/quit"))  			break;  		send_cmd(fd, tmp); @@ -454,8 +449,8 @@ do_console(struct cfg *cfg)  	return true;  } -bool -do_command(struct cfg *cfg) { +bool do_command(struct cfg *cfg) +{  	int fd;  	struct server *server; @@ -466,4 +461,3 @@ do_command(struct cfg *cfg) {  	return send_cmd(fd, cfg->cmdstr);  } - diff --git a/minecctl/server.c b/minecctl/server.c index da59c8f..aca69a0 100644 --- a/minecctl/server.c +++ b/minecctl/server.c @@ -10,8 +10,7 @@  #include "config-parser.h"  #include "server-config-options.h" -void -server_read_config(struct cfg *cfg, struct server *server) +void server_read_config(struct cfg *cfg, struct server *server)  {  	char buf[4096];  	size_t off = 0; @@ -44,7 +43,8 @@ server_read_config(struct cfg *cfg, struct server *server)  		off += r;  		if (off == sizeof(buf) - 1) -			die("Failed to read %s: file too large", server->filename); +			die("Failed to read %s: file too large", +			    server->filename);  	}  	buf[off] = '\0'; @@ -97,8 +97,7 @@ server_read_config(struct cfg *cfg, struct server *server)  		verbose("mc server address not found in %s", server->filename);  } -struct server * -server_get_default(struct cfg *cfg) +struct server *server_get_default(struct cfg *cfg)  {  	struct server *server; @@ -111,8 +110,7 @@ server_get_default(struct cfg *cfg)  	return server;  } -bool -server_set_default(struct cfg *cfg, const char *name) +bool server_set_default(struct cfg *cfg, const char *name)  {  	struct server *server; @@ -128,8 +126,7 @@ server_set_default(struct cfg *cfg, const char *name)  	return false;  } -void -server_load_all_known(struct cfg *cfg) +void server_load_all_known(struct cfg *cfg)  {  	struct dirent *dent;  	DIR *dir; @@ -161,8 +158,7 @@ server_load_all_known(struct cfg *cfg)  	closedir(dir);  } -void -server_free_all(struct cfg *cfg) +void server_free_all(struct cfg *cfg)  {  	struct server *server, *tmp; @@ -170,8 +166,7 @@ server_free_all(struct cfg *cfg)  		server_free(server);  } -void -server_free(struct server *server) +void server_free(struct server *server)  {  	struct saddr *saddr, *tmp; @@ -192,8 +187,7 @@ server_free(struct server *server)  	xfree(server);  } -struct server * -server_new() +struct server *server_new()  {  	struct server *server; @@ -204,4 +198,3 @@ server_new()  	return server;  } - diff --git a/minecproxy/announce.c b/minecproxy/announce.c index 13ef423..78a7ccd 100644 --- a/minecproxy/announce.c +++ b/minecproxy/announce.c @@ -18,8 +18,7 @@ struct announce {  	int mcast_fd;  }; -static void -announce_cb(struct ptimer_task *ptask) +static void announce_cb(struct ptimer_task *ptask)  {  	struct announce *announce = container_of(ptask, struct announce, ptask);  	struct server *server; @@ -32,28 +31,25 @@ announce_cb(struct ptimer_task *ptask)  		server_announce(server, announce->mcast_fd);  } -static void -announce_free(struct uring_task *task) +static void announce_free(struct uring_task *task)  {  	struct announce *announce = container_of(task, struct announce, task);  	assert_return(task); -	debug(DBG_ANN, "task %p, announce 0x%p, mcast_fd: %i", -	      task, announce, announce->mcast_fd); +	debug(DBG_ANN, "task %p, announce 0x%p, mcast_fd: %i", task, announce, +	      announce->mcast_fd);  	close(announce->mcast_fd);  	xfree(announce);  } -void -announce_refdump() +void announce_refdump()  {  	assert_return_silent(cfg->announce);  	uring_task_refdump(&cfg->announce->task);  } -void -announce_delete() +void announce_delete()  {  	assert_return_silent(cfg->announce); @@ -63,8 +59,7 @@ announce_delete()  	cfg->announce = NULL;  } -void -announce_stop() +void announce_stop()  {  	struct announce *announce = cfg->announce; @@ -73,8 +68,7 @@ announce_stop()  	ptimer_del_task(&announce->ptask);  } -void -announce_start(unsigned duration) +void announce_start(unsigned duration)  {  	struct announce *announce = cfg->announce;  	unsigned times; @@ -91,12 +85,11 @@ announce_start(unsigned duration)  	ptimer_add_task(&announce->ptask);  } -void -announce_init() +void announce_init()  {  	struct announce *announce;  	int sfd; -  +  	assert_return(!cfg->announce);  	assert_return_silent(cfg->announce_interval > 0); @@ -108,9 +101,9 @@ announce_init()  	if (sfd < 0)  		die("socket: %m"); -	uring_task_init(&announce->task, "announce", uring_parent(), announce_free); +	uring_task_init(&announce->task, "announce", uring_parent(), +			announce_free);  	ptask_init(&announce->ptask, cfg->announce_interval, 0, announce_cb);  	announce->mcast_fd = sfd;  	cfg->announce = announce;  } - diff --git a/minecproxy/idle.c b/minecproxy/idle.c index 70d8099..ec9e2da 100644 --- a/minecproxy/idle.c +++ b/minecproxy/idle.c @@ -18,8 +18,8 @@ struct idle {  	struct uring_task task;  }; -static int -idle_check_handshake_complete(struct uring_task *task, _unused_ int res) +static int idle_check_handshake_complete(struct uring_task *task, +					 _unused_ int res)  {  	int r; @@ -31,8 +31,7 @@ idle_check_handshake_complete(struct uring_task *task, _unused_ int res)  	return r;  } -static void -idle_check_handshake_reply(struct uring_task *task, int res) +static void idle_check_handshake_reply(struct uring_task *task, int res)  {  	struct server *server = container_of(task, struct server, idle_task);  	unsigned online, max; @@ -46,8 +45,7 @@ idle_check_handshake_reply(struct uring_task *task, int res)  		goto out;  	if (mc_protocol_parse_status_reply(server->idle_buf.buf, -					   server->idle_buf.len, -					   &online, &max)) +					   server->idle_buf.len, &online, &max))  		player_count = online;  	else  		error("failed to parse reply"); @@ -58,8 +56,7 @@ out:  	return;  } -static void -idle_check_handshake_sent(struct uring_task *task, int res) +static void idle_check_handshake_sent(struct uring_task *task, int res)  {  	assert_return(task);  	assert_task_alive(DBG_IDLE, task); @@ -70,20 +67,17 @@ idle_check_handshake_sent(struct uring_task *task, int res)  		return;  	} -	uring_tbuf_read_until(task, -			      idle_check_handshake_complete, +	uring_tbuf_read_until(task, idle_check_handshake_complete,  			      idle_check_handshake_reply);  } -void -idle_check_get_player_count(struct server *server, struct connection *conn) +void idle_check_get_player_count(struct server *server, struct connection *conn)  {  	assert_return(server && conn && server->idle_task.priv); -	if (!mc_protocol_create_status_request(server->idle_buf.buf, -					       sizeof(server->idle_buf.buf), -					       &server->idle_buf.len, -					       &conn->remote)) { +	if (!mc_protocol_create_status_request( +		    server->idle_buf.buf, sizeof(server->idle_buf.buf), +		    &server->idle_buf.len, &conn->remote)) {  		error("failed to create mc request");  		/* FIXME: is this enough? */  		return; @@ -94,8 +88,7 @@ idle_check_get_player_count(struct server *server, struct connection *conn)  	uring_tbuf_write(&server->idle_task, idle_check_handshake_sent);  } -static void -idle_cb(struct ptimer_task *ptask) +static void idle_cb(struct ptimer_task *ptask)  {  	struct idle *idle = container_of(ptask, struct idle, ptask);  	struct server *server; @@ -109,8 +102,7 @@ idle_cb(struct ptimer_task *ptask)  		server_idle_check(server);  } -static void -idle_free(struct uring_task *task) +static void idle_free(struct uring_task *task)  {  	struct idle *idle = container_of(task, struct idle, task); @@ -119,16 +111,14 @@ idle_free(struct uring_task *task)  	xfree(idle);  } -void -idle_refdump() +void idle_refdump()  {  	assert_return_silent(cfg->idle);  	uring_task_refdump(&cfg->idle->task);  } -void -idle_delete() +void idle_delete()  {  	assert_return(cfg->idle); @@ -138,8 +128,7 @@ idle_delete()  	cfg->idle = NULL;  } -void -idle_init() +void idle_init()  {  	struct idle *idle; @@ -154,4 +143,3 @@ idle_init()  	ptimer_add_task(&idle->ptask);  	cfg->idle = idle;  } - diff --git a/minecproxy/igmp.c b/minecproxy/igmp.c index f1d380d..f3579f4 100644 --- a/minecproxy/igmp.c +++ b/minecproxy/igmp.c @@ -345,7 +345,8 @@ igmp_parse(struct igmp *igmp)  			body_len -= sizeof(*record);  			pos += sizeof(*record); -			if (body_len < record->nsrcs * sizeof(uint32_t) + record->auxlen) { +			if (body_len < +			    (record->nsrcs * sizeof(uint32_t) + record->auxlen)) {  				error("IGMPv3 too short");  				break;  			} @@ -364,10 +365,12 @@ igmp_parse(struct igmp *igmp)  			}  			/* Yes, EXCL, not INCL, see RFC3376 */ +			/* clang-format off */  			if ((htonl(record->addr) == cinet_addr(224,0,2,60)) &&  			    ((record->type == IGMP_V3_REC_MODE_IS_EXCL) ||  			     (record->type == IGMP_V3_REC_MODE_CH_EXCL)))  				igmp_match(); +			/* clang-format on */  			body_len -= record->auxlen;  			pos += record->auxlen; @@ -409,7 +412,7 @@ igmp_read_cb(struct uring_task *task, int res)  	task->tbuf->len = res; -	if (task->saddr.storage.ss_family == AF_PACKET || +	if (task->saddr.st.ss_family == AF_PACKET ||  	    task->saddr.ll.sll_protocol == htons(ETH_P_IP))  		igmp_parse(igmp);  	else @@ -450,46 +453,74 @@ void  igmp_init()  {  	static const struct sock_filter filter[] = { -		BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0),					/* A <- packet length */ -		BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, sizeof(struct iphdr), 1, 0),	/* A < sizeof(iphdr) */ -                BPF_STMT(BPF_RET + BPF_K, 0),						/* drop packet */ - -		BPF_STMT(BPF_LD + BPF_B + BPF_ABS, 0 /* iphdr[0] */),			/* A <- version + ihl */ -		BPF_STMT(BPF_ALU + BPF_RSH + BPF_K, 4),					/* A <- A >> 4 (version) */ -                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0x04, 1, 0),			/* A != 4 */ -                BPF_STMT(BPF_RET + BPF_K, 0),						/* drop packet */ - -		BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(struct iphdr, protocol)),	/* A <- ip protocol */ -                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, IPPROTO_IGMP, 1, 0),		/* A != IPPROTO_IGMP */ -                BPF_STMT(BPF_RET + BPF_K, 0),						/* drop packet */ - -		BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(struct iphdr, daddr)),	/* A <- ip dst addr */ -                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, chtobe32(cinet_addr(224,0,2,60)), 2, 0),	/* A != 224.0.2.60 */ -                //BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0xe000023c, 2, 0),			/* A != 224.0.2.60 */ -                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, chtobe32(cinet_addr(224,0,0,22)), 1, 0),	/* A != 224.0.0.22 */ -                //BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0xe0000016, 1, 0),			/* A != 224.0.0.22 */ -                BPF_STMT(BPF_RET + BPF_K, 0),						/* drop packet */ - -		BPF_STMT(BPF_LDX + BPF_B + BPF_MSH, 0 /* iphdr[0] */),			/* X <- pkt->ihl * 4 */ -		BPF_STMT(BPF_LD + BPF_IMM, 20),						/* A <- 20 */ -		BPF_JUMP(BPF_JMP + BPF_JGT + BPF_X, 0, 0, 1),				/* A > X */ -                BPF_STMT(BPF_RET + BPF_K, 0),						/* drop packet */ - -		BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct iphdr, tot_len)),	/* A <- ip tot_len */ -		BPF_JUMP(BPF_JMP + BPF_JGT + BPF_X, 0, 1, 0),				/* A <= ip->ihl * 4 */  -                BPF_STMT(BPF_RET + BPF_K, 0),						/* drop packet */ -		BPF_STMT(BPF_ALU + BPF_SUB + BPF_X, 0),					/* A <- A - X (bodylen) */ -		BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, 8, 1, 0),				/* A < 8 */ -                BPF_STMT(BPF_RET + BPF_K, 0),						/* drop packet */ - -		BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct iphdr, tot_len)),	/* A <- ip->tot_len */ -		BPF_STMT(BPF_MISC + BPF_TAX, 0),					/* X <- A */ -		BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0),					/* A <- packet length */ -		BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_X, 0, 1, 0),				/* A != ip->tot_len */ -                BPF_STMT(BPF_RET + BPF_K, 0),						/* drop packet */ - -                BPF_STMT(BPF_RET + BPF_K, (uint32_t) -1),				/* accept packet */ -        }; +		/* A <- packet length */ +		BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0), +		/* A < sizeof(iphdr) */ +		BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, sizeof(struct iphdr), 1, 0), +		/* drop packet */ +                BPF_STMT(BPF_RET + BPF_K, 0), + +		/* A <- version + ihl */ +		BPF_STMT(BPF_LD + BPF_B + BPF_ABS, 0 /* iphdr[0] */), +		/* A <- A >> 4 (version) */ +		BPF_STMT(BPF_ALU + BPF_RSH + BPF_K, 4), +		/* A != 4 */ +                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0x04, 1, 0), +		/* drop packet */ +                BPF_STMT(BPF_RET + BPF_K, 0), + +		/* A <- ip protocol */ +		BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(struct iphdr, protocol)), +		/* A != IPPROTO_IGMP */ +                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, IPPROTO_IGMP, 1, 0), +		/* drop packet */ +                BPF_STMT(BPF_RET + BPF_K, 0), + +		/* A <- ip dst addr */ +		BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(struct iphdr, daddr)), +		/* A != 224.0.2.60 */ +                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, chtobe32(cinet_addr(224,0,2,60)), 2, 0), +		/* A != 224.0.0.22 */ +                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, chtobe32(cinet_addr(224,0,0,22)), 1, 0), +		/* drop packet */ +                BPF_STMT(BPF_RET + BPF_K, 0), + +		/* X <- pkt->ihl * 4 */ +		BPF_STMT(BPF_LDX + BPF_B + BPF_MSH, 0 /* iphdr[0] */), +		/* A <- 20 */ +		BPF_STMT(BPF_LD + BPF_IMM, 20), +		/* A > X */ +		BPF_JUMP(BPF_JMP + BPF_JGT + BPF_X, 0, 0, 1), +		/* drop packet */ +                BPF_STMT(BPF_RET + BPF_K, 0), + +		/* A <- ip tot_len */ +		BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct iphdr, tot_len)), +		/* A <= ip->ihl * 4 */ +		BPF_JUMP(BPF_JMP + BPF_JGT + BPF_X, 0, 1, 0), +		/* drop packet */ +                BPF_STMT(BPF_RET + BPF_K, 0), +		/* A <- A - X (bodylen) */ +		BPF_STMT(BPF_ALU + BPF_SUB + BPF_X, 0), +		/* A < 8 */ +		BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, 8, 1, 0), +		/* drop packet */ +                BPF_STMT(BPF_RET + BPF_K, 0), + +		/* A <- ip->tot_len */ +		BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct iphdr, tot_len)), +		/* X <- A */ +		BPF_STMT(BPF_MISC + BPF_TAX, 0), +		/* A <- packet length */ +		BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0), +		/* A != ip->tot_len */ +		BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_X, 0, 1, 0), +		/* drop packet */ +                BPF_STMT(BPF_RET + BPF_K, 0), + +		/* accept packet */ +                BPF_STMT(BPF_RET + BPF_K, (uint32_t) -1), +	};          static const struct sock_fprog fprog = {                  .len = ARRAY_SIZE(filter),                  .filter = (struct sock_filter*) filter, diff --git a/minecproxy/main.c b/minecproxy/main.c index f5e6c88..b5a195b 100644 --- a/minecproxy/main.c +++ b/minecproxy/main.c @@ -38,8 +38,7 @@ static bool daemonize = false;  static FILE *log_file = NULL;  static const char *log_file_path = NULL; -static void -msg(enum debug_lvl lvl, const char *fmt, va_list ap) +static void msg(enum debug_lvl lvl, const char *fmt, va_list ap)  {  	static bool first = true;  	static bool use_colors = false; @@ -136,8 +135,7 @@ msg(enum debug_lvl lvl, const char *fmt, va_list ap)  		fprintf(stderr, ANSI_NORMAL);  } -void -__debug(enum debug_lvl lvl, const char *fmt, ...) +void __debug(enum debug_lvl lvl, const char *fmt, ...)  {  	va_list ap; @@ -148,8 +146,7 @@ __debug(enum debug_lvl lvl, const char *fmt, ...)  	va_end(ap);  } -_noreturn_ void -__die(const char *fmt, ...) +_noreturn_ void __die(const char *fmt, ...)  {  	va_list ap; @@ -164,8 +161,7 @@ __die(const char *fmt, ...)  	exit(EXIT_FAILURE);  } -static void -cfg_free(struct uring_task *task) +static void cfg_free(struct uring_task *task)  {  	struct cfg *xcfg = container_of(task, struct cfg, task); @@ -198,51 +194,60 @@ struct cfg_key_value_map mcfg_key_map[] = {  		.key_name = "igmp",  		.key_value = MCFG_KEY_IGMP,  		.value_type = CFG_VAL_TYPE_BOOL, -	}, { +	}, +	{  		.key_name = "igmp_iface",  		.key_value = MCFG_KEY_IGMP_IFACE,  		.value_type = CFG_VAL_TYPE_STRING, -	}, { +	}, +	{  		.key_name = "announce_interval",  		.key_value = MCFG_KEY_ANN_INTERVAL,  		.value_type = CFG_VAL_TYPE_UINT16, -	}, { +	}, +	{  		.key_name = "proxy_connection_interval",  		.key_value = MCFG_KEY_PROXY_CONN_INTERVAL,  		.value_type = CFG_VAL_TYPE_UINT16, -	}, { +	}, +	{  		.key_name = "proxy_connection_attempts",  		.key_value = MCFG_KEY_PROXY_CONN_ATTEMPTS,  		.value_type = CFG_VAL_TYPE_UINT16, -	}, { +	}, +	{  		.key_name = "socket_defer",  		.key_value = MCFG_KEY_SOCKET_DEFER,  		.value_type = CFG_VAL_TYPE_BOOL, -	}, { +	}, +	{  		.key_name = "socket_freebind",  		.key_value = MCFG_KEY_SOCKET_FREEBIND,  		.value_type = CFG_VAL_TYPE_BOOL, -	}, { +	}, +	{  		.key_name = "socket_keepalive",  		.key_value = MCFG_KEY_SOCKET_KEEPALIVE,  		.value_type = CFG_VAL_TYPE_BOOL, -	}, { +	}, +	{  		.key_name = "socket_iptos",  		.key_value = MCFG_KEY_SOCKET_IPTOS,  		.value_type = CFG_VAL_TYPE_BOOL, -	}, { +	}, +	{  		.key_name = "socket_nodelay",  		.key_value = MCFG_KEY_SOCKET_NODELAY,  		.value_type = CFG_VAL_TYPE_BOOL, -	}, { +	}, +	{  		.key_name = NULL,  		.key_value = MCFG_KEY_INVALID,  		.value_type = CFG_VAL_TYPE_INVALID,  	}  }; -static void -cfg_read() +static void cfg_read()  {  	FILE *cfgfile;  	const char *path; @@ -297,8 +302,8 @@ cfg_read()  		const char *keyname;  		struct cfg_value value; -		if (!config_parse_line(path, &pos, mcfg_key_map, -				       &key, &keyname, &value, false)) +		if (!config_parse_line(path, &pos, mcfg_key_map, &key, &keyname, +				       &value, false))  			break;  		if (key == MCFG_KEY_INVALID) @@ -307,7 +312,6 @@ cfg_read()  		debug(DBG_CFG, "main cfg: key %s", keyname);  		switch (key) { -  		case MCFG_KEY_IGMP:  			cfg->do_igmp = value.boolean;  			break; @@ -358,6 +362,7 @@ cfg_read()  	}  } +/* clang-format off */  const struct {  	const char *name;  	unsigned val; @@ -409,9 +414,9 @@ const struct {  		.val = 0,  	}  }; +/* clang-format on */ -_noreturn_ static void -usage(bool invalid) +_noreturn_ static void usage(bool invalid)  {  	if (invalid)  		info("Invalid option(s)"); @@ -434,8 +439,7 @@ usage(bool invalid)  	exit(invalid ? EXIT_FAILURE : EXIT_SUCCESS);  } -static void -cfg_init(int argc, char **argv) +static void cfg_init(int argc, char **argv)  {  	int c;  	unsigned i; @@ -463,6 +467,7 @@ cfg_init(int argc, char **argv)  	while (true) {  		int option_index = 0; +		/* clang-format off */  		static struct option long_options[] = {  			{ "cfgdir",	required_argument,	0, 'c' },  			{ "cfgfile",	required_argument,	0, 'C' }, @@ -474,9 +479,10 @@ cfg_init(int argc, char **argv)  			{ "debug",	required_argument,	0, 'd' },  			{ 0,		0,			0,  0  }  		}; +		/* clang-format on */ -		c = getopt_long(argc, argv, ":c:C:u:Dl:hvd:", -				long_options, &option_index); +		c = getopt_long(argc, argv, ":c:C:u:Dl:hvd:", long_options, +				&option_index);  		if (c == -1)  			break; @@ -512,12 +518,12 @@ cfg_init(int argc, char **argv)  				if (errno == ESRCH)  					die("failed to find user %s", optarg);  				else -					die("failed to find user %s (%m)", optarg); +					die("failed to find user %s (%m)", +					    optarg);  			}  			debug(DBG_CFG, "asked to execute with uid %ji gid %ji", -			      (intmax_t)pwd->pw_uid, -			      (intmax_t)pwd->pw_gid); +			      (intmax_t)pwd->pw_uid, (intmax_t)pwd->pw_gid);  			cfg->uid = pwd->pw_uid;  			cfg->gid = pwd->pw_gid;  			break; @@ -531,12 +537,14 @@ cfg_init(int argc, char **argv)  				info("Debug categories:");  				info(" * all");  				for (i = 0; debug_category_str[i].name; i++) -					info(" * %s", debug_category_str[i].name); +					info(" * %s", +					     debug_category_str[i].name);  				exit(EXIT_FAILURE);  			}  			for (i = 0; debug_category_str[i].name; i++) { -				if (strcaseeq(optarg, debug_category_str[i].name)) +				if (strcaseeq(optarg, +					      debug_category_str[i].name))  					break;  			} @@ -553,29 +561,25 @@ cfg_init(int argc, char **argv)  		default:  			usage(true);  		} -  	}  	if (optind < argc)  		usage(true);  } -static void -cfg_apply() +static void cfg_apply()  {  	if (cfg->uid == 0 || cfg->gid == 0)  		/* This catches both -u root and running as root without -u */  		die("Execution as root is not supported (use -u <someuser>)");  	capng_clear(CAPNG_SELECT_BOTH); -	if (capng_updatev(CAPNG_ADD, -			  CAPNG_EFFECTIVE | CAPNG_PERMITTED, +	if (capng_updatev(CAPNG_ADD, CAPNG_EFFECTIVE | CAPNG_PERMITTED,  			  CAP_NET_RAW, CAP_NET_BIND_SERVICE, -1))  		die("capng_updatev failed");  	if (geteuid() != cfg->uid) { -		if (capng_change_id(cfg->uid, -				    cfg->gid, +		if (capng_change_id(cfg->uid, cfg->gid,  				    CAPNG_DROP_SUPP_GRP | CAPNG_CLEAR_BOUNDING))  			die("capng_change_id failed");  	} else { @@ -614,8 +618,7 @@ cfg_apply()  	}  } -void -dump_tree() +void dump_tree()  {  	struct server *server; @@ -639,8 +642,7 @@ dump_tree()  	info("\n\n");  } -int -main(int argc, char **argv) +int main(int argc, char **argv)  {  	struct server *server;  	unsigned server_count; @@ -679,8 +681,7 @@ main(int argc, char **argv)  	/* Drop CAP_NET_RAW (if we have it), only used for igmp */  	capng_clear(CAPNG_SELECT_BOTH); -	if (capng_update(CAPNG_ADD, -			 CAPNG_EFFECTIVE | CAPNG_PERMITTED, +	if (capng_update(CAPNG_ADD, CAPNG_EFFECTIVE | CAPNG_PERMITTED,  			 CAP_NET_BIND_SERVICE))  		die("capng_update failed"); @@ -708,14 +709,14 @@ main(int argc, char **argv)  	list_for_each_entry(server, &cfg->servers, list)  		server_count++; -	sd_notifyf(0, "READY=1\n" +	sd_notifyf(0, +		   "READY=1\n"  		   "STATUS=Running, %u server configurations loaded\n"  		   "MAINPID=%lu", -		   server_count, -		   (unsigned long)getpid()); +		   server_count, (unsigned long)getpid()); -	info("mcproxy (%s) started, %u server configurations loaded", -	     VERSION, server_count); +	info("mcproxy (%s) started, %u server configurations loaded", VERSION, +	     server_count);  	uring_event_loop(); diff --git a/minecproxy/main.h b/minecproxy/main.h index 8c8add0..c46169a 100644 --- a/minecproxy/main.h +++ b/minecproxy/main.h @@ -62,7 +62,7 @@ struct uring_task {  	utask_cb_t cb;  	/* returns: 0 = not complete; < 0 = error; > 0 = complete */ -	rutask_cb_t is_complete_cb;  +	rutask_cb_t is_complete_cb;  	/* called once tbuf processing is done */  	utask_cb_t final_cb; diff --git a/minecproxy/misc.c b/minecproxy/misc.c index 152de1a..e3872c5 100644 --- a/minecproxy/misc.c +++ b/minecproxy/misc.c @@ -31,12 +31,14 @@ struct allocation {  	struct list_head list;  }; -static void -add_allocation(const char *allocfn, const char *callerfn, int line, void *ptr, size_t size) +static void add_allocation(const char *allocfn, const char *callerfn, int line, +			   void *ptr, size_t size)  {  	struct allocation *a; -	assert_die(!empty_str(allocfn) && !empty_str(callerfn) && line > 0 && ptr && size > 0, "invalid arguments"); +	assert_die(!empty_str(allocfn) && !empty_str(callerfn) && line > 0 && +			   ptr && size > 0, +		   "invalid arguments");  	a = malloc(sizeof(*a));  	if (!a) @@ -49,12 +51,11 @@ add_allocation(const char *allocfn, const char *callerfn, int line, void *ptr, s  	list_add(&a->list, &malloc_list);  	total_malloc_count++;  	malloc_count++; -	debug(DBG_MALLOC, "called from %s:%i - %s(%zu) = %p (%p)", -	      callerfn, line, allocfn, size, ptr, a); +	debug(DBG_MALLOC, "called from %s:%i - %s(%zu) = %p (%p)", callerfn, +	      line, allocfn, size, ptr, a);  } -void * -__zmalloc(const char *fn, int line, size_t size) +void *__zmalloc(const char *fn, int line, size_t size)  {  	void *ptr; @@ -66,12 +67,12 @@ __zmalloc(const char *fn, int line, size_t size)  	return ptr;  } -char * -__xstrdup(const char *fn, int line, const char *s) +char *__xstrdup(const char *fn, int line, const char *s)  {  	char *ptr; -	assert_die(!empty_str(fn) && line > 0 && !empty_str(s), "invalid arguments"); +	assert_die(!empty_str(fn) && line > 0 && !empty_str(s), +		   "invalid arguments");  	ptr = strdup(s);  	if (ptr) @@ -79,12 +80,12 @@ __xstrdup(const char *fn, int line, const char *s)  	return ptr;  } -char * -__xstrndup(const char *fn, int line, const char *s, size_t n) +char *__xstrndup(const char *fn, int line, const char *s, size_t n)  {  	char *ptr; -	assert_die(!empty_str(fn) && line > 0 && !empty_str(s) && n > 0, "invalid arguments"); +	assert_die(!empty_str(fn) && line > 0 && !empty_str(s) && n > 0, +		   "invalid arguments");  	ptr = strndup(s, n);  	if (ptr) @@ -92,8 +93,7 @@ __xstrndup(const char *fn, int line, const char *s, size_t n)  	return ptr;  } -void -__xfree(const char *fn, int line, void *ptr) +void __xfree(const char *fn, int line, void *ptr)  {  	struct allocation *a, *tmp;  	unsigned delete_count = 0; @@ -121,8 +121,7 @@ __xfree(const char *fn, int line, void *ptr)  	}  } -void -debug_resource_usage() +void debug_resource_usage()  {  	struct allocation *a;  	DIR *dir; @@ -131,11 +130,12 @@ debug_resource_usage()  	ssize_t r;  	unsigned file_count = 0; -	debug(DBG_MALLOC, "Still malloced %i (total %u)", -	      malloc_count, total_malloc_count); +	debug(DBG_MALLOC, "Still malloced %i (total %u)", malloc_count, +	      total_malloc_count);  	list_for_each_entry(a, &malloc_list, list) { -		debug(DBG_MALLOC, "* Lost allocation - %s:%i - ptr: %p, size: %zu", +		debug(DBG_MALLOC, +		      "* Lost allocation - %s:%i - ptr: %p, size: %zu",  		      a->callerfn, a->line, a->ptr, a->size);  	} @@ -152,7 +152,8 @@ debug_resource_usage()  		r = readlinkat(dirfd(dir), dent->d_name, buf, sizeof(buf));  		if (r < 0) { -			debug(DBG_MALLOC, "Failed to readlink %s", dent->d_name); +			debug(DBG_MALLOC, "Failed to readlink %s", +			      dent->d_name);  			continue;  		}  		buf[r] = '\0'; @@ -168,21 +169,19 @@ debug_resource_usage()  	      cqe_count, sqe_count);  } -void -connection_set_local(struct connection *conn, int fd) +void connection_set_local(struct connection *conn, int fd)  {  	assert_return(conn && fd >= 0); -	conn->local.addrlen = sizeof(conn->local.storage); -	if (getsockname(fd, (struct sockaddr *)&conn->local.storage, +	conn->local.addrlen = sizeof(conn->local.st); +	if (getsockname(fd, (struct sockaddr *)&conn->local.st,  			&conn->local.addrlen) < 0)  		sprintf(conn->local.addrstr, "<unknown>");  	else  		saddr_set_addrstr(&conn->local);  } -void -connection_set_remote(struct connection *conn, struct saddr *remote) +void connection_set_remote(struct connection *conn, struct saddr *remote)  {  	assert_return(conn && remote); @@ -192,8 +191,7 @@ connection_set_remote(struct connection *conn, struct saddr *remote)  static void connect_next(struct uring_task *task, struct connection *conn); -static void -connect_cb(struct uring_task *task, int res) +static void connect_cb(struct uring_task *task, int res)  {  	struct connection *conn; @@ -201,8 +199,8 @@ connect_cb(struct uring_task *task, int res)  	conn = task->priv;  	if (res < 0) { -		debug(DBG_SRV, "%s: connection to %s failed", -		      task->name, conn->remote.addrstr); +		debug(DBG_SRV, "%s: connection to %s failed", task->name, +		      conn->remote.addrstr);  		uring_task_close_fd(task);  		connect_next(task, conn);  		return; @@ -210,66 +208,63 @@ connect_cb(struct uring_task *task, int res)  	connection_set_local(conn, task->fd); -	debug(DBG_SRV, "%s: connection established %s -> %s", -	      task->name, conn->local.addrstr, conn->remote.addrstr); +	debug(DBG_SRV, "%s: connection established %s -> %s", task->name, +	      conn->local.addrstr, conn->remote.addrstr);  	conn->cb(conn, true);  } -static void -connect_next(struct uring_task *task, struct connection *conn) +static void connect_next(struct uring_task *task, struct connection *conn)  { -        struct saddr *remote, *tmp; -        int sfd; -        unsigned i; +	struct saddr *remote, *tmp; +	int sfd; +	unsigned i;  	assert_return(task && conn && conn->cb);  again:  	assert_task_alive_or(DBG_UR, task, goto out);  	i = 0; -        remote = NULL; -        list_for_each_entry(tmp, conn->addrs, list) { -                if (i == conn->next_addr) { -                        remote = tmp; -                        break; -                } -                i++; -        } - -        if (!remote) { +	remote = NULL; +	list_for_each_entry(tmp, conn->addrs, list) { +		if (i == conn->next_addr) { +			remote = tmp; +			break; +		} +		i++; +	} + +	if (!remote) {  		debug(DBG_SRV, "%s: no more remote addresses to attempt",  		      task->name);  		goto out; -        } +	}  	conn->next_addr++;  	connection_set_remote(conn, remote); -        debug(DBG_SRV, "%s: attempting to connect to %s", -	      task->name, conn->remote.addrstr); +	debug(DBG_SRV, "%s: attempting to connect to %s", task->name, +	      conn->remote.addrstr); -        sfd = socket(conn->remote.storage.ss_family, SOCK_STREAM | SOCK_CLOEXEC, 0); -        if (sfd < 0) { -                debug(DBG_SRV, "socket: %m"); -                goto again; -        } +	sfd = socket(conn->remote.st.ss_family, SOCK_STREAM | SOCK_CLOEXEC, 0); +	if (sfd < 0) { +		debug(DBG_SRV, "socket: %m"); +		goto again; +	} -	socket_set_low_latency(sfd, cfg->socket_keepalive, -			       cfg->socket_iptos, cfg->socket_nodelay); +	socket_set_low_latency(sfd, cfg->socket_keepalive, cfg->socket_iptos, +			       cfg->socket_nodelay);  	task->priv = conn; -        uring_task_set_fd(task, sfd); -        uring_connect(task, &conn->remote, connect_cb); +	uring_task_set_fd(task, sfd); +	uring_connect(task, &conn->remote, connect_cb);  	return;  out:  	conn->cb(conn, false);  } -void -connect_any(struct uring_task *task, -	    struct list_head *addrs, struct connection *conn, -	    connection_cb_t cb) +void connect_any(struct uring_task *task, struct list_head *addrs, +		 struct connection *conn, connection_cb_t cb)  {  	assert_return(task && addrs && conn && cb); @@ -278,4 +273,3 @@ connect_any(struct uring_task *task,  	conn->cb = cb;  	connect_next(task, conn);  } - diff --git a/minecproxy/misc.h b/minecproxy/misc.h index 6627913..70b84c7 100644 --- a/minecproxy/misc.h +++ b/minecproxy/misc.h @@ -13,7 +13,7 @@ void debug_resource_usage();  struct connection; -typedef void(*connection_cb_t)(struct connection *, bool); +typedef void (*connection_cb_t)(struct connection *, bool);  struct connection {  	struct saddr remote; @@ -29,8 +29,7 @@ void connection_set_local(struct connection *conn, int fd);  void connection_set_remote(struct connection *conn, struct saddr *remote); -void connect_any(struct uring_task *task, -		 struct list_head *addrs, struct connection *conn, -		 connection_cb_t cb); +void connect_any(struct uring_task *task, struct list_head *addrs, +		 struct connection *conn, connection_cb_t cb);  #endif diff --git a/minecproxy/ptimer.c b/minecproxy/ptimer.c index 845fbfa..6ed405d 100644 --- a/minecproxy/ptimer.c +++ b/minecproxy/ptimer.c @@ -16,18 +16,11 @@ struct ptimer {  	struct list_head ptasks;  }; -static void -ptimer_set(unsigned value, unsigned interval) +static void ptimer_set(unsigned value, unsigned interval)  {  	struct itimerspec tspec = { -		.it_interval = { -			.tv_sec  = interval, -			.tv_nsec = 0 -		}, -		.it_value = { -			.tv_sec  = value, -			.tv_nsec = 0 -		} +		.it_interval = { .tv_sec = interval, .tv_nsec = 0 }, +		.it_value = { .tv_sec = value, .tv_nsec = 0 }  	};  	assert_return(cfg->ptimer && cfg->ptimer->task.fd >= 0); @@ -36,16 +29,14 @@ ptimer_set(unsigned value, unsigned interval)  		error("timerfd_settime: %m");  } -static unsigned -gcd(unsigned a, unsigned b) +static unsigned gcd(unsigned a, unsigned b)  {  	if (a == 0)  		return b;  	return gcd(b % a, a);  } -static unsigned -array_gcd(unsigned arr[], unsigned n) +static unsigned array_gcd(unsigned arr[], unsigned n)  {  	unsigned result = arr[0]; @@ -55,8 +46,7 @@ array_gcd(unsigned arr[], unsigned n)  	return result;  } -static void -ptimer_tick(struct ptimer *ptimer) +static void ptimer_tick(struct ptimer *ptimer)  {  	time_t now = time(NULL);  	unsigned diff = (unsigned)(now - ptimer->previous_time); @@ -69,8 +59,8 @@ ptimer_tick(struct ptimer *ptimer)  			continue;  		} -		debug(DBG_TIMER, "triggering ptask %p (times %u)", -		      ptask, ptask->times); +		debug(DBG_TIMER, "triggering ptask %p (times %u)", ptask, +		      ptask->times);  		ptask->cb(ptask);  		ptask->remain = ptask->interval; @@ -88,8 +78,7 @@ ptimer_tick(struct ptimer *ptimer)  	ptimer->previous_time = now;  } -static void -ptimer_reconfig(struct ptimer *ptimer) +static void ptimer_reconfig(struct ptimer *ptimer)  {  	struct ptimer_task *ptask;  	unsigned i = 0; @@ -116,8 +105,7 @@ ptimer_reconfig(struct ptimer *ptimer)  	ptimer_set(lowest, interval);  } -void -ptimer_del_task(struct ptimer_task *ptask) +void ptimer_del_task(struct ptimer_task *ptask)  {  	struct ptimer *ptimer = cfg->ptimer; @@ -133,8 +121,7 @@ ptimer_del_task(struct ptimer_task *ptask)  	uring_task_put(&ptimer->task);  } -void -ptimer_add_task(struct ptimer_task *ptask) +void ptimer_add_task(struct ptimer_task *ptask)  {  	struct ptimer *ptimer = cfg->ptimer; @@ -150,16 +137,14 @@ ptimer_add_task(struct ptimer_task *ptask)  	ptimer_reconfig(ptimer);  } -void -ptimer_refdump() +void ptimer_refdump()  {  	assert_return(cfg->ptimer);  	uring_task_refdump(&cfg->ptimer->task);  } -static void -ptimer_free(struct uring_task *task) +static void ptimer_free(struct uring_task *task)  {  	struct ptimer *ptimer = container_of(task, struct ptimer, task); @@ -170,8 +155,7 @@ ptimer_free(struct uring_task *task)  	cfg->ptimer = NULL;  } -void -ptimer_delete() +void ptimer_delete()  {  	assert_return(cfg->ptimer); @@ -179,8 +163,7 @@ ptimer_delete()  	uring_task_destroy(&cfg->ptimer->task);  } -static void -ptimer_cb(struct uring_task *task, int res) +static void ptimer_cb(struct uring_task *task, int res)  {  	struct ptimer *ptimer = container_of(task, struct ptimer, task); @@ -193,15 +176,15 @@ ptimer_cb(struct uring_task *task, int res)  	}  	ptimer_tick(ptimer); -	uring_read(&ptimer->task, &ptimer->value, sizeof(ptimer->value), ptimer_cb); +	uring_read(&ptimer->task, &ptimer->value, sizeof(ptimer->value), +		   ptimer_cb);  } -void -ptimer_init() +void ptimer_init()  {  	struct ptimer *ptimer;  	int tfd; -  +  	assert_return(!cfg->ptimer);  	ptimer = zmalloc(sizeof(*ptimer)); @@ -218,6 +201,6 @@ ptimer_init()  	uring_task_init(&ptimer->task, "ptimer", uring_parent(), ptimer_free);  	uring_task_set_fd(&ptimer->task, tfd);  	cfg->ptimer = ptimer; -	uring_read(&ptimer->task, &ptimer->value, sizeof(ptimer->value), ptimer_cb); +	uring_read(&ptimer->task, &ptimer->value, sizeof(ptimer->value), +		   ptimer_cb);  } - diff --git a/minecproxy/ptimer.h b/minecproxy/ptimer.h index 0b53590..3481ba4 100644 --- a/minecproxy/ptimer.h +++ b/minecproxy/ptimer.h @@ -10,9 +10,8 @@ struct ptimer_task {  	struct list_head list;  }; -static inline void -ptask_init(struct ptimer_task *ptask, unsigned interval, -	   unsigned times, void(*cb)(struct ptimer_task *)) +static inline void ptask_init(struct ptimer_task *ptask, unsigned interval, +			      unsigned times, void (*cb)(struct ptimer_task *))  {  	ptask->interval = interval;  	ptask->times = times; diff --git a/minecproxy/server-config.c b/minecproxy/server-config.c index 92990d3..71463ee 100644 --- a/minecproxy/server-config.c +++ b/minecproxy/server-config.c @@ -16,8 +16,8 @@  #include "server-config.h"  #include "server-config-options.h" -static void -scfg_dns_cb(struct dns_async *dns, bool (*server_cb)(struct server *, struct saddr *)) +static void scfg_dns_cb(struct dns_async *dns, +			bool (*server_cb)(struct server *, struct saddr *))  {  	struct server *server;  	struct sockaddr_in *in4; @@ -29,8 +29,9 @@ scfg_dns_cb(struct dns_async *dns, bool (*server_cb)(struct server *, struct sad  	assert_return(dns && dns->priv && server_cb);  	server = dns->priv; -	debug(DBG_DNS, "called, dns: %p, name: %s, server: %p, server->name: %s", -	      dns, dns->name, server, server->name); +	debug(DBG_DNS, +	      "called, dns: %p, name: %s, server: %p, server->name: %s", dns, +	      dns->name, server, server->name);  	r = gai_error(&dns->gcb);  	if (r == EAI_INPROGRESS) { @@ -41,8 +42,8 @@ scfg_dns_cb(struct dns_async *dns, bool (*server_cb)(struct server *, struct sad  		/* The server must be in the process of going away */  		goto out;  	} else if (r < 0) { -		error("DNS lookup of %s:%s failed: %s", -		      dns->name, dns->port, gai_strerror(r)); +		error("DNS lookup of %s:%s failed: %s", dns->name, dns->port, +		      gai_strerror(r));  		goto out;  	} @@ -51,14 +52,16 @@ scfg_dns_cb(struct dns_async *dns, bool (*server_cb)(struct server *, struct sad  	for (ai = results; ai; ai = ai->ai_next) {  		saddr = zmalloc(sizeof(*saddr));  		if (!saddr) { -			error("DNS lookup of %s:%s failed: %m", dns->name, dns->port); +			error("DNS lookup of %s:%s failed: %m", dns->name, +			      dns->port);  			goto out;  		}  		switch (ai->ai_family) {  		case AF_INET:  			in4 = (struct sockaddr_in *)ai->ai_addr; -			saddr_set_ipv4(saddr, in4->sin_addr.s_addr, in4->sin_port); +			saddr_set_ipv4(saddr, in4->sin_addr.s_addr, +				       in4->sin_port);  			server_cb(server, saddr);  			break; @@ -84,34 +87,30 @@ out:  	server_commit(server);  } -static void -scfg_local_dns_cb(struct dns_async *dns) +static void scfg_local_dns_cb(struct dns_async *dns)  {  	assert_return(dns);  	scfg_dns_cb(dns, server_add_local);  } -static void -scfg_remote_dns_cb(struct dns_async *dns) +static void scfg_remote_dns_cb(struct dns_async *dns)  {  	assert_return(dns);  	scfg_dns_cb(dns, server_add_remote);  } -static void -scfg_rcon_dns_cb(struct dns_async *dns) +static void scfg_rcon_dns_cb(struct dns_async *dns)  {  	assert_return(dns);  	scfg_dns_cb(dns, server_add_rcon);  } -static bool -handle_dns(struct server *server, const char *type, -	   struct cfg_value *value, dns_cb_t *async_cb, -	   bool (*sync_cb)(struct server *, struct saddr *)) +static bool handle_dns(struct server *server, const char *type, +		       struct cfg_value *value, dns_cb_t *async_cb, +		       bool (*sync_cb)(struct server *, struct saddr *))  {  	struct saddr *saddr, *tmp;  	struct dns_async *dns; @@ -129,8 +128,8 @@ handle_dns(struct server *server, const char *type,  		return true;  	case CFG_VAL_TYPE_ASYNC_ADDRS: -		debug(DBG_DNS, "%s: doing async lookup of DNS record: %p", -		      type, value->dns_async); +		debug(DBG_DNS, "%s: doing async lookup of DNS record: %p", type, +		      value->dns_async);  		dns = value->dns_async;  		dns->cb = async_cb; @@ -144,8 +143,7 @@ handle_dns(struct server *server, const char *type,  	}  } -static void -scfg_parse(struct server *server) +static void scfg_parse(struct server *server)  {  	char *pos; @@ -163,8 +161,8 @@ scfg_parse(struct server *server)  		const char *keyname;  		struct cfg_value value; -		if (!config_parse_line(server->name, &pos, scfg_key_map, -				       &key, &keyname, &value, true)) +		if (!config_parse_line(server->name, &pos, scfg_key_map, &key, +				       &keyname, &value, true))  			break;  		if (key == SCFG_KEY_INVALID) @@ -173,13 +171,13 @@ scfg_parse(struct server *server)  		debug(DBG_CFG, "%s: key %s", server->name, keyname);  		switch (key) { -  		case SCFG_KEY_TYPE:  			if (streq(value.str, "proxy")) {  				if (!server_set_type(server, SERVER_TYPE_PROXY))  					return;  			} else if (streq(value.str, "announce")) { -				if (!server_set_type(server, SERVER_TYPE_ANNOUNCE)) +				if (!server_set_type(server, +						     SERVER_TYPE_ANNOUNCE))  					return;  			}  			break; @@ -213,23 +211,29 @@ scfg_parse(struct server *server)  		case SCFG_KEY_STOP_METHOD:  			if (streq(value.str, "exec")) { -				if (server_set_stop_method(server, SERVER_STOP_METHOD_EXEC)) +				if (server_set_stop_method( +					    server, SERVER_STOP_METHOD_EXEC))  					break;  			} else if (streq(value.str, "rcon")) { -				if (server_set_stop_method(server, SERVER_STOP_METHOD_RCON)) +				if (server_set_stop_method( +					    server, SERVER_STOP_METHOD_RCON))  					break;  			} else if (streq(value.str, "systemd")) { -				if (server_set_stop_method(server, SERVER_STOP_METHOD_SYSTEMD)) +				if (server_set_stop_method( +					    server, SERVER_STOP_METHOD_SYSTEMD))  					break;  			}  			return;  		case SCFG_KEY_START_METHOD:  			if (streq(value.str, "exec")) { -				if (server_set_start_method(server, SERVER_START_METHOD_EXEC)) +				if (server_set_start_method( +					    server, SERVER_START_METHOD_EXEC))  					break;  			} else if (streq(value.str, "systemd")) { -				if (server_set_start_method(server, SERVER_START_METHOD_SYSTEMD)) +				if (server_set_start_method( +					    server, +					    SERVER_START_METHOD_SYSTEMD))  					break;  			}  			return; @@ -267,8 +271,7 @@ scfg_parse(struct server *server)  	}  } -static void -scfg_read_cb(struct uring_task *task, int res) +static void scfg_read_cb(struct uring_task *task, int res)  {  	struct server *server = container_of(task, struct server, task); @@ -276,8 +279,8 @@ scfg_read_cb(struct uring_task *task, int res)  	assert_task_alive(DBG_CFG, task);  	if (res <= 0) { -		error("error reading config file for %s: %s", -		      server->name, strerror(-res)); +		error("error reading config file for %s: %s", server->name, +		      strerror(-res));  		server_delete(server);  	} @@ -287,8 +290,7 @@ scfg_read_cb(struct uring_task *task, int res)  	server_commit(server);  } -static void  -scfg_open_cb(struct uring_task *task, int res) +static void scfg_open_cb(struct uring_task *task, int res)  {  	struct server *server = container_of(task, struct server, task); @@ -311,12 +313,10 @@ struct server_cfg_monitor {  	char buf[4096] _alignas_(struct inotify_event);  }; -static void -scfgm_free(struct uring_task *task) +static void scfgm_free(struct uring_task *task)  { -	struct server_cfg_monitor *scfgm = container_of(task, -							struct server_cfg_monitor, -							task); +	struct server_cfg_monitor *scfgm = +		container_of(task, struct server_cfg_monitor, task);  	assert_return(task); @@ -325,8 +325,7 @@ scfgm_free(struct uring_task *task)  	cfg->server_cfg_monitor = NULL;  } -static void -inotify_event_dump(const struct inotify_event *event) +static void inotify_event_dump(const struct inotify_event *event)  {  	assert_return(event); @@ -338,42 +337,40 @@ inotify_event_dump(const struct inotify_event *event)  	debug(DBG_CFG, " * Mask   : %" PRIu32, event->mask);  	if (event->mask & IN_ACCESS)  		debug(DBG_CFG, "\tIN_ACCESS"); -	else if(event->mask & IN_MODIFY) +	else if (event->mask & IN_MODIFY)  		debug(DBG_CFG, "\tIN_MODIFY"); -	else if(event->mask & IN_ATTRIB) +	else if (event->mask & IN_ATTRIB)  		debug(DBG_CFG, "\tIN_ATTRIB"); -	else if(event->mask & IN_CLOSE_WRITE) +	else if (event->mask & IN_CLOSE_WRITE)  		debug(DBG_CFG, "\tIN_CLOSE_WRITE"); -	else if(event->mask & IN_CLOSE_NOWRITE) +	else if (event->mask & IN_CLOSE_NOWRITE)  		debug(DBG_CFG, "\tIN_CLOSE_NOWRITE"); -	else if(event->mask & IN_OPEN) +	else if (event->mask & IN_OPEN)  		debug(DBG_CFG, "\tIN_OPEN"); -	else if(event->mask & IN_MOVED_FROM) +	else if (event->mask & IN_MOVED_FROM)  		debug(DBG_CFG, "\tIN_MOVED_FROM"); -	else if(event->mask & IN_MOVED_TO) +	else if (event->mask & IN_MOVED_TO)  		debug(DBG_CFG, "\tIN_MOVED_TO"); -	else if(event->mask & IN_CREATE) +	else if (event->mask & IN_CREATE)  		debug(DBG_CFG, "\tIN_CREATE"); -	else if(event->mask & IN_DELETE) +	else if (event->mask & IN_DELETE)  		debug(DBG_CFG, "\tIN_DELETE"); -	else if(event->mask & IN_DELETE_SELF) +	else if (event->mask & IN_DELETE_SELF)  		debug(DBG_CFG, "\tIN_DELETE_SELF"); -	else if(event->mask & IN_MOVE_SELF) +	else if (event->mask & IN_MOVE_SELF)  		debug(DBG_CFG, "\tIN_MOVE_SELF"); -	else if(event->mask & IN_UNMOUNT) +	else if (event->mask & IN_UNMOUNT)  		debug(DBG_CFG, "\tIN_UNMOUNT"); -	else if(event->mask & IN_Q_OVERFLOW) +	else if (event->mask & IN_Q_OVERFLOW)  		debug(DBG_CFG, "\tIN_Q_OVERFLOW"); -	else if(event->mask & IN_IGNORED) +	else if (event->mask & IN_IGNORED)  		debug(DBG_CFG, "\tIN_IGNORED");  } -static void -inotify_cb(struct uring_task *task, int res) +static void inotify_cb(struct uring_task *task, int res)  { -	struct server_cfg_monitor *scfgm = container_of(task, -							struct server_cfg_monitor, -							task); +	struct server_cfg_monitor *scfgm = +		container_of(task, struct server_cfg_monitor, task);  	const struct inotify_event *event;  	char *ptr;  	struct server *server; @@ -386,13 +383,15 @@ inotify_cb(struct uring_task *task, int res)  		return;  	} -	for (ptr = scfgm->buf; ptr < scfgm->buf + res; ptr += sizeof(struct inotify_event) + event->len) { +	for (ptr = scfgm->buf; ptr < scfgm->buf + res; +	     ptr += sizeof(struct inotify_event) + event->len) {  		event = (const struct inotify_event *)ptr;  		if (debug_enabled(DBG_CFG))  			inotify_event_dump(event); -		if (event->mask & (IN_IGNORED | IN_MOVE_SELF | IN_DELETE_SELF | IN_UNMOUNT)) +		if (event->mask & +		    (IN_IGNORED | IN_MOVE_SELF | IN_DELETE_SELF | IN_UNMOUNT))  			die("configuration directory gone, exiting");  		if (event->mask & IN_Q_OVERFLOW) { @@ -405,9 +404,11 @@ inotify_cb(struct uring_task *task, int res)  		if (event->mask & (IN_MOVED_FROM | IN_DELETE))  			server_delete_by_name(event->name); -		else if (event->mask & (IN_MOVED_TO | IN_CREATE | IN_CLOSE_WRITE)) { +		else if (event->mask & +			 (IN_MOVED_TO | IN_CREATE | IN_CLOSE_WRITE)) {  			server = server_new(event->name); -			verbose("New server config file detected: %s", server->name); +			verbose("New server config file detected: %s", +				server->name);  			uring_openat(&server->task, server->name, scfg_open_cb);  		} else  			error("inotify: unknown event: 0x%08x", event->mask); @@ -416,16 +417,14 @@ inotify_cb(struct uring_task *task, int res)  	uring_read(&scfgm->task, scfgm->buf, sizeof(scfgm->buf), inotify_cb);  } -void -server_cfg_monitor_refdump() +void server_cfg_monitor_refdump()  {  	assert_return_silent(cfg->server_cfg_monitor);  	uring_task_refdump(&cfg->server_cfg_monitor->task);  } -void -server_cfg_monitor_delete() +void server_cfg_monitor_delete()  {  	assert_return(cfg->server_cfg_monitor); @@ -434,8 +433,7 @@ server_cfg_monitor_delete()  	cfg->server_cfg_monitor = NULL;  } -void -server_cfg_monitor_init() +void server_cfg_monitor_init()  {  	int ifd;  	int iwd; @@ -455,15 +453,16 @@ server_cfg_monitor_init()  		die("inotify_init1: %m");  	/* ln = IN_CREATE, cp/vi/mv = IN_CREATE, IN_OPEN, IN_CLOSE_WRITE */ -	iwd = inotify_add_watch(ifd, ".", -				IN_CLOSE_WRITE | IN_DELETE | IN_CREATE | -				IN_DELETE_SELF | IN_MOVE_SELF | IN_MOVED_TO | -				IN_MOVED_FROM | IN_DONT_FOLLOW | -				IN_EXCL_UNLINK | IN_ONLYDIR ); +	iwd = inotify_add_watch( +		ifd, ".", +		IN_CLOSE_WRITE | IN_DELETE | IN_CREATE | IN_DELETE_SELF | +			IN_MOVE_SELF | IN_MOVED_TO | IN_MOVED_FROM | +			IN_DONT_FOLLOW | IN_EXCL_UNLINK | IN_ONLYDIR);  	if (iwd < 0)  		die("inotify_add_watch: %m"); -	uring_task_init(&scfgm->task, "server-config-monitor", uring_parent(), scfgm_free); +	uring_task_init(&scfgm->task, "server-config-monitor", uring_parent(), +			scfgm_free);  	uring_task_set_fd(&scfgm->task, ifd);  	cfg->server_cfg_monitor = scfgm;  	uring_read(&scfgm->task, scfgm->buf, sizeof(scfgm->buf), inotify_cb); @@ -483,4 +482,3 @@ server_cfg_monitor_init()  	closedir(dir);  } - diff --git a/minecproxy/server-proxy.c b/minecproxy/server-proxy.c index 087773d..b80a220 100644 --- a/minecproxy/server-proxy.c +++ b/minecproxy/server-proxy.c @@ -13,8 +13,7 @@  #include "server.h"  #include "server-proxy.h" -static void -format_bytes(char *buf, size_t len, uint64_t val) +static void format_bytes(char *buf, size_t len, uint64_t val)  {  	uint64_t tmp;  	const char *suffix = "B"; @@ -24,11 +23,11 @@ format_bytes(char *buf, size_t len, uint64_t val)  	tmp = val * 10;  	if (val > 1152921504606846976ULL) {  		tmp = val / 115292150460684697ULL; -		suffix= "EiB"; +		suffix = "EiB";  	} else if (val > 1125899906842624ULL) {  		tmp /= 1125899906842624ULL;  		suffix = "PiB"; -	} else  if (val > 1099511627776ULL) { +	} else if (val > 1099511627776ULL) {  		tmp /= 1099511627776ULL;  		suffix = "TiB";  	} else if (val > 1073741824ULL) { @@ -45,8 +44,7 @@ format_bytes(char *buf, size_t len, uint64_t val)  	snprintf(buf, len, "%lu.%lu %s", tmp / 10, tmp % 10, suffix);  } -static void -format_time(char *buf, size_t len, time_t diff) +static void format_time(char *buf, size_t len, time_t diff)  {  	unsigned hh, mm, ss; @@ -61,62 +59,60 @@ format_time(char *buf, size_t len, time_t diff)  	snprintf(buf, len, "%02u:%02u:%02u", hh, mm, ss);  } -static void -proxy_free(struct uring_task *task) +static void proxy_free(struct uring_task *task)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, task); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, task);  	char cts[100];  	char stc[100];  	char duration[100];  	assert_return(task); -	debug(DBG_PROXY, "server: %s, src: %s, dst: %s", -	      proxy->server->name, +	debug(DBG_PROXY, "server: %s, src: %s, dst: %s", proxy->server->name,  	      proxy->client_conn.remote.addrstr,  	      proxy->server_conn.remote.addrstr);  	if (proxy->begin > 0) { -		format_time(duration, sizeof(duration), time(NULL) - proxy->begin); +		format_time(duration, sizeof(duration), +			    time(NULL) - proxy->begin);  		format_bytes(cts, sizeof(cts), proxy->client_bytes);  		format_bytes(stc, sizeof(stc), proxy->server_bytes);  		info("%s: proxy connection %s -> %s closed "  		     "(CtS: %s, StC: %s), duration %s", -		     proxy->server->name, -		     proxy->client_conn.remote.addrstr, -		     proxy->server_conn.remote.addrstr, -		     cts, stc, duration); +		     proxy->server->name, proxy->client_conn.remote.addrstr, +		     proxy->server_conn.remote.addrstr, cts, stc, duration);  	}  	list_del(&proxy->list);  	xfree(proxy);  } -static void -proxy_client_free(struct uring_task *task) +static void proxy_client_free(struct uring_task *task)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, clienttask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, clienttask);  	assert_return(task);  	debug(DBG_PROXY, "%s: client connection closed", proxy->server->name);  } -static void -proxy_server_free(struct uring_task *task) +static void proxy_server_free(struct uring_task *task)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, servertask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, servertask);  	assert_return(task);  	debug(DBG_PROXY, "%s: server connection closed", proxy->server->name);  } -void -proxy_delete(struct server_proxy *proxy) +void proxy_delete(struct server_proxy *proxy)  { -	debug(DBG_PROXY, "%s: shutting down proxy %p", proxy->server->name, proxy); +	debug(DBG_PROXY, "%s: shutting down proxy %p", proxy->server->name, +	      proxy);  	assert_return(proxy); @@ -141,10 +137,10 @@ proxy_delete(struct server_proxy *proxy)   */  static void proxy_client_read(struct uring_task *task, int res); -static void -proxy_client_written(struct uring_task *task, int res) +static void proxy_client_written(struct uring_task *task, int res)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, clienttask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, clienttask);  	assert_return(task);  	assert_task_alive(DBG_PROXY, task); @@ -160,10 +156,10 @@ proxy_client_written(struct uring_task *task, int res)  	uring_tbuf_read(task, proxy_client_read);  } -static void -proxy_client_read(struct uring_task *task, int res) +static void proxy_client_read(struct uring_task *task, int res)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, clienttask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, clienttask);  	assert_return(task);  	assert_task_alive(DBG_PROXY, task); @@ -180,10 +176,10 @@ proxy_client_read(struct uring_task *task, int res)  static void proxy_server_read(struct uring_task *task, int res); -static void -proxy_server_written(struct uring_task *task, int res) +static void proxy_server_written(struct uring_task *task, int res)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, servertask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, servertask);  	assert_return(task);  	assert_task_alive(DBG_PROXY, task); @@ -199,10 +195,10 @@ proxy_server_written(struct uring_task *task, int res)  	uring_tbuf_read(&proxy->servertask, proxy_server_read);  } -static void -proxy_server_read(struct uring_task *task, int res) +static void proxy_server_read(struct uring_task *task, int res)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, servertask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, servertask);  	assert_return(task);  	assert_task_alive(DBG_PROXY, task); @@ -222,10 +218,10 @@ proxy_server_read(struct uring_task *task, int res)   */  static void proxy_client_spliced_in(struct uring_task *task, int res); -static void -proxy_client_spliced_out(struct uring_task *task, int res) +static void proxy_client_spliced_out(struct uring_task *task, int res)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, servertask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, servertask);  	assert_return(task);  	assert_task_alive(DBG_PROXY, task); @@ -236,13 +232,14 @@ proxy_client_spliced_out(struct uring_task *task, int res)  		return;  	} -	uring_splice(task, proxy->cfd, proxy->cpipe[PIPE_WR], proxy_client_spliced_in); +	uring_splice(task, proxy->cfd, proxy->cpipe[PIPE_WR], +		     proxy_client_spliced_in);  } -static void -proxy_client_spliced_in(struct uring_task *task, int res) +static void proxy_client_spliced_in(struct uring_task *task, int res)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, servertask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, servertask);  	assert_return(task);  	assert_task_alive(DBG_PROXY, task); @@ -253,15 +250,16 @@ proxy_client_spliced_in(struct uring_task *task, int res)  		return;  	} -	uring_splice(task, proxy->cpipe[PIPE_RD], proxy->sfd, proxy_client_spliced_out); +	uring_splice(task, proxy->cpipe[PIPE_RD], proxy->sfd, +		     proxy_client_spliced_out);  }  static void proxy_server_spliced_in(struct uring_task *task, int res); -static void -proxy_server_spliced_out(struct uring_task *task, int res) +static void proxy_server_spliced_out(struct uring_task *task, int res)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, servertask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, servertask);  	assert_return(task);  	assert_task_alive(DBG_PROXY, task); @@ -272,13 +270,14 @@ proxy_server_spliced_out(struct uring_task *task, int res)  		return;  	} -	uring_splice(task, proxy->sfd, proxy->spipe[PIPE_WR], proxy_server_spliced_in); +	uring_splice(task, proxy->sfd, proxy->spipe[PIPE_WR], +		     proxy_server_spliced_in);  } -static void -proxy_server_spliced_in(struct uring_task *task, int res) +static void proxy_server_spliced_in(struct uring_task *task, int res)  { -	struct server_proxy *proxy = container_of(task, struct server_proxy, servertask); +	struct server_proxy *proxy = +		container_of(task, struct server_proxy, servertask);  	assert_return(task);  	assert_task_alive(DBG_PROXY, task); @@ -289,13 +288,14 @@ proxy_server_spliced_in(struct uring_task *task, int res)  		return;  	} -	uring_splice(task, proxy->spipe[PIPE_RD], proxy->cfd, proxy_server_spliced_out); +	uring_splice(task, proxy->spipe[PIPE_RD], proxy->cfd, +		     proxy_server_spliced_out);  } -static void -proxy_connected_cb(struct connection *conn, bool connected) +static void proxy_connected_cb(struct connection *conn, bool connected)  { -	struct server_proxy *proxy = container_of(conn, struct server_proxy, server_conn); +	struct server_proxy *proxy = +		container_of(conn, struct server_proxy, server_conn);  	assert_return(conn);  	assert_task_alive(DBG_PROXY, &proxy->clienttask); @@ -313,16 +313,17 @@ proxy_connected_cb(struct connection *conn, bool connected)  	ptimer_del_task(&proxy->ptask);  	proxy->sfd = proxy->servertask.fd; -	verbose("%s: proxy connection %s -> %s opened", -		proxy->server->name, +	verbose("%s: proxy connection %s -> %s opened", proxy->server->name,  		proxy->client_conn.remote.addrstr,  		proxy->server_conn.remote.addrstr);  	proxy->begin = time(NULL);  	if (cfg->splice_supported) {  		debug(DBG_PROXY, "handling proxy connection with splice"); -		uring_splice(&proxy->clienttask, proxy->cfd, proxy->cpipe[PIPE_WR], proxy_client_spliced_in); -		uring_splice(&proxy->servertask, proxy->sfd, proxy->spipe[PIPE_WR], proxy_server_spliced_in); +		uring_splice(&proxy->clienttask, proxy->cfd, +			     proxy->cpipe[PIPE_WR], proxy_client_spliced_in); +		uring_splice(&proxy->servertask, proxy->sfd, +			     proxy->spipe[PIPE_WR], proxy_server_spliced_in);  	} else {  		debug(DBG_PROXY, "handling proxy connection with read-write");  		uring_tbuf_read(&proxy->clienttask, proxy_client_read); @@ -330,8 +331,7 @@ proxy_connected_cb(struct connection *conn, bool connected)  	}  } -void -proxy_refdump(struct server_proxy *proxy) +void proxy_refdump(struct server_proxy *proxy)  {  	assert_return(proxy); @@ -340,10 +340,10 @@ proxy_refdump(struct server_proxy *proxy)  	uring_task_refdump(&proxy->servertask);  } -static void -proxy_connect_timer_cb(struct ptimer_task *ptask) +static void proxy_connect_timer_cb(struct ptimer_task *ptask)  { -	struct server_proxy *proxy = container_of(ptask, struct server_proxy, ptask); +	struct server_proxy *proxy = +		container_of(ptask, struct server_proxy, ptask);  	assert_return(ptask); @@ -355,8 +355,8 @@ proxy_connect_timer_cb(struct ptimer_task *ptask)  		    &proxy->server_conn, proxy_connected_cb);  } -struct server_proxy * -proxy_new(struct server *server, struct saddr *client, int fd) +struct server_proxy *proxy_new(struct server *server, struct saddr *client, +			       int fd)  {  	struct server_proxy *proxy; @@ -412,8 +412,8 @@ proxy_new(struct server *server, struct saddr *client, int fd)  	}  	proxy->connecting = true; -	connect_any(&proxy->servertask, &server->remotes, -		    &proxy->server_conn, proxy_connected_cb); +	connect_any(&proxy->servertask, &server->remotes, &proxy->server_conn, +		    proxy_connected_cb);  	return proxy; @@ -426,10 +426,10 @@ out:  	return NULL;  } -static void -local_accept(struct uring_task *task, int res) +static void local_accept(struct uring_task *task, int res)  { -	struct server_local *local = container_of(task, struct server_local, task); +	struct server_local *local = +		container_of(task, struct server_local, task);  	struct server *server = container_of(task->parent, struct server, task);  	struct server_proxy *proxy; @@ -445,8 +445,8 @@ local_accept(struct uring_task *task, int res)  	saddr_set_addrstr(&local->client); -	verbose("%s: incoming proxy connection: %s -> %s", -		server->name, local->client.addrstr, local->local.addrstr); +	verbose("%s: incoming proxy connection: %s -> %s", server->name, +		local->client.addrstr, local->local.addrstr);  	if (list_empty(&server->remotes)) {  		/* This shouldn't be possible, checked before opening local */ @@ -463,8 +463,7 @@ out:  	uring_accept(&local->task, &local->client, local_accept);  } -bool -local_open(struct server_local *local) +bool local_open(struct server_local *local)  {  	int sfd;  	int option; @@ -472,14 +471,15 @@ local_open(struct server_local *local)  	assert_return(local && local->server, false); -	sfd = socket(local->local.storage.ss_family, SOCK_STREAM | SOCK_CLOEXEC, 0); +	sfd = socket(local->local.st.ss_family, SOCK_STREAM | SOCK_CLOEXEC, 0);  	if (sfd < 0) {  		error("socket: %m");  		goto error;  	}  	option = true; -	if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)) < 0) { +	if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)) < +	    0) {  		error("setsockopt: %m");  		goto error;  	} @@ -487,7 +487,8 @@ local_open(struct server_local *local)  	/* The MC protocol expects the client to send data first */  	if (cfg->socket_defer) {  		option = true; -		if (setsockopt(sfd, IPPROTO_TCP, TCP_DEFER_ACCEPT, &option, sizeof(option)) < 0) +		if (setsockopt(sfd, IPPROTO_TCP, TCP_DEFER_ACCEPT, &option, +			       sizeof(option)) < 0)  			error("setsockopt: %m");  	} @@ -497,14 +498,16 @@ local_open(struct server_local *local)  	 */  	if (cfg->socket_freebind) {  		option = true; -		if (setsockopt(sfd, IPPROTO_IP, IP_FREEBIND, &option, sizeof(option)) < 0) +		if (setsockopt(sfd, IPPROTO_IP, IP_FREEBIND, &option, +			       sizeof(option)) < 0)  			error("setsockopt: %m");  	} -	socket_set_low_latency(sfd, cfg->socket_keepalive, -			       cfg->socket_iptos, cfg->socket_nodelay); +	socket_set_low_latency(sfd, cfg->socket_keepalive, cfg->socket_iptos, +			       cfg->socket_nodelay); -	r = bind(sfd, (struct sockaddr *)&local->local.storage, local->local.addrlen); +	r = bind(sfd, (struct sockaddr *)&local->local.st, +		 local->local.addrlen);  	if (r < 0) {  		error("bind: %m");  		goto error; @@ -526,18 +529,17 @@ error:  	return false;  } -void -local_refdump(struct server_local *local) +void local_refdump(struct server_local *local)  {  	assert_return(local);  	uring_task_refdump(&local->task);  } -static void -local_free(struct uring_task *task) +static void local_free(struct uring_task *task)  { -	struct server_local *local = container_of(task, struct server_local, task); +	struct server_local *local = +		container_of(task, struct server_local, task);  	assert_return(task); @@ -546,16 +548,14 @@ local_free(struct uring_task *task)  	xfree(local);  } -void -local_delete(struct server_local *local) +void local_delete(struct server_local *local)  {  	assert_return(local);  	uring_task_destroy(&local->task);  } -struct server_local * -local_new(struct server *server, struct saddr *saddr) +struct server_local *local_new(struct server *server, struct saddr *saddr)  {  	struct server_local *local; @@ -574,4 +574,3 @@ local_new(struct server *server, struct saddr *saddr)  	xfree(saddr);  	return local;  } - diff --git a/minecproxy/server-proxy.h b/minecproxy/server-proxy.h index ee3bda3..877ae9a 100644 --- a/minecproxy/server-proxy.h +++ b/minecproxy/server-proxy.h @@ -15,7 +15,7 @@ struct server_proxy {  	uint64_t server_bytes;  	int spipe[2];  	int sfd; -	 +  	bool connecting;  	time_t begin;  	struct ptimer_task ptask; diff --git a/minecproxy/server-rcon.c b/minecproxy/server-rcon.c index b19bdb1..9562aa9 100644 --- a/minecproxy/server-rcon.c +++ b/minecproxy/server-rcon.c @@ -16,8 +16,7 @@  #include "server-rcon.h"  #include "rcon-protocol.h" -static int -rcon_packet_complete(struct uring_task *task, _unused_ int res) +static int rcon_packet_complete(struct uring_task *task, _unused_ int res)  {  	assert_return(task, -EINVAL);  	assert_task_alive_or(DBG_RCON, task, return -EINTR); @@ -25,23 +24,22 @@ rcon_packet_complete(struct uring_task *task, _unused_ int res)  	return rcon_protocol_packet_complete(task->tbuf->buf, task->tbuf->len);  } -static bool -rcon_check_reply(struct uring_task *task, int res, int32_t *id, -		 int32_t *type, const char **msg) +static bool rcon_check_reply(struct uring_task *task, int res, int32_t *id, +			     int32_t *type, const char **msg)  {  	struct server *server = container_of(task, struct server, rcon_task);  	const char *error;  	if (res < 0) { -		error("rcon(%s): reading reply failed, res: %i", -		      server->name, res); +		error("rcon(%s): reading reply failed, res: %i", server->name, +		      res);  		goto error;  	} -	if (!rcon_protocol_read_packet(task->tbuf->buf, task->tbuf->len, -				       id, type, msg, &error)) { -		error("rcon(%s): failed to parse packet: %s", -		      server->name, error); +	if (!rcon_protocol_read_packet(task->tbuf->buf, task->tbuf->len, id, +				       type, msg, &error)) { +		error("rcon(%s): failed to parse packet: %s", server->name, +		      error);  		goto error;  	} @@ -52,8 +50,7 @@ error:  	return false;  } -static void -rcon_stop_reply(struct uring_task *task, int res) +static void rcon_stop_reply(struct uring_task *task, int res)  {  	struct server *server = container_of(task, struct server, rcon_task);  	int32_t id; @@ -82,8 +79,7 @@ out:  	uring_task_close_fd(task);  } -static void -rcon_stop_sent(struct uring_task *task, int res) +static void rcon_stop_sent(struct uring_task *task, int res)  {  	struct server *server = container_of(task, struct server, rcon_task); @@ -101,8 +97,7 @@ rcon_stop_sent(struct uring_task *task, int res)  	uring_tbuf_read_until(task, rcon_packet_complete, rcon_stop_reply);  } -static void -rcon_login_reply(struct uring_task *task, int res) +static void rcon_login_reply(struct uring_task *task, int res)  {  	struct server *server = container_of(task, struct server, rcon_task);  	int32_t id; @@ -140,8 +135,7 @@ error:  	uring_task_close_fd(task);  } -static void -rcon_login_sent(struct uring_task *task, int res) +static void rcon_login_sent(struct uring_task *task, int res)  {  	struct server *server = container_of(task, struct server, rcon_task); @@ -149,8 +143,8 @@ rcon_login_sent(struct uring_task *task, int res)  	assert_task_alive(DBG_RCON, task);  	if (res != task->tbuf->len) { -		error("rcon(%s): sending login failed, res: %i", -		      server->name, res); +		error("rcon(%s): sending login failed, res: %i", server->name, +		      res);  		uring_task_close_fd(task);  		return;  	} @@ -159,8 +153,7 @@ rcon_login_sent(struct uring_task *task, int res)  	uring_tbuf_read_until(task, rcon_packet_complete, rcon_login_reply);  } -static void -rcon_connected_cb(struct connection *conn, bool connected) +static void rcon_connected_cb(struct connection *conn, bool connected)  {  	struct server *server = container_of(conn, struct server, rcon_conn); @@ -175,13 +168,11 @@ rcon_connected_cb(struct connection *conn, bool connected)  	rcon_protocol_create_packet(server->rcon_tbuf.buf,  				    sizeof(server->rcon_tbuf.buf),  				    &server->rcon_tbuf.len, 1, -				    RCON_PACKET_LOGIN, -				    server->rcon_password); +				    RCON_PACKET_LOGIN, server->rcon_password);  	uring_tbuf_write(&server->rcon_task, rcon_login_sent);  } -static void -rcon_free(struct uring_task *task) +static void rcon_free(struct uring_task *task)  {  	struct server *server = container_of(task, struct server, rcon_task); @@ -190,25 +181,24 @@ rcon_free(struct uring_task *task)  	debug(DBG_RCON, "task %p, server %s (%p)", task, server->name, server);  } -void -rcon_stop(struct server *server) +void rcon_stop(struct server *server)  { -	assert_return(server && !list_empty(&server->rcons) && !empty_str(server->rcon_password)); +	assert_return(server && !list_empty(&server->rcons) && +		      !empty_str(server->rcon_password));  	assert_task_alive(DBG_RCON, &server->rcon_task); -	connect_any(&server->rcon_task, &server->rcons, &server->rcon_conn, rcon_connected_cb); +	connect_any(&server->rcon_task, &server->rcons, &server->rcon_conn, +		    rcon_connected_cb);  } -void -rcon_refdump(struct server *server) +void rcon_refdump(struct server *server)  {  	assert_return(server);  	uring_task_refdump(&server->rcon_task);  } -void -rcon_delete(struct server *server) +void rcon_delete(struct server *server)  {  	assert_return(server); @@ -216,12 +206,10 @@ rcon_delete(struct server *server)  	uring_task_destroy(&server->rcon_task);  } -void -rcon_init(struct server *server) +void rcon_init(struct server *server)  {  	assert_return(server);  	uring_task_init(&server->rcon_task, "rcon", &server->task, rcon_free);  	uring_task_set_buf(&server->rcon_task, &server->rcon_tbuf);  } - diff --git a/minecproxy/server.c b/minecproxy/server.c index 39b4024..8c521cf 100644 --- a/minecproxy/server.c +++ b/minecproxy/server.c @@ -20,8 +20,8 @@  #include "idle.h"  #include "systemd.h" -static bool -set_property(struct server *server, char **property, const char *value) +static bool set_property(struct server *server, char **property, +			 const char *value)  {  	assert_return(server && !*property && !empty_str(value), false); @@ -34,8 +34,7 @@ set_property(struct server *server, char **property, const char *value)  	return true;  } -void -server_refdump(struct server *server) +void server_refdump(struct server *server)  {  	struct server_local *local;  	struct server_proxy *proxy; @@ -53,8 +52,7 @@ server_refdump(struct server *server)  	rcon_refdump(server);  } -static void -server_free(struct uring_task *task) +static void server_free(struct uring_task *task)  {  	struct server *server = container_of(task, struct server, task); @@ -72,8 +70,7 @@ server_free(struct uring_task *task)  	xfree(server);  } -void -server_delete(struct server *server) +void server_delete(struct server *server)  {  	struct server_local *local, *ltmp;  	struct server_proxy *proxy, *ptmp; @@ -107,7 +104,7 @@ server_delete(struct server *server)  	list_for_each_entry_safe(dns, dtmp, &server->dnslookups, list)  		gai_cancel(&dns->gcb); -		 +  	uring_task_destroy(&server->idle_task);  	uring_poll_cancel(&server->exec_task);  	uring_task_put(&server->exec_task); @@ -115,8 +112,7 @@ server_delete(struct server *server)  	uring_task_put(&server->ann_task);  } -void -server_delete_by_name(const char *name) +void server_delete_by_name(const char *name)  {  	struct server *server; @@ -130,8 +126,7 @@ server_delete_by_name(const char *name)  	}  } -static void -server_dump(struct server *server) +static void server_dump(struct server *server)  {  	struct server_local *local;  	struct saddr *remote; @@ -151,8 +146,9 @@ server_dump(struct server *server)  		verbose("  * Type: unknown");  		break;  	} -	verbose("  * Name: %s", server->pretty_name ? server->pretty_name : "<undefined>"); -	verbose("  * Announce port: %" PRIu16, server->announce_port);  +	verbose("  * Name: %s", +		server->pretty_name ? server->pretty_name : "<undefined>"); +	verbose("  * Announce port: %" PRIu16, server->announce_port);  	if (!list_empty(&server->locals)) {  		verbose("  * Local:"); @@ -175,8 +171,7 @@ server_dump(struct server *server)  	verbose("");  } -static void -server_exec_free(struct uring_task *task) +static void server_exec_free(struct uring_task *task)  {  	assert_return(task); @@ -188,8 +183,7 @@ server_exec_free(struct uring_task *task)  #endif  /* FIXME: update states */ -static void -server_exec_done(struct uring_task *task, int res) +static void server_exec_done(struct uring_task *task, int res)  {  	struct server *server = container_of(task, struct server, exec_task);  	int r; @@ -205,10 +199,10 @@ server_exec_done(struct uring_task *task, int res)  	}  	r = waitid(P_PIDFD, server->exec_task.fd, &info, WEXITED); -        if (r < 0) { -                error("waitid: %m"); +	if (r < 0) { +		error("waitid: %m");  		goto out; -        } +	}  	if (info.si_status == 0)  		debug(DBG_SRV, "command successfully executed"); @@ -219,8 +213,7 @@ out:  	uring_task_close_fd(&server->exec_task);  } -static int -server_exec_child(void *ptr) +static int server_exec_child(void *ptr)  {  	const char *cmd = ptr; @@ -234,8 +227,7 @@ server_exec_child(void *ptr)  #define CLONE_PIDFD 0x00001000  #endif -static bool -server_exec(struct server *server, const char *cmd) +static bool server_exec(struct server *server, const char *cmd)  {  	char stack[4096]; /* Beautiful/horrible hack :) */  	int pidfd; @@ -243,9 +235,9 @@ server_exec(struct server *server, const char *cmd)  	assert_return(server && cmd && server->exec_task.fd < 1, false); -        r = clone(server_exec_child, stack + sizeof(stack), -                  CLONE_VM | CLONE_VFORK | CLONE_PIDFD | SIGCHLD, -                  (void *)cmd, &pidfd); +	r = clone(server_exec_child, stack + sizeof(stack), +		  CLONE_VM | CLONE_VFORK | CLONE_PIDFD | SIGCHLD, (void *)cmd, +		  &pidfd);  	if (r < 0) {  		error("clone: %m: %i", r);  		return false; @@ -256,14 +248,14 @@ server_exec(struct server *server, const char *cmd)  	return true;  } -static bool -server_check_running(struct server *server) +static bool server_check_running(struct server *server)  {  	assert_return(server, false);  	/* FIXME: other methods, rcon? */  	if (server->systemd_service) { -		verbose("%s: checking if systemd service is running", server->name); +		verbose("%s: checking if systemd service is running", +			server->name);  		if (systemd_service_running(server)) {  			server->state = SERVER_STATE_RUNNING;  			return true; @@ -276,21 +268,19 @@ server_check_running(struct server *server)  	return false;  } -bool -server_start(struct server *server) +bool server_start(struct server *server)  {  	assert_return(server, false);  	assert_task_alive_or(DBG_SRV, &server->task, return false);  	switch (server->start_method) { -  	case SERVER_START_METHOD_EXEC:  		verbose("Starting server %s via external cmd", server->name);  		return server_exec(server, server->start_exec);  	case SERVER_START_METHOD_SYSTEMD: -		verbose("Starting server %s via systemd (%s)", -			server->name, server->systemd_service); +		verbose("Starting server %s via systemd (%s)", server->name, +			server->systemd_service);  		if (systemd_service_start(server)) {  			server->state = SERVER_STATE_RUNNING; @@ -306,21 +296,19 @@ server_start(struct server *server)  	return false;  } -bool -server_stop(struct server *server) +bool server_stop(struct server *server)  {  	assert_return(server, false);  	assert_task_alive_or(DBG_SRV, &server->task, return false);  	switch (server->stop_method) { -  	case SERVER_STOP_METHOD_EXEC:  		verbose("Stopping server %s via external cmd", server->name);  		return server_exec(server, server->stop_exec);  	case SERVER_STOP_METHOD_SYSTEMD: -		verbose("Stopping server %s via systemd (%s)", -			server->name, server->systemd_service); +		verbose("Stopping server %s via systemd (%s)", server->name, +			server->systemd_service);  		if (systemd_service_stop(server)) {  			server->state = SERVER_STATE_STOPPED;  			return true; @@ -340,22 +328,19 @@ server_stop(struct server *server)  	return false;  } -static void -server_idle_free(struct uring_task *task) +static void server_idle_free(struct uring_task *task)  {  	assert_return(task);  	debug(DBG_ANN, "called");  } -void -server_set_active_players(struct server *server, int count) +void server_set_active_players(struct server *server, int count)  {  	assert_return(server);  	assert_task_alive(DBG_IDLE, &server->idle_task); -	debug(DBG_IDLE, "%s: currently %i active players", -	      server->name, count); +	debug(DBG_IDLE, "%s: currently %i active players", server->name, count);  	if (count < 0)  		return; @@ -368,12 +353,11 @@ server_set_active_players(struct server *server, int count)  	if (server->idle_count > server->idle_timeout) {  		verbose("stopping idle server %s", server->name); -		server_stop(server);  +		server_stop(server);  	}  } -static void -server_idle_connected_cb(struct connection *conn, bool connected) +static void server_idle_connected_cb(struct connection *conn, bool connected)  {  	struct server *server = container_of(conn, struct server, idle_conn); @@ -393,8 +377,7 @@ server_idle_connected_cb(struct connection *conn, bool connected)  	idle_check_get_player_count(server, conn);  } -bool -server_idle_check(struct server *server) +bool server_idle_check(struct server *server)  {  	assert_return(server, false); @@ -413,21 +396,19 @@ server_idle_check(struct server *server)  		return true;  	} -	connect_any(&server->idle_task, &server->remotes, -		    &server->idle_conn, server_idle_connected_cb); +	connect_any(&server->idle_task, &server->remotes, &server->idle_conn, +		    server_idle_connected_cb);  	return true;  } -static void -server_announce_free(struct uring_task *task) +static void server_announce_free(struct uring_task *task)  {  	assert_return(task);  	debug(DBG_ANN, "called");  } -static void -server_announce_cb(struct uring_task *task, int res) +static void server_announce_cb(struct uring_task *task, int res)  {  	struct server *server = container_of(task, struct server, ann_task); @@ -443,8 +424,7 @@ server_announce_cb(struct uring_task *task, int res)  	uring_task_set_fd(&server->ann_task, -1);  } -bool -server_announce(struct server *server, int fd) +bool server_announce(struct server *server, int fd)  {  	assert_return(server && fd >= 0, false); @@ -458,8 +438,7 @@ server_announce(struct server *server, int fd)  	return true;  } -bool -server_commit(struct server *server) +bool server_commit(struct server *server)  {  	struct server_local *local;  	uint16_t port; @@ -486,14 +465,14 @@ server_commit(struct server *server)  	if (server->stop_method == SERVER_STOP_METHOD_RCON &&  	    list_empty(&server->rcons)) {  		error("%s: rcon stop method missing rcon address", -		      server->name);  +		      server->name);  		return false;  	}  	if (server->stop_method == SERVER_STOP_METHOD_RCON &&  	    !server->rcon_password) {  		error("%s: rcon stop method missing rcon password", -		      server->name);  +		      server->name);  		return false;  	} @@ -501,12 +480,13 @@ server_commit(struct server *server)  	     server->stop_method == SERVER_STOP_METHOD_SYSTEMD) &&  	    !server->systemd_service) {  		error("%s: systemd start/stop method missing systemd service", -		      server->name);  +		      server->name);  		return false;  	}  	if (server->systemd_service && !server->systemd_obj) { -		server->systemd_obj = systemd_object_path(server->systemd_service); +		server->systemd_obj = +			systemd_object_path(server->systemd_service);  		if (!server->systemd_obj) {  			error("%s: failed to create systemd object path (%s)",  			      server->name, server->systemd_service); @@ -516,29 +496,33 @@ server_commit(struct server *server)  	if (server->idle_timeout > 0 &&  	    server->stop_method == SERVER_STOP_METHOD_UNDEFINED) { -		error("%s: idle_timeout set but missing stop method", server->name);  +		error("%s: idle_timeout set but missing stop method", +		      server->name);  		return false;  	}  	switch (server->type) {  	case SERVER_TYPE_ANNOUNCE:  		if (server->announce_port < 1) { -			error("%s: missing announce port", server->name);  +			error("%s: missing announce port", server->name);  			return false;  		}  		if (server->start_method != SERVER_START_METHOD_UNDEFINED) { -			error("%s: can't set start_method for announce server", server->name); +			error("%s: can't set start_method for announce server", +			      server->name);  			return false;  		}  		if (!list_empty(&server->locals)) { -			error("%s: can't set local addresses for announce server", server->name); +			error("%s: can't set local addresses for announce server", +			      server->name);  			return false;  		}  		if (!list_empty(&server->remotes)) { -			error("%s: can't set remote addresses for announce server", server->name); +			error("%s: can't set remote addresses for announce server", +			      server->name);  			return false;  		} @@ -546,17 +530,20 @@ server_commit(struct server *server)  	case SERVER_TYPE_PROXY:  		if (server->announce_port >= 1) { -			error("%s: can't set announce port for proxy server", server->name);  +			error("%s: can't set announce port for proxy server", +			      server->name);  			return false;  		}  		if (list_empty(&server->locals)) { -			error("%s: missing local addresses for proxy server", server->name); +			error("%s: missing local addresses for proxy server", +			      server->name);  			return false;  		}  		if (list_empty(&server->remotes)) { -			error("%s: missing remote addresses for proxy server", server->name); +			error("%s: missing remote addresses for proxy server", +			      server->name);  			return false;  		} @@ -578,7 +565,8 @@ server_commit(struct server *server)  		}  		if (server->announce_port < 1) { -			error("%s: can't determine which port to announce", server->name); +			error("%s: can't determine which port to announce", +			      server->name);  			return false;  		} @@ -591,30 +579,34 @@ server_commit(struct server *server)  	if (!server->pretty_name) {  		char *suffix; -		 +  		suffix = strrchr(server->name, '.');  		if (!suffix || suffix == server->name) {  			error("invalid server name: %s", server->name);  			return false;  		} -		server->pretty_name = xstrndup(server->name, suffix - server->name); +		server->pretty_name = +			xstrndup(server->name, suffix - server->name);  		if (!server->pretty_name) { -			error("failed to create display name: %s", server->name); +			error("failed to create display name: %s", +			      server->name);  			return false;  		}  	}  	r = snprintf(server->ann_buf.buf, sizeof(server->ann_buf.buf), -		     "[MOTD]%s[/MOTD][AD]%" PRIu16 "[/AD]", -		     server->pretty_name, server->announce_port); +		     "[MOTD]%s[/MOTD][AD]%" PRIu16 "[/AD]", server->pretty_name, +		     server->announce_port);  	if (r < 1 || r >= sizeof(server->ann_buf.buf)) { -		error("%s: unable to create announce msg: %i\n", server->name, r); +		error("%s: unable to create announce msg: %i\n", server->name, +		      r);  		return false;  	}  	server->ann_buf.len = r; -	/* FIXME: config, dont reread config if server running, make sure fd is available before this is called */ +	/* FIXME: config, dont reread config if server running, make sure fd is +	 * available before this is called */  	server_dump(server);  	list_for_each_entry(local, &server->locals, list) @@ -628,8 +620,7 @@ server_commit(struct server *server)  	return true;  } -bool -server_add_remote(struct server *server, struct saddr *remote) +bool server_add_remote(struct server *server, struct saddr *remote)  {  	assert_return(server && remote, false);  	assert_task_alive_or(DBG_SRV, &server->task, return false); @@ -639,8 +630,7 @@ server_add_remote(struct server *server, struct saddr *remote)  	return true;  } -bool -server_add_local(struct server *server, struct saddr *saddr) +bool server_add_local(struct server *server, struct saddr *saddr)  {  	struct server_local *local; @@ -655,8 +645,7 @@ server_add_local(struct server *server, struct saddr *saddr)  	return true;  } -bool -server_add_rcon(struct server *server, struct saddr *rcon) +bool server_add_rcon(struct server *server, struct saddr *rcon)  {  	assert_return(server && rcon, false);  	assert_task_alive_or(DBG_SRV, &server->task, return false); @@ -666,21 +655,20 @@ server_add_rcon(struct server *server, struct saddr *rcon)  	return true;  } -bool -server_set_rcon_password(struct server *server, const char *password) +bool server_set_rcon_password(struct server *server, const char *password)  {  	assert_return(server && !empty_str(password), false);  	return set_property(server, &server->rcon_password, password);  } -bool -server_set_systemd_service(struct server *server, const char *service) +bool server_set_systemd_service(struct server *server, const char *service)  {  	const char *suffix;  	char *tmp; -	assert_return(server && !empty_str(service) && !server->systemd_service, false); +	assert_return(server && !empty_str(service) && !server->systemd_service, +		      false);  	suffix = strrchr(service, '.');  	if (!suffix || !streq(suffix, ".service")) { @@ -699,55 +687,52 @@ server_set_systemd_service(struct server *server, const char *service)  	return true;  } -bool -server_set_stop_method(struct server *server, -		       enum server_stop_method stop_method) +bool server_set_stop_method(struct server *server, +			    enum server_stop_method stop_method)  {  	assert_return(server->stop_method == SERVER_STOP_METHOD_UNDEFINED && -		      stop_method != SERVER_STOP_METHOD_UNDEFINED, false); +			      stop_method != SERVER_STOP_METHOD_UNDEFINED, +		      false);  	server->stop_method = stop_method;  	return true;  } -bool -server_set_start_method(struct server *server, -			enum server_start_method start_method) +bool server_set_start_method(struct server *server, +			     enum server_start_method start_method)  {  	assert_return(server->start_method == SERVER_START_METHOD_UNDEFINED && -		      start_method != SERVER_START_METHOD_UNDEFINED, false); +			      start_method != SERVER_START_METHOD_UNDEFINED, +		      false);  	server->start_method = start_method;  	return true;  } -bool -server_set_stop_exec(struct server *server, const char *cmd) +bool server_set_stop_exec(struct server *server, const char *cmd)  {  	assert_return(server && !empty_str(cmd), false);  	return set_property(server, &server->stop_exec, cmd);  } -bool -server_set_start_exec(struct server *server, const char *cmd) +bool server_set_start_exec(struct server *server, const char *cmd)  {  	assert_return(server && !empty_str(cmd), false);  	return set_property(server, &server->start_exec, cmd);  } -bool -server_set_idle_timeout(struct server *server, uint16_t timeout) +bool server_set_idle_timeout(struct server *server, uint16_t timeout)  { -	assert_return(server && timeout > 0 && server->idle_timeout == 0, false); +	assert_return(server && timeout > 0 && server->idle_timeout == 0, +		      false);  	server->idle_timeout = timeout;  	return true;  } -bool -server_set_port(struct server *server, uint16_t port) +bool server_set_port(struct server *server, uint16_t port)  {  	assert_return(server && port > 0 && server->announce_port == 0, false); @@ -755,8 +740,7 @@ server_set_port(struct server *server, uint16_t port)  	return true;  } -bool -server_set_type(struct server *server, enum server_type type) +bool server_set_type(struct server *server, enum server_type type)  {  	assert_return(server && type != SERVER_TYPE_UNDEFINED, false); @@ -774,16 +758,14 @@ server_set_type(struct server *server, enum server_type type)  	return true;  } -bool -server_set_pretty_name(struct server *server, const char *pretty_name) +bool server_set_pretty_name(struct server *server, const char *pretty_name)  {  	assert_return(server && !empty_str(pretty_name), false);  	return set_property(server, &server->pretty_name, pretty_name);  } -struct server * -server_new(const char *name) +struct server *server_new(const char *name)  {  	struct server *server; @@ -810,16 +792,21 @@ server_new(const char *name)  	server->start_method = SERVER_START_METHOD_UNDEFINED;  	server->idle_timeout = 0; -	uring_task_init(&server->task, server->name, uring_parent(), server_free); +	uring_task_init(&server->task, server->name, uring_parent(), +			server_free);  	uring_task_set_buf(&server->task, &server->tbuf); -	uring_task_init(&server->ann_task, "announce", &server->task, server_announce_free); +	uring_task_init(&server->ann_task, "announce", &server->task, +			server_announce_free);  	uring_task_set_buf(&server->ann_task, &server->ann_buf); -	saddr_set_ipv4(&server->ann_task.saddr, cinet_addr(224,0,2,60), htons(4445)); +	saddr_set_ipv4(&server->ann_task.saddr, cinet_addr(224,0,2,60), +		       htons(4445)); -	uring_task_init(&server->exec_task, "exec", &server->task, server_exec_free); +	uring_task_init(&server->exec_task, "exec", &server->task, +			server_exec_free); -	uring_task_init(&server->idle_task, "idle", &server->task, server_idle_free); +	uring_task_init(&server->idle_task, "idle", &server->task, +			server_idle_free);  	uring_task_set_buf(&server->idle_task, &server->idle_buf);  	rcon_init(server); diff --git a/minecproxy/server.h b/minecproxy/server.h index ff4c28e..937fa67 100644 --- a/minecproxy/server.h +++ b/minecproxy/server.h @@ -1,6 +1,7 @@  #ifndef fooserverhfoo  #define fooserverhfoo +/* clang-format off */  enum server_state {  	SERVER_STATE_INIT	= 0,  	SERVER_STATE_CFG_OK	= 1, @@ -8,6 +9,7 @@ enum server_state {  	SERVER_STATE_STOPPED	= 3,  	SERVER_STATE_DEAD	= 4,  }; +/* clang-format on */  enum server_type {  	SERVER_TYPE_UNDEFINED, @@ -39,7 +41,7 @@ struct server {  	struct list_head rcons;  	struct list_head dnslookups;  	enum server_state state; -	 +  	enum server_stop_method stop_method;  	enum server_start_method start_method; @@ -125,4 +127,3 @@ bool server_set_pretty_name(struct server *server, const char *pretty_name);  struct server *server_new(const char *name);  #endif - diff --git a/minecproxy/signal-handler.c b/minecproxy/signal-handler.c index 15c3816..ba92382 100644 --- a/minecproxy/signal-handler.c +++ b/minecproxy/signal-handler.c @@ -21,16 +21,14 @@ struct signal_ev {  	int pipe[2];  }; -static void -signal_delete() +static void signal_delete()  {  	assert_return(cfg->signal);  	uring_task_destroy(&cfg->signal->task);  } -static void -signalfd_read(struct uring_task *task, int res) +static void signalfd_read(struct uring_task *task, int res)  {  	struct signal_ev *signal = container_of(task, struct signal_ev, task);  	struct server *server, *stmp; @@ -60,8 +58,8 @@ signalfd_read(struct uring_task *task, int res)  			goto out;  		} -		debug(DBG_DNS, "DNS lookup complete, dns: %p, dns->cb: %p", -		      dns, dns->cb); +		debug(DBG_DNS, "DNS lookup complete, dns: %p, dns->cb: %p", dns, +		      dns->cb);  		dns->cb(dns);  		break;  	} @@ -109,8 +107,8 @@ out:  	uring_tbuf_read(&signal->task, signalfd_read);  } -static void -hack_signal_handler(int signum, siginfo_t *si, _unused_ void *ucontext) +static void hack_signal_handler(int signum, siginfo_t *si, +				_unused_ void *ucontext)  {  	ssize_t r; @@ -119,11 +117,9 @@ hack_signal_handler(int signum, siginfo_t *si, _unused_ void *ucontext)  	r = write(cfg->signal->pipe[PIPE_WR], si, sizeof(*si));  	if (r != sizeof(*si))  		error("write: %zi\n", r); -  } -static void -signal_free(struct uring_task *task) +static void signal_free(struct uring_task *task)  {  	struct signal_ev *signal = container_of(task, struct signal_ev, task); @@ -135,18 +131,16 @@ signal_free(struct uring_task *task)  	xfree(signal);  } -void -signal_refdump() +void signal_refdump()  {  	assert_return(cfg->signal);  	uring_task_refdump(&cfg->signal->task);  } -void -signal_init() +void signal_init()  { -	//sigset_t mask; +	// sigset_t mask;  	struct signal_ev *signal;  	assert_return(!cfg->signal); @@ -183,12 +177,11 @@ signal_init()  	action.sa_flags = 0;  	sigaction(SIGPIPE, &action, NULL); -	debug(DBG_SIG, "using pipe fds %i -> %i", -	      signal->pipe[PIPE_WR], signal->pipe[PIPE_RD]); +	debug(DBG_SIG, "using pipe fds %i -> %i", signal->pipe[PIPE_WR], +	      signal->pipe[PIPE_RD]);  	uring_task_init(&signal->task, "signal", uring_parent(), signal_free);  	uring_task_set_fd(&signal->task, signal->pipe[PIPE_RD]);  	uring_task_set_buf(&signal->task, &signal->tbuf);  	cfg->signal = signal;  	uring_tbuf_read(&signal->task, signalfd_read);  } - diff --git a/minecproxy/systemd.c b/minecproxy/systemd.c index e9ed885..a973a55 100644 --- a/minecproxy/systemd.c +++ b/minecproxy/systemd.c @@ -6,12 +6,11 @@  #include "server.h"  #include "systemd.h" -#define SYSTEMD_DBUS_SERVICE		"org.freedesktop.systemd1" -#define SYSTEMD_DBUS_INTERFACE		"org.freedesktop.systemd1.Unit" -#define SYSTEMD_DBUS_PATH_PREFIX	"/org/freedesktop/systemd1/unit/" +#define SYSTEMD_DBUS_SERVICE	 "org.freedesktop.systemd1" +#define SYSTEMD_DBUS_INTERFACE	 "org.freedesktop.systemd1.Unit" +#define SYSTEMD_DBUS_PATH_PREFIX "/org/freedesktop/systemd1/unit/" -static inline char -tohex(uint8_t val) +static inline char tohex(uint8_t val)  {  	static const char hex[] = "0123456789abcdef"; @@ -29,8 +28,7 @@ tohex(uint8_t val)   *   * Example: minecraft@world1.service -> minecraft_40world1_2eservice   */ -char * -systemd_object_path(const char *service) +char *systemd_object_path(const char *service)  {  	char *r;  	char *d; @@ -46,8 +44,7 @@ systemd_object_path(const char *service)  	d = r + STRLEN(SYSTEMD_DBUS_PATH_PREFIX);  	for (s = service; *s; s++) { -		if ((*s >= 'a' && *s <= 'z') || -		    (*s >= 'A' && *s <= 'Z') || +		if ((*s >= 'a' && *s <= 'z') || (*s >= 'A' && *s <= 'Z') ||  		    (*s >= '0' && *s <= '9')) {  			*(d++) = *s;  			continue; @@ -62,17 +59,15 @@ systemd_object_path(const char *service)  	return r;  } -void -systemd_delete() +void systemd_delete()  { -       	assert_return_silent(cfg->sd_bus); +	assert_return_silent(cfg->sd_bus); -        sd_bus_unref(cfg->sd_bus); +	sd_bus_unref(cfg->sd_bus);  	cfg->sd_bus = NULL;  } -static sd_bus * -get_bus() +static sd_bus *get_bus()  {  	int r; @@ -82,7 +77,8 @@ get_bus()  	if (!cfg->sd_bus) {  		r = sd_bus_open_user(&cfg->sd_bus);  		if (r < 0) { -			error("failed to connect to user system bus: %s", strerror(-r)); +			error("failed to connect to user system bus: %s", +			      strerror(-r));  			cfg->sd_bus_failed = true;  			return NULL;  		} @@ -94,37 +90,36 @@ get_bus()  /*   * Check if a systemd service is running.   * - * This is equivalent to (assuming service minecraft@world1): - *   gdbus call --session  - *	--dest org.freedesktop.systemd1  - *	--object-path /org/freedesktop/systemd1/unit/minecraft_40world1_2eservice + * This is equivalent to (assuming service mc@world1): + *   gdbus call --session + *	--dest org.freedesktop.systemd1 + *	--object-path /org/freedesktop/systemd1/unit/mc_40world1_2eservice   *	--method org.freedesktop.DBus.Properties.Get - *		"org.freedesktop.systemd1.Unit"  + *		"org.freedesktop.systemd1.Unit"   *		"ActiveState"   */ -bool -systemd_service_running(struct server *server) +bool systemd_service_running(struct server *server)  {  	sd_bus *bus = get_bus(); -        sd_bus_error error = SD_BUS_ERROR_NULL; +	sd_bus_error error = SD_BUS_ERROR_NULL;  	char *status = NULL;  	bool running = false;  	int r; -	assert_return(server && bus && server->systemd_service && server->systemd_obj, false); +	assert_return(server && bus && server->systemd_service && +			      server->systemd_obj, +		      false); -	r = sd_bus_get_property_string(bus, -				       SYSTEMD_DBUS_SERVICE, +	r = sd_bus_get_property_string(bus, SYSTEMD_DBUS_SERVICE,  				       server->systemd_obj, -				       SYSTEMD_DBUS_INTERFACE, -				       "ActiveState", -				       &error, -				       &status); -        if (r < 0) { -                error("failed to get status for service %s (%s): %s", -		      server->systemd_service, server->systemd_obj, error.message); +				       SYSTEMD_DBUS_INTERFACE, "ActiveState", +				       &error, &status); +	if (r < 0) { +		error("failed to get status for service %s (%s): %s", +		      server->systemd_service, server->systemd_obj, +		      error.message);  		goto out; -        } +	}  	if (streq(status, "active")) {  		running = true; @@ -136,64 +131,58 @@ systemd_service_running(struct server *server)  out:  	free(status); -        sd_bus_error_free(&error); +	sd_bus_error_free(&error);  	return running;  } -static bool -systemd_service_action(struct server *server, const char *action) +static bool systemd_service_action(struct server *server, const char *action)  { -        sd_bus_error error = SD_BUS_ERROR_NULL; -        sd_bus_message *m = NULL; +	sd_bus_error error = SD_BUS_ERROR_NULL; +	sd_bus_message *m = NULL;  	sd_bus *bus = get_bus();  	const char *path;  	bool performed = false;  	int r; -	assert_return(server && bus && server->systemd_service && server->systemd_obj && action, false); +	assert_return(server && bus && server->systemd_service && +			      server->systemd_obj && action, +		      false); -        r = sd_bus_call_method(bus, -			       SYSTEMD_DBUS_SERVICE, -			       server->systemd_obj, -			       SYSTEMD_DBUS_INTERFACE, -			       action, -			       &error, -			       &m, -			       "s", +	r = sd_bus_call_method(bus, SYSTEMD_DBUS_SERVICE, server->systemd_obj, +			       SYSTEMD_DBUS_INTERFACE, action, &error, &m, "s",  			       "fail"); -        if (r < 0) { -                error("failed to perform action %s on systemd service %s: %s", +	if (r < 0) { +		error("failed to perform action %s on systemd service %s: %s",  		      action, server->systemd_service, error.message);  		goto out; -        } +	} -        r = sd_bus_message_read(m, "o", &path); -        if (r < 0) { -                error("failed to parse response message: %s", strerror(-r)); +	r = sd_bus_message_read(m, "o", &path); +	if (r < 0) { +		error("failed to parse response message: %s", strerror(-r));  		goto out; -        } +	} -        verbose("action %s queued for service %s", -		action, server->systemd_service); +	verbose("action %s queued for service %s", action, +		server->systemd_service);  	performed = true;  out: -        sd_bus_error_free(&error); -        sd_bus_message_unref(m); +	sd_bus_error_free(&error); +	sd_bus_message_unref(m);  	return performed;  }  /*   * Stop systemd service.   * - * This is equivalent to (assuming service minecraft@world1): - *   gdbus call --session  - *	--dest org.freedesktop.systemd1  - *	--object-path /org/freedesktop/systemd1/unit/minecraft_40world1_2eservice + * This is equivalent to (assuming service mc@world1): + *   gdbus call --session + *	--dest org.freedesktop.systemd1 + *	--object-path /org/freedesktop/systemd1/unit/mc_40world1_2eservice   *	--method org.freedesktop.systemd1.Unit.Stop "fail"   */ -bool -systemd_service_stop(struct server *server) +bool systemd_service_stop(struct server *server)  {  	assert_return(server, false); @@ -203,17 +192,15 @@ systemd_service_stop(struct server *server)  /*   * Start systemd service.   * - * This is equivalent to (assuming service minecraft@world1): - *   gdbus call --session  - *	--dest org.freedesktop.systemd1  - *	--object-path /org/freedesktop/systemd1/unit/minecraft_40world1_2eservice + * This is equivalent to (assuming service mc@world1): + *   gdbus call --session + *	--dest org.freedesktop.systemd1 + *	--object-path /org/freedesktop/systemd1/unit/mc_40world1_2eservice   *	--method org.freedesktop.systemd1.Unit.Start "fail"   */ -bool -systemd_service_start(struct server *server) +bool systemd_service_start(struct server *server)  {  	assert_return(server, false);  	return systemd_service_action(server, "Start");  } - diff --git a/minecproxy/uring.c b/minecproxy/uring.c index abea592..dd0d28a 100644 --- a/minecproxy/uring.c +++ b/minecproxy/uring.c @@ -19,23 +19,24 @@ struct uring_ev {  	int tfd;  }; +/* clang-format off */  enum cqe_type {  	CQE_TYPE_NORMAL		= 0x0,  	CQE_TYPE_CANCEL		= 0x1,  	CQE_TYPE_CLOSE		= 0x2,  	CQE_TYPE_POLL_CANCEL	= 0x3  }; +/* clang-format on */  #define CQE_TYPE_PTR_MASK 0x3  uint64_t sqe_count = 0;  uint64_t cqe_count = 0; -static struct io_uring_sqe * -get_sqe(struct uring_task *task) +static struct io_uring_sqe *get_sqe(struct uring_task *task)  {  	struct io_uring_sqe *sqe; -	 +  	assert_die(task, "invalid arguments");  	sqe = io_uring_get_sqe(&cfg->uring->uring); @@ -51,8 +52,7 @@ get_sqe(struct uring_task *task)  	return sqe;  } -void -uring_task_refdump(struct uring_task *task) +void uring_task_refdump(struct uring_task *task)  {  	char buf[4096];  	struct uring_task *tmp; @@ -83,45 +83,43 @@ uring_task_refdump(struct uring_task *task)  		memcpy(dst, tmp->name, strlen(tmp->name));  	} -	info("%s (0x%p parent 0x%p free 0x%p fd %i ref %u)", -	     buf, task, task->parent, task->free, task->fd, -	     task->refcount); +	info("%s (0x%p parent 0x%p free 0x%p fd %i ref %u)", buf, task, +	     task->parent, task->free, task->fd, task->refcount);  }  /*   * Similar to uring_task_put, but can be called from other tasks   * while the task is active.   */ -void -uring_task_destroy(struct uring_task *task) +void uring_task_destroy(struct uring_task *task)  {  	assert_return(task);  	assert_return_silent(!task->dead); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	if (task->fd >= 0) {  		struct io_uring_sqe *sqe; -	 +  		sqe = get_sqe(task);  		io_uring_prep_cancel(sqe, task, 0); -		io_uring_sqe_set_data(sqe, (void *)((uintptr_t)task | CQE_TYPE_CANCEL)); +		io_uring_sqe_set_data(sqe, (void *)((uintptr_t)task | +						    CQE_TYPE_CANCEL));  	}  	task->dead = true;  	uring_task_put(task);  } -void -uring_task_put(struct uring_task *task) +void uring_task_put(struct uring_task *task)  {  	struct uring_task *parent;  	assert_return(task); -	debug(DBG_REF, "task %s (%p), refcount %u -> %u", -	      task->name, task, task->refcount, task->refcount - 1); +	debug(DBG_REF, "task %s (%p), refcount %u -> %u", task->name, task, +	      task->refcount, task->refcount - 1);  	task->refcount--; @@ -147,13 +145,12 @@ uring_task_put(struct uring_task *task)  	}  } -void -uring_task_get(struct uring_task *task) +void uring_task_get(struct uring_task *task)  {  	assert_return(task); -	debug(DBG_REF, "task %s (%p), refcount %u -> %u", -	      task->name, task, task->refcount, task->refcount + 1); +	debug(DBG_REF, "task %s (%p), refcount %u -> %u", task->name, task, +	      task->refcount, task->refcount + 1);  	if (task->refcount < 0)  		error("Negative refcount!"); @@ -161,17 +158,16 @@ uring_task_get(struct uring_task *task)  	task->refcount++;  } -void -uring_task_set_buf(struct uring_task *task, struct uring_task_buf *tbuf) +void uring_task_set_buf(struct uring_task *task, struct uring_task_buf *tbuf)  {  	assert_return(task && tbuf); -	debug(DBG_UR, "task %s (%p), buf %p, refcount %u", -	      task->name, task, tbuf, task->refcount); +	debug(DBG_UR, "task %s (%p), buf %p, refcount %u", task->name, task, +	      tbuf, task->refcount);  	/* iov_len and msg_namelen are set at send/receive time */  	tbuf->iov.iov_base = tbuf->buf; -	tbuf->msg.msg_name = &task->saddr.storage; +	tbuf->msg.msg_name = &task->saddr.st;  	tbuf->msg.msg_iov = &tbuf->iov;  	tbuf->msg.msg_iovlen = 1;  	tbuf->msg.msg_control = NULL; @@ -180,24 +176,22 @@ uring_task_set_buf(struct uring_task *task, struct uring_task_buf *tbuf)  	task->tbuf = tbuf;  } -void -uring_task_set_fd(struct uring_task *task, int fd) +void uring_task_set_fd(struct uring_task *task, int fd)  {  	assert_return(task); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, fd, +	      task->refcount);  	task->fd = fd;  } -void -uring_task_close_fd(struct uring_task *task) +void uring_task_close_fd(struct uring_task *task)  {  	assert_return(task); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	if (task->fd < 0)  		return; @@ -206,17 +200,16 @@ uring_task_close_fd(struct uring_task *task)  	task->fd = -1;  } -struct uring_task * -uring_parent() +struct uring_task *uring_parent()  {  	assert_die(cfg->uring, "invalid arguments");  	return &cfg->uring->task;  } -void -uring_task_init(struct uring_task *task, const char *name, -		struct uring_task *parent, void (*free)(struct uring_task *)) +void uring_task_init(struct uring_task *task, const char *name, +		     struct uring_task *parent, +		     void (*free)(struct uring_task *))  {  	static bool first = true; @@ -236,38 +229,37 @@ uring_task_init(struct uring_task *task, const char *name,  	task->tbuf = NULL;  	if (task->parent) { -		debug(DBG_REF, "task %s (%p), refcount %u, " +		debug(DBG_REF, +		      "task %s (%p), refcount %u, "  		      "getting parent %s (%p), refcount %u", -		      task->name, task, task->refcount, -		      task->parent->name, task->parent, task->parent->refcount); +		      task->name, task, task->refcount, task->parent->name, +		      task->parent, task->parent->refcount);  		uring_task_get(task->parent);  	}  } -void -uring_close(struct uring_task *task, int fd) +void uring_close(struct uring_task *task, int fd)  {  	struct io_uring_sqe *sqe;  	assert_return(task && fd >= 0); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount); -       	sqe = get_sqe(task); +	sqe = get_sqe(task);  	io_uring_prep_close(sqe, fd);  	io_uring_sqe_set_data(sqe, (void *)((uintptr_t)task | CQE_TYPE_CLOSE));  } -static void -uring_tbuf_write_cb(struct uring_task *task, int res) +static void uring_tbuf_write_cb(struct uring_task *task, int res)  {  	int r;  	assert_return(task && task->tbuf && task->final_cb); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	if (res < 0) {  		r = res; @@ -282,52 +274,51 @@ uring_tbuf_write_cb(struct uring_task *task, int res)  	}  	uring_write(task, task->tbuf->buf + task->tbuf->done, -		    task->tbuf->len - task->tbuf->done, -		    uring_tbuf_write_cb); +		    task->tbuf->len - task->tbuf->done, uring_tbuf_write_cb);  	return;  finished:  	task->final_cb(task, r);  } -void -uring_tbuf_write(struct uring_task *task, utask_cb_t final_cb) +void uring_tbuf_write(struct uring_task *task, utask_cb_t final_cb)  { -	assert_return(task && task->fd >= 0 && task->tbuf && task->tbuf->len > 0); +	assert_return(task && task->fd >= 0 && task->tbuf && +		      task->tbuf->len > 0); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	task->tbuf->done = 0;  	task->final_cb = final_cb; -	uring_write(task, &task->tbuf->buf, task->tbuf->len, uring_tbuf_write_cb); +	uring_write(task, &task->tbuf->buf, task->tbuf->len, +		    uring_tbuf_write_cb);  } -void -uring_write(struct uring_task *task, void *buf, size_t len, utask_cb_t cb) +void uring_write(struct uring_task *task, void *buf, size_t len, utask_cb_t cb)  {  	struct io_uring_sqe *sqe;  	assert_return(task && buf && len > 0 && cb && task->fd >= 0); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount); -       	sqe = get_sqe(task); +	sqe = get_sqe(task);  	task->cb = cb;  	io_uring_prep_write(sqe, task->fd, buf, len, 0);  	io_uring_sqe_set_data(sqe, task);  } -static void -uring_tbuf_read_until_cb(struct uring_task *task, int res) +static void uring_tbuf_read_until_cb(struct uring_task *task, int res)  {  	int r; -	assert_return(task && task->tbuf && task->final_cb && task->is_complete_cb); +	assert_return(task && task->tbuf && task->final_cb && +		      task->is_complete_cb); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	if (res < 0) {  		r = res; @@ -359,14 +350,14 @@ finished:  	task->final_cb(task, r);  } -void -uring_tbuf_read_until(struct uring_task *task, -		      rutask_cb_t is_complete_cb, utask_cb_t final_cb) +void uring_tbuf_read_until(struct uring_task *task, rutask_cb_t is_complete_cb, +			   utask_cb_t final_cb)  { -	assert_return(task && task->fd >= 0 && task->tbuf && is_complete_cb && final_cb); +	assert_return(task && task->fd >= 0 && task->tbuf && is_complete_cb && +		      final_cb); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	task->tbuf->len = 0;  	task->is_complete_cb = is_complete_cb; @@ -375,8 +366,7 @@ uring_tbuf_read_until(struct uring_task *task,  		   uring_tbuf_read_until_cb);  } -static int -uring_tbuf_eof(struct uring_task *task, int res) +static int uring_tbuf_eof(struct uring_task *task, int res)  {  	assert_return(task && task->tbuf, -EINVAL);  	assert_task_alive_or(DBG_UR, task, return -EINTR); @@ -392,17 +382,14 @@ uring_tbuf_eof(struct uring_task *task, int res)  	return 1;  } -void -uring_tbuf_read_until_eof(struct uring_task *task, -			  utask_cb_t final_cb) +void uring_tbuf_read_until_eof(struct uring_task *task, utask_cb_t final_cb)  {  	assert_return(task && task->tbuf && final_cb);  	uring_tbuf_read_until(task, uring_tbuf_eof, final_cb);  } -static int -uring_tbuf_have_data(struct uring_task *task, int res) +static int uring_tbuf_have_data(struct uring_task *task, int res)  {  	assert_return(task, -EINVAL); @@ -412,23 +399,22 @@ uring_tbuf_have_data(struct uring_task *task, int res)  		return 1;  } -void -uring_tbuf_read(struct uring_task *task, utask_cb_t final_cb) +void uring_tbuf_read(struct uring_task *task, utask_cb_t final_cb)  {  	assert_return(task && final_cb);  	uring_tbuf_read_until(task, uring_tbuf_have_data, final_cb);  } -void -uring_read_offset(struct uring_task *task, void *buf, size_t len, off_t offset, utask_cb_t cb) +void uring_read_offset(struct uring_task *task, void *buf, size_t len, +		       off_t offset, utask_cb_t cb)  {  	struct io_uring_sqe *sqe;  	assert_return(task && buf && len > 0 && task->fd >= 0); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	sqe = get_sqe(task);  	task->cb = cb; @@ -436,15 +422,14 @@ uring_read_offset(struct uring_task *task, void *buf, size_t len, off_t offset,  	io_uring_sqe_set_data(sqe, task);  } -void -uring_openat(struct uring_task *task, const char *path, utask_cb_t cb) +void uring_openat(struct uring_task *task, const char *path, utask_cb_t cb)  {  	struct io_uring_sqe *sqe; -        +  	assert_return(task && !empty_str(path) && cb); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	sqe = get_sqe(task);  	task->cb = cb; @@ -452,15 +437,14 @@ uring_openat(struct uring_task *task, const char *path, utask_cb_t cb)  	io_uring_sqe_set_data(sqe, task);  } -void -uring_tbuf_recvmsg(struct uring_task *task, utask_cb_t cb) +void uring_tbuf_recvmsg(struct uring_task *task, utask_cb_t cb)  {  	struct io_uring_sqe *sqe;  	assert_return(task && task->fd >= 0 && task->tbuf && cb); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	sqe = get_sqe(task);  	task->tbuf->done = 0; @@ -472,15 +456,14 @@ uring_tbuf_recvmsg(struct uring_task *task, utask_cb_t cb)  	io_uring_sqe_set_data(sqe, task);  } -void -uring_tbuf_sendmsg(struct uring_task *task, utask_cb_t cb) +void uring_tbuf_sendmsg(struct uring_task *task, utask_cb_t cb)  {  	struct io_uring_sqe *sqe;  	assert_return(task && task->fd >= 0 && task->tbuf && cb); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	sqe = get_sqe(task);  	task->tbuf->done = 0; @@ -491,44 +474,43 @@ uring_tbuf_sendmsg(struct uring_task *task, utask_cb_t cb)  	io_uring_sqe_set_data(sqe, task);  } -void -uring_connect(struct uring_task *task, struct saddr *saddr, utask_cb_t cb) +void uring_connect(struct uring_task *task, struct saddr *saddr, utask_cb_t cb)  {  	struct io_uring_sqe *sqe;  	assert_return(task && task->fd >= 0 && saddr && cb); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	sqe = get_sqe(task);  	task->cb = cb; -	io_uring_prep_connect(sqe, task->fd, (struct sockaddr *)&saddr->storage, saddr->addrlen); +	io_uring_prep_connect(sqe, task->fd, (struct sockaddr *)&saddr->st, +			      saddr->addrlen);  	io_uring_sqe_set_data(sqe, task);  } -void -uring_accept(struct uring_task *task, struct saddr *saddr, utask_cb_t cb) +void uring_accept(struct uring_task *task, struct saddr *saddr, utask_cb_t cb)  {  	struct io_uring_sqe *sqe;  	assert_return(task && task->fd >= 0 && saddr && cb); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	sqe = get_sqe(task); -	saddr->addrlen = sizeof(saddr->storage); +	saddr->addrlen = sizeof(saddr->st);  	task->cb = cb; -	io_uring_prep_accept(sqe, task->fd, (struct sockaddr *)&saddr->storage, &saddr->addrlen, SOCK_CLOEXEC); +	io_uring_prep_accept(sqe, task->fd, (struct sockaddr *)&saddr->st, +			     &saddr->addrlen, SOCK_CLOEXEC);  	io_uring_sqe_set_data(sqe, task);  } -void -uring_splice(struct uring_task *task, int fd_in, int fd_out, utask_cb_t cb) +void uring_splice(struct uring_task *task, int fd_in, int fd_out, utask_cb_t cb)  {  	struct io_uring_sqe *sqe; -	 +  	assert_return(task && fd_in >= 0 && fd_out >= 0 && cb);  	debug(DBG_UR, "task %s (%p), fd_in %i, fd_out %i, refcount %u", @@ -540,15 +522,14 @@ uring_splice(struct uring_task *task, int fd_in, int fd_out, utask_cb_t cb)  	io_uring_sqe_set_data(sqe, task);  } -void -uring_poll(struct uring_task *task, short poll_mask, utask_cb_t cb) +void uring_poll(struct uring_task *task, short poll_mask, utask_cb_t cb)  {  	struct io_uring_sqe *sqe; -	 +  	assert_return(task && task->fd >= 0 && poll_mask && cb); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	sqe = get_sqe(task);  	task->cb = cb; @@ -556,11 +537,10 @@ uring_poll(struct uring_task *task, short poll_mask, utask_cb_t cb)  	io_uring_sqe_set_data(sqe, task);  } -void -uring_poll_cancel(struct uring_task *task) +void uring_poll_cancel(struct uring_task *task)  {  	struct io_uring_sqe *sqe; -	 +  	assert_return(task);  	if (task->fd < 0) { @@ -568,54 +548,51 @@ uring_poll_cancel(struct uring_task *task)  		return;  	} -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	sqe = get_sqe(task);  	task->dead = true;  	io_uring_prep_poll_remove(sqe, task); -	io_uring_sqe_set_data(sqe, (void *)((uintptr_t)task | CQE_TYPE_POLL_CANCEL)); +	io_uring_sqe_set_data(sqe, +			      (void *)((uintptr_t)task | CQE_TYPE_POLL_CANCEL));  } -static void -uring_free(struct uring_task *task) +static void uring_free(struct uring_task *task)  {  	struct uring_ev *uring = container_of(task, struct uring_ev, task);  	assert_return(task); -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	io_uring_queue_exit(&uring->uring);  	cfg->uring = NULL;  	xfree(uring);  } -void -uring_refdump() +void uring_refdump()  {  	assert_return(cfg->uring);  	uring_task_refdump(&cfg->uring->task);  } -void -uring_delete() +void uring_delete()  {  	struct uring_task *task;  	assert_return(cfg->uring);  	task = &cfg->uring->task; -	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", -	      task->name, task, task->fd, task->refcount); +	debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, +	      task->fd, task->refcount);  	uring_task_put(task);  } -static void -uring_splice_test_cb(struct uring_task *task, int res) +static void uring_splice_test_cb(struct uring_task *task, int res)  {  	struct uring_ev *uring = container_of(task, struct uring_ev, task); @@ -634,12 +611,11 @@ uring_splice_test_cb(struct uring_task *task, int res)  		debug(DBG_UR, "splice supported");  	} else if (res == -EINVAL)  		debug(DBG_UR, "splice not supported"); -	else  +	else  		error("splice check failed: %i\n", res);  } -void -uring_init() +void uring_init()  {  	struct uring_ev *uring; @@ -649,7 +625,8 @@ uring_init()  	if (!uring)  		die("malloc: %m"); -	if (io_uring_queue_init_params(4096, &uring->uring, &uring->uring_params) < 0) +	if (io_uring_queue_init_params(4096, &uring->uring, +				       &uring->uring_params) < 0)  		die("io_uring_queue_init_params");  	debug(DBG_UR, "uring initialized, features: 0x%08x", @@ -665,28 +642,23 @@ uring_init()  	uring->tfd = open("/dev/null", O_RDONLY | O_CLOEXEC | O_NOCTTY);  	if (uring->tfd < 0)  		die("open(\"/dev/null\"): %m"); -	uring_splice(&uring->task, uring->tfd, uring->pipe[PIPE_WR], uring_splice_test_cb); +	uring_splice(&uring->task, uring->tfd, uring->pipe[PIPE_WR], +		     uring_splice_test_cb);  } -static inline void -uring_print_cqe(const char *type, struct uring_task *task, -		struct io_uring_cqe *cqe) +static inline void uring_print_cqe(const char *type, struct uring_task *task, +				   struct io_uring_cqe *cqe)  {  	assert_return(!empty_str(type) && task && cqe); -	debug(DBG_UR, "got CQE " +	debug(DBG_UR, +	      "got CQE "  	      "(type: %s, res: %i (%s), task: %s (%p), fd: %i, cb: %p)", -	      type, -	      cqe->res, -	      cqe->res < 0 ? strerror(-cqe->res) : "ok", -	      task->name ? task->name : "<none>", -	      task, -	      task->fd, -	      task->cb); +	      type, cqe->res, cqe->res < 0 ? strerror(-cqe->res) : "ok", +	      task->name ? task->name : "<none>", task, task->fd, task->cb);  } -void -uring_event_loop() +void uring_event_loop()  {  	while (true) {  		struct io_uring_cqe *cqe; @@ -703,7 +675,8 @@ uring_event_loop()  		}  		nr = 0; -		io_uring_for_each_cqe(&cfg->uring->uring, head, cqe) { +		io_uring_for_each_cqe(&cfg->uring->uring, head, cqe) +		{  			struct uring_task *task = io_uring_cqe_get_data(cqe);  			bool do_cb;  			enum cqe_type cqe_type; @@ -755,4 +728,3 @@ uring_event_loop()  		io_uring_cq_advance(&cfg->uring->uring, nr);  	}  } - diff --git a/minecproxy/uring.h b/minecproxy/uring.h index 9c33104..c465904 100644 --- a/minecproxy/uring.h +++ b/minecproxy/uring.h @@ -30,18 +30,18 @@ void uring_tbuf_write(struct uring_task *task, utask_cb_t final_cb);  void uring_write(struct uring_task *task, void *buf, size_t len, utask_cb_t cb); -void uring_tbuf_read_until(struct uring_task *task, -			   rutask_cb_t is_complete_cb, utask_cb_t final_cb); +void uring_tbuf_read_until(struct uring_task *task, rutask_cb_t is_complete_cb, +			   utask_cb_t final_cb);  void uring_tbuf_read_until_eof(struct uring_task *task, utask_cb_t final_cb);  void uring_tbuf_read(struct uring_task *task, utask_cb_t final_cb); -void uring_read_offset(struct uring_task *task, void *buf, -		       size_t len, off_t offset, utask_cb_t cb); +void uring_read_offset(struct uring_task *task, void *buf, size_t len, +		       off_t offset, utask_cb_t cb); -static inline void -uring_read(struct uring_task *task, void *buf, size_t len, utask_cb_t cb) +static inline void uring_read(struct uring_task *task, void *buf, size_t len, +			      utask_cb_t cb)  {  	uring_read_offset(task, buf, len, 0, cb);  } @@ -56,7 +56,8 @@ void uring_connect(struct uring_task *task, struct saddr *saddr, utask_cb_t cb);  void uring_accept(struct uring_task *task, struct saddr *saddr, utask_cb_t cb); -void uring_splice(struct uring_task *task, int fd_in, int fd_out, utask_cb_t cb); +void uring_splice(struct uring_task *task, int fd_in, int fd_out, +		  utask_cb_t cb);  void uring_poll(struct uring_task *task, short poll_mask, utask_cb_t cb); diff --git a/shared/ansi-colors.h b/shared/ansi-colors.h index ba89c46..8294f2d 100644 --- a/shared/ansi-colors.h +++ b/shared/ansi-colors.h @@ -1,12 +1,12 @@  #ifndef fooansicolorshfoo  #define fooansicolorshfoo -#define ANSI_RED        "\x1B[0;31m" -#define ANSI_GREEN      "\x1B[0;32m" -#define ANSI_YELLOW     "\x1B[0;33m" -#define ANSI_BLUE       "\x1B[0;34m" -#define ANSI_MAGENTA    "\x1B[0;35m" -#define ANSI_GREY       "\x1B[0;38;5;245m" -#define ANSI_NORMAL     "\x1B[0m" +#define ANSI_RED     "\x1B[0;31m" +#define ANSI_GREEN   "\x1B[0;32m" +#define ANSI_YELLOW  "\x1B[0;33m" +#define ANSI_BLUE    "\x1B[0;34m" +#define ANSI_MAGENTA "\x1B[0;35m" +#define ANSI_GREY    "\x1B[0;38;5;245m" +#define ANSI_NORMAL  "\x1B[0m"  #endif diff --git a/shared/config-parser.c b/shared/config-parser.c index 386d5a2..13b26e1 100644 --- a/shared/config-parser.c +++ b/shared/config-parser.c @@ -13,8 +13,7 @@  #include "config-parser.h"  #include "config.h" -static void -eat_whitespace_and_comments(char **pos) +static void eat_whitespace_and_comments(char **pos)  {  	assert_return(pos && *pos); @@ -30,8 +29,7 @@ eat_whitespace_and_comments(char **pos)  	}  } -static char * -get_line(char **pos) +static char *get_line(char **pos)  {  	char *begin, *end; @@ -63,9 +61,8 @@ get_line(char **pos)  	return begin;  } -static bool -dnslookup(const char *name, uint16_t port, struct cfg_value *rvalue, -	  unsigned *naddrs, bool async) +static bool dnslookup(const char *name, uint16_t port, struct cfg_value *rvalue, +		      unsigned *naddrs, bool async)  {  	struct sockaddr_in *in4;  	struct sockaddr_in6 *in6; @@ -77,7 +74,9 @@ dnslookup(const char *name, uint16_t port, struct cfg_value *rvalue,  	bool rv = false;  	int r; -	assert_return(!empty_str(name) && strlen(name) < sizeof(dns->name) && port > 0 && rvalue, false); +	assert_return(!empty_str(name) && strlen(name) < sizeof(dns->name) && +			      port > 0 && rvalue, +		      false);  	if (async) {  		rvalue->type = CFG_VAL_TYPE_ASYNC_ADDRS; @@ -94,7 +93,7 @@ dnslookup(const char *name, uint16_t port, struct cfg_value *rvalue,  		debug(DBG_DNS, "doing sync DNS lookup of %s", name);  	} -	sprintf(dns->name, "%s", name);	 +	sprintf(dns->name, "%s", name);  	sprintf(dns->port, "%" PRIu16, port);  	dns->req.ai_family = AF_UNSPEC; @@ -114,7 +113,8 @@ dnslookup(const char *name, uint16_t port, struct cfg_value *rvalue,  	r = getaddrinfo_a(mode, gcbs, ARRAY_SIZE(gcbs), &dns->sev);  	if (r != 0) { -		error("getaddrinfo(%s:%" PRIu16 "): %s", name, port, gai_strerror(r)); +		error("getaddrinfo(%s:%" PRIu16 "): %s", name, port, +		      gai_strerror(r));  		goto out;  	} @@ -136,7 +136,8 @@ dnslookup(const char *name, uint16_t port, struct cfg_value *rvalue,  		switch (ai->ai_family) {  		case AF_INET:  			in4 = (struct sockaddr_in *)ai->ai_addr; -			saddr_set_ipv4(saddr, in4->sin_addr.s_addr, in4->sin_port); +			saddr_set_ipv4(saddr, in4->sin_addr.s_addr, +				       in4->sin_port);  			debug(DBG_CFG, "addrstr: %s", saddr->addrstr);  			list_add(&saddr->list, &rvalue->saddrs);  			(*naddrs)++; @@ -165,8 +166,7 @@ out:  	return rv;  } -bool -strtosockaddrs(const char *str, struct cfg_value *rvalue, bool async) +bool strtosockaddrs(const char *str, struct cfg_value *rvalue, bool async)  {  	struct saddr *saddr;  	uint16_t port; @@ -235,7 +235,8 @@ strtosockaddrs(const char *str, struct cfg_value *rvalue, bool async)  	} else if ((tmp = strchr(str, ':'))) {  		/* IPv4, a.b.c.d:p or IPv4/6 hostname:p */ -		debug(DBG_CFG, "attempting to parse IPv4 addr or hostname (%s)", str); +		debug(DBG_CFG, "attempting to parse IPv4 addr or hostname (%s)", +		      str);  		*tmp = '\0';  		tmp++; @@ -247,15 +248,18 @@ strtosockaddrs(const char *str, struct cfg_value *rvalue, bool async)  			goto error;  		if (inet_pton(AF_INET, str, &saddr->in4.sin_addr) > 0) { -			debug(DBG_CFG, "got an IPv4:port (%s:%" PRIu16 ")", str, port); -			saddr_set_ipv4(saddr, saddr->in4.sin_addr.s_addr, htons(port)); +			debug(DBG_CFG, "got an IPv4:port (%s:%" PRIu16 ")", str, +			      port); +			saddr_set_ipv4(saddr, saddr->in4.sin_addr.s_addr, +				       htons(port));  			list_add(&saddr->list, list);  			naddrs++;  			goto success; -		}  +		}  		xfree(saddr); -		debug(DBG_CFG, "maybe got a hostname:port (%s:%" PRIu16 ")", str, port); +		debug(DBG_CFG, "maybe got a hostname:port (%s:%" PRIu16 ")", +		      str, port);  		if (!dnslookup(str, port, rvalue, &naddrs, async))  			goto error; @@ -318,16 +322,16 @@ error:  }  /* Returns true if there's data left to parse in buf */ -bool -config_parse_line(const char *filename, char **buf, -		  struct cfg_key_value_map *kvmap, int *rkey, -		  const char **rkeyname, struct cfg_value *rvalue, -		  bool async_dns) +bool config_parse_line(const char *filename, char **buf, +		       struct cfg_key_value_map *kvmap, int *rkey, +		       const char **rkeyname, struct cfg_value *rvalue, +		       bool async_dns)  {  	char *line, *tmp, *key;  	int i; -	assert_return(buf && *buf && kvmap && rkey && rkeyname && rvalue, false); +	assert_return(buf && *buf && kvmap && rkey && rkeyname && rvalue, +		      false);  	line = get_line(buf);  	if (!line) @@ -370,7 +374,6 @@ config_parse_line(const char *filename, char **buf,  			continue;  		switch (kvmap[i].value_type) { -  		case CFG_VAL_TYPE_STRING:  			rvalue->type = CFG_VAL_TYPE_STRING;  			rvalue->str = tmp; @@ -425,7 +428,8 @@ config_parse_line(const char *filename, char **buf,  			if (strcaseeq(tmp, "yes") || strcaseeq(tmp, "true")) {  				rvalue->type = CFG_VAL_TYPE_BOOL;  				rvalue->boolean = true; -			} else if (strcaseeq(tmp, "no") || strcaseeq(tmp, "false")) { +			} else if (strcaseeq(tmp, "no") || +				   strcaseeq(tmp, "false")) {  				rvalue->type = CFG_VAL_TYPE_BOOL;  				rvalue->boolean = false;  			} else { @@ -454,7 +458,8 @@ config_parse_line(const char *filename, char **buf,  	}  error: -	/* FIXME: the line is already mangled here, a line number would be nice */ +	/* FIXME: the line is already mangled here, a line number would be nice +	 */  	error("%s: invalid config line: %s", filename, line);  	rvalue->type = CFG_VAL_TYPE_INVALID;  	*rkey = 0; @@ -462,8 +467,7 @@ error:  	return true;  } -bool -config_parse_header(const char *title, char **buf) +bool config_parse_header(const char *title, char **buf)  {  	char *line; @@ -481,8 +485,7 @@ config_parse_header(const char *title, char **buf)  	return false;  } -bool -is_valid_server_config_filename(struct dirent *dent, const char *filename) +bool is_valid_server_config_filename(struct dirent *dent, const char *filename)  {  	const char *suffix; @@ -512,4 +515,3 @@ is_valid_server_config_filename(struct dirent *dent, const char *filename)  	return true;  } - diff --git a/shared/config-parser.h b/shared/config-parser.h index 7c5703e..771ece1 100644 --- a/shared/config-parser.h +++ b/shared/config-parser.h @@ -18,7 +18,7 @@ enum cfg_value_type {  struct dns_async; -typedef void (dns_cb_t)(struct dns_async *); +typedef void(dns_cb_t)(struct dns_async *);  struct dns_async {  	char name[FQDN_STR_LEN + 1]; @@ -51,9 +51,9 @@ struct cfg_value {  bool strtosockaddrs(const char *str, struct cfg_value *rvalue, bool async);  bool config_parse_line(const char *filename, char **buf, -		       struct cfg_key_value_map *kvmap, -		       int *rkey, const char **rkeyname, -		       struct cfg_value *rvalue, bool async_dns); +		       struct cfg_key_value_map *kvmap, int *rkey, +		       const char **rkeyname, struct cfg_value *rvalue, +		       bool async_dns);  bool config_parse_header(const char *title, char **buf); diff --git a/shared/debug.h b/shared/debug.h index 6f1a054..2b1eba0 100644 --- a/shared/debug.h +++ b/shared/debug.h @@ -2,6 +2,7 @@  #define foodebughfoo  /* FIXME: Should these be shared? */ +/* clang-format off */  enum debug_lvl {  	DBG_ERROR	= (0x1 << 1),  	DBG_INFO	= (0x1 << 2), @@ -21,70 +22,70 @@ enum debug_lvl {  	DBG_DNS		= (0x1 << 16),  	DBG_TIMER	= (0x1 << 17),  }; +/* clang-format on */ -static inline bool -debug_enabled(enum debug_lvl lvl) +static inline bool debug_enabled(enum debug_lvl lvl)  {  	return !!(lvl & debug_mask);  } -#define __ifdebug(lvl, fmt, ...) 						\ -	do {									\ -		if (debug_enabled((lvl)))					\ -			__debug((lvl), fmt "\n"__VA_OPT__(,) __VA_ARGS__);	\ +#define __ifdebug(lvl, fmt, ...)                                               \ +	do {                                                                   \ +		if (debug_enabled((lvl)))                                      \ +			__debug((lvl), fmt "\n"__VA_OPT__(, )__VA_ARGS__);     \  	} while (0) -#define debug(lvl, fmt, ...)	__ifdebug((lvl), "%s:%s:%i: " fmt,		\ -					  __FILE__, __func__, __LINE__ 		\ -					  __VA_OPT__(,) __VA_ARGS__) -#define verbose(fmt, ...)	__ifdebug(DBG_VERBOSE, fmt, __VA_ARGS__) -#define info(fmt, ...)		__ifdebug(DBG_INFO, fmt,  __VA_ARGS__) -#define error(fmt, ...)		__ifdebug(DBG_ERROR, "%s:%s:%i: " fmt,		\ -					  __FILE__, __func__, __LINE__ 		\ -					  __VA_OPT__(,) __VA_ARGS__) +#define debug(lvl, fmt, ...)                                                   \ +	__ifdebug((lvl), "%s:%s:%i: " fmt, __FILE__, __func__,                 \ +		  __LINE__ __VA_OPT__(, ) __VA_ARGS__) +#define verbose(fmt, ...) __ifdebug(DBG_VERBOSE, fmt, __VA_ARGS__) +#define info(fmt, ...)	  __ifdebug(DBG_INFO, fmt, __VA_ARGS__) +#define error(fmt, ...)                                                        \ +	__ifdebug(DBG_ERROR, "%s:%s:%i: " fmt, __FILE__, __func__,             \ +		  __LINE__ __VA_OPT__(, ) __VA_ARGS__) -#define die(fmt, ...)								\ -	__die("%s:%s:%i: " fmt "\n",						\ -	      __FILE__, __func__, __LINE__					\ -	      __VA_OPT__(,) __VA_ARGS__) +#define die(fmt, ...)                                                          \ +	__die("%s:%s:%i: " fmt "\n", __FILE__, __func__,                       \ +	      __LINE__ __VA_OPT__(, ) __VA_ARGS__) -#define assert_log(expr, msg) 							\ -	((expr) ?								\ -	 (true) :								\ -	 (__debug(DBG_ERROR, "%s:%s:%i: assertion \"" msg "\" failed\n",	\ -		  __FILE__, __func__, __LINE__), false)) +#define assert_log(expr, msg)                                                  \ +	((expr) ? (true) :                                                     \ +			(__debug(DBG_ERROR,                                          \ +			   "%s:%s:%i: assertion \"" msg "\" failed\n",         \ +			   __FILE__, __func__, __LINE__),                      \ +		   false)) -#define assert_return(expr, ...)						\ -	do {									\ -		if (!assert_log(expr, #expr))					\ -			return __VA_ARGS__;					\ +#define assert_return(expr, ...)                                               \ +	do {                                                                   \ +		if (!assert_log(expr, #expr))                                  \ +			return __VA_ARGS__;                                    \  	} while (0) -#define assert_return_silent(expr, ...)						\ -	do {									\ -		if (!(expr))							\ -			return __VA_ARGS__;					\ +#define assert_return_silent(expr, ...)                                        \ +	do {                                                                   \ +		if (!(expr))                                                   \ +			return __VA_ARGS__;                                    \  	} while (0) -#define assert_die(expr, msg)							\ -	do {									\ -		if (!assert_log(expr, #expr))					\ -			die(msg);						\ +#define assert_die(expr, msg)                                                  \ +	do {                                                                   \ +		if (!assert_log(expr, #expr))                                  \ +			die(msg);                                              \  	} while (0) -#define assert_task_alive_or(lvl, t, cmd) 	\ -do {						\ -	if (!(t)) {				\ -		error("invalid task");		\ -		cmd;				\ -	}					\ -						\ -	if ((t)->dead) {			\ -		debug((lvl), "task dead");	\ -		cmd;				\ -	}					\ -} while(0) +#define assert_task_alive_or(lvl, t, cmd)                                      \ +	do {                                                                   \ +		if (!(t)) {                                                    \ +			error("invalid task");                                 \ +			cmd;                                                   \ +		}                                                              \ +                                                                               \ +		if ((t)->dead) {                                               \ +			debug((lvl), "task dead");                             \ +			cmd;                                                   \ +		}                                                              \ +	} while (0) -#define assert_task_alive(lvl, t) assert_task_alive_or((lvl), (t), return) +#define assert_task_alive(lvl, t) assert_task_alive_or((lvl), (t), return )  #endif diff --git a/shared/external.h b/shared/external.h index beba93a..738e460 100644 --- a/shared/external.h +++ b/shared/external.h @@ -9,7 +9,8 @@ void *__zmalloc(const char *fn, int line, size_t s) _malloc_ _alloc_(3);  char *__xstrdup(const char *fn, int line, const char *s) _malloc_;  #define xstrndup(s, n) __xstrndup(__func__, __LINE__, s, n) -char *__xstrndup(const char *fn, int line, const char *s, size_t n) _malloc_ _alloc_(4); +char *__xstrndup(const char *fn, int line, const char *s, size_t n) _malloc_ +	_alloc_(4);  #define xfree(s) __xfree(__func__, __LINE__, s)  void __xfree(const char *fn, int line, void *ptr); diff --git a/shared/list.h b/shared/list.h index fcd005a..25f4219 100644 --- a/shared/list.h +++ b/shared/list.h @@ -17,15 +17,17 @@ struct list_head {  };  #define WRITE_ONCE(a, b) ((a) = (b)) -#define READ_ONCE(a) (a) -#define LIST_POISON1  ((void *) 0x100) -#define LIST_POISON2  ((void *) 0x122) +#define READ_ONCE(a)	 (a) +#define LIST_POISON1	 ((void *)0x100) +#define LIST_POISON2	 ((void *)0x122) -#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER) -#define container_of(ptr, type, member) __extension__ ({                \ -        const typeof( ((type *)0)->member ) *__mptr = (ptr);            \ -        (type *)( (char *)__mptr - offsetof(type,member) );}) +#define container_of(ptr, type, member)                                        \ +	__extension__({                                                        \ +		const typeof(((type *)0)->member) *__mptr = (ptr);             \ +		(type *)((char *)__mptr - offsetof(type, member));             \ +	})  /* End of added stuff */ @@ -39,10 +41,12 @@ struct list_head {   * using the generic single-entry routines.   */ -#define LIST_HEAD_INIT(name) { &(name), &(name) } +#define LIST_HEAD_INIT(name)                                                   \ +	{                                                                      \ +		&(name), &(name)                                               \ +	} -#define LIST_HEAD(name) \ -	struct list_head name = LIST_HEAD_INIT(name) +#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)  /**   * INIT_LIST_HEAD - Initialize a list_head structure @@ -58,14 +62,13 @@ static inline void INIT_LIST_HEAD(struct list_head *list)  }  #ifdef CONFIG_DEBUG_LIST -extern bool __list_add_valid(struct list_head *new, -			      struct list_head *prev, -			      struct list_head *next); +extern bool __list_add_valid(struct list_head *new, struct list_head *prev, +			     struct list_head *next);  extern bool __list_del_entry_valid(struct list_head *entry);  #else  static inline bool __list_add_valid(_unused_ struct list_head *new, -				_unused_ struct list_head *prev, -				_unused_ struct list_head *next) +				    _unused_ struct list_head *prev, +				    _unused_ struct list_head *next)  {  	return true;  } @@ -81,8 +84,7 @@ static inline bool __list_del_entry_valid(_unused_ struct list_head *entry)   * This is only for internal list manipulation where we know   * the prev/next entries already!   */ -static inline void __list_add(struct list_head *new, -			      struct list_head *prev, +static inline void __list_add(struct list_head *new, struct list_head *prev,  			      struct list_head *next)  {  	if (!__list_add_valid(new, prev, next)) @@ -107,7 +109,6 @@ static inline void list_add(struct list_head *new, struct list_head *head)  	__list_add(new, head, head->next);  } -  /**   * list_add_tail - add a new entry   * @new: new entry to be added @@ -128,7 +129,7 @@ static inline void list_add_tail(struct list_head *new, struct list_head *head)   * This is only for internal list manipulation where we know   * the prev/next entries already!   */ -static inline void __list_del(struct list_head * prev, struct list_head * next) +static inline void __list_del(struct list_head *prev, struct list_head *next)  {  	next->prev = prev;  	WRITE_ONCE(prev->next, next); @@ -176,8 +177,7 @@ static inline void list_del(struct list_head *entry)   *   * If @old was empty, it will be overwritten.   */ -static inline void list_replace(struct list_head *old, -				struct list_head *new) +static inline void list_replace(struct list_head *old, struct list_head *new)  {  	new->next = old->next;  	new->next->prev = new; @@ -204,8 +204,7 @@ static inline void list_replace_init(struct list_head *old,   * @entry1: the location to place entry2   * @entry2: the location to place entry1   */ -static inline void list_swap(struct list_head *entry1, -			     struct list_head *entry2) +static inline void list_swap(struct list_head *entry1, struct list_head *entry2)  {  	struct list_head *pos = entry2->prev; @@ -278,7 +277,7 @@ static inline void list_bulk_move_tail(struct list_head *head,   * @head: the head of the list   */  static inline int list_is_first(const struct list_head *list, -					const struct list_head *head) +				const struct list_head *head)  {  	return list->prev == head;  } @@ -289,7 +288,7 @@ static inline int list_is_first(const struct list_head *list,   * @head: the head of the list   */  static inline int list_is_last(const struct list_head *list, -				const struct list_head *head) +			       const struct list_head *head)  {  	return list->next == head;  } @@ -364,7 +363,8 @@ static inline int list_is_singular(const struct list_head *head)  }  static inline void __list_cut_position(struct list_head *list, -		struct list_head *head, struct list_head *entry) +				       struct list_head *head, +				       struct list_head *entry)  {  	struct list_head *new_first = entry->next;  	list->next = head->next; @@ -390,12 +390,12 @@ static inline void __list_cut_position(struct list_head *list,   *   */  static inline void list_cut_position(struct list_head *list, -		struct list_head *head, struct list_head *entry) +				     struct list_head *head, +				     struct list_head *entry)  {  	if (list_empty(head))  		return; -	if (list_is_singular(head) && -		(head->next != entry && head != entry)) +	if (list_is_singular(head) && (head->next != entry && head != entry))  		return;  	if (entry == head)  		INIT_LIST_HEAD(list); @@ -434,8 +434,7 @@ static inline void list_cut_before(struct list_head *list,  }  static inline void __list_splice(const struct list_head *list, -				 struct list_head *prev, -				 struct list_head *next) +				 struct list_head *prev, struct list_head *next)  {  	struct list_head *first = list->next;  	struct list_head *last = list->prev; @@ -453,7 +452,7 @@ static inline void __list_splice(const struct list_head *list,   * @head: the place to add it in the first list.   */  static inline void list_splice(const struct list_head *list, -				struct list_head *head) +			       struct list_head *head)  {  	if (!list_empty(list))  		__list_splice(list, head, head->next); @@ -465,7 +464,7 @@ static inline void list_splice(const struct list_head *list,   * @head: the place to add it in the first list.   */  static inline void list_splice_tail(struct list_head *list, -				struct list_head *head) +				    struct list_head *head)  {  	if (!list_empty(list))  		__list_splice(list, head->prev, head); @@ -510,8 +509,7 @@ static inline void list_splice_tail_init(struct list_head *list,   * @type:	the type of the struct this is embedded in.   * @member:	the name of the list_head within the struct.   */ -#define list_entry(ptr, type, member) \ -	container_of(ptr, type, member) +#define list_entry(ptr, type, member) container_of(ptr, type, member)  /**   * list_first_entry - get the first element from a list @@ -521,7 +519,7 @@ static inline void list_splice_tail_init(struct list_head *list,   *   * Note, that list is expected to be not empty.   */ -#define list_first_entry(ptr, type, member) \ +#define list_first_entry(ptr, type, member)                                    \  	list_entry((ptr)->next, type, member)  /** @@ -532,8 +530,7 @@ static inline void list_splice_tail_init(struct list_head *list,   *   * Note, that list is expected to be not empty.   */ -#define list_last_entry(ptr, type, member) \ -	list_entry((ptr)->prev, type, member) +#define list_last_entry(ptr, type, member) list_entry((ptr)->prev, type, member)  /**   * list_first_entry_or_null - get the first element from a list @@ -543,18 +540,19 @@ static inline void list_splice_tail_init(struct list_head *list,   *   * Note that if the list is empty, it returns NULL.   */ -#define list_first_entry_or_null(ptr, type, member) ({ \ -	struct list_head *head__ = (ptr); \ -	struct list_head *pos__ = READ_ONCE(head__->next); \ -	pos__ != head__ ? list_entry(pos__, type, member) : NULL; \ -}) +#define list_first_entry_or_null(ptr, type, member)                            \ +	({                                                                     \ +		struct list_head *head__ = (ptr);                              \ +		struct list_head *pos__ = READ_ONCE(head__->next);             \ +		pos__ != head__ ? list_entry(pos__, type, member) : NULL;      \ +	})  /**   * list_next_entry - get the next element in list   * @pos:	the type * to cursor   * @member:	the name of the list_head within the struct.   */ -#define list_next_entry(pos, member) \ +#define list_next_entry(pos, member)                                           \  	list_entry((pos)->member.next, typeof(*(pos)), member)  /** @@ -562,7 +560,7 @@ static inline void list_splice_tail_init(struct list_head *list,   * @pos:	the type * to cursor   * @member:	the name of the list_head within the struct.   */ -#define list_prev_entry(pos, member) \ +#define list_prev_entry(pos, member)                                           \  	list_entry((pos)->member.prev, typeof(*(pos)), member)  /** @@ -570,7 +568,7 @@ static inline void list_splice_tail_init(struct list_head *list,   * @pos:	the &struct list_head to use as a loop cursor.   * @head:	the head for your list.   */ -#define list_for_each(pos, head) \ +#define list_for_each(pos, head)                                               \  	for (pos = (head)->next; pos != (head); pos = pos->next)  /** @@ -580,7 +578,7 @@ static inline void list_splice_tail_init(struct list_head *list,   *   * Continue to iterate over a list, continuing after the current position.   */ -#define list_for_each_continue(pos, head) \ +#define list_for_each_continue(pos, head)                                      \  	for (pos = pos->next; pos != (head); pos = pos->next)  /** @@ -588,7 +586,7 @@ static inline void list_splice_tail_init(struct list_head *list,   * @pos:	the &struct list_head to use as a loop cursor.   * @head:	the head for your list.   */ -#define list_for_each_prev(pos, head) \ +#define list_for_each_prev(pos, head)                                          \  	for (pos = (head)->prev; pos != (head); pos = pos->prev)  /** @@ -597,19 +595,19 @@ static inline void list_splice_tail_init(struct list_head *list,   * @n:		another &struct list_head to use as temporary storage   * @head:	the head for your list.   */ -#define list_for_each_safe(pos, n, head) \ -	for (pos = (head)->next, n = pos->next; pos != (head); \ -		pos = n, n = pos->next) +#define list_for_each_safe(pos, n, head)                                       \ +	for (pos = (head)->next, n = pos->next; pos != (head);                 \ +	     pos = n, n = pos->next)  /** - * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry + * list_for_each_prev_safe - iterate over a list backwards safe against removal + * of list entry   * @pos:	the &struct list_head to use as a loop cursor.   * @n:		another &struct list_head to use as temporary storage   * @head:	the head for your list.   */ -#define list_for_each_prev_safe(pos, n, head) \ -	for (pos = (head)->prev, n = pos->prev; \ -	     pos != (head); \ +#define list_for_each_prev_safe(pos, n, head)                                  \ +	for (pos = (head)->prev, n = pos->prev; pos != (head);                 \  	     pos = n, n = pos->prev)  /** @@ -618,10 +616,9 @@ static inline void list_splice_tail_init(struct list_head *list,   * @head:	the head for your list.   * @member:	the name of the list_head within the struct.   */ -#define list_for_each_entry(pos, head, member)				\ -	for (pos = list_first_entry(head, typeof(*pos), member);	\ -	     &pos->member != (head);					\ -	     pos = list_next_entry(pos, member)) +#define list_for_each_entry(pos, head, member)                                 \ +	for (pos = list_first_entry(head, typeof(*pos), member);               \ +	     &pos->member != (head); pos = list_next_entry(pos, member))  /**   * list_for_each_entry_reverse - iterate backwards over list of given type. @@ -629,21 +626,22 @@ static inline void list_splice_tail_init(struct list_head *list,   * @head:	the head for your list.   * @member:	the name of the list_head within the struct.   */ -#define list_for_each_entry_reverse(pos, head, member)			\ -	for (pos = list_last_entry(head, typeof(*pos), member);		\ -	     &pos->member != (head); 					\ -	     pos = list_prev_entry(pos, member)) +#define list_for_each_entry_reverse(pos, head, member)                         \ +	for (pos = list_last_entry(head, typeof(*pos), member);                \ +	     &pos->member != (head); pos = list_prev_entry(pos, member))  /** - * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue() + * list_prepare_entry - prepare a pos entry for use in + * list_for_each_entry_continue()   * @pos:	the type * to use as a start point   * @head:	the head of the list   * @member:	the name of the list_head within the struct.   * - * Prepares a pos entry for use as a start point in list_for_each_entry_continue(). + * Prepares a pos entry for use as a start point in + * list_for_each_entry_continue().   */ -#define list_prepare_entry(pos, head, member) \ -	((pos) ? : list_entry(head, typeof(*pos), member)) +#define list_prepare_entry(pos, head, member)                                  \ +	((pos) ?: list_entry(head, typeof(*pos), member))  /**   * list_for_each_entry_continue - continue iteration over list of given type @@ -654,9 +652,8 @@ static inline void list_splice_tail_init(struct list_head *list,   * Continue to iterate over list of given type, continuing after   * the current position.   */ -#define list_for_each_entry_continue(pos, head, member) 		\ -	for (pos = list_next_entry(pos, member);			\ -	     &pos->member != (head);					\ +#define list_for_each_entry_continue(pos, head, member)                        \ +	for (pos = list_next_entry(pos, member); &pos->member != (head);       \  	     pos = list_next_entry(pos, member))  /** @@ -668,22 +665,21 @@ static inline void list_splice_tail_init(struct list_head *list,   * Start to iterate over list of given type backwards, continuing after   * the current position.   */ -#define list_for_each_entry_continue_reverse(pos, head, member)		\ -	for (pos = list_prev_entry(pos, member);			\ -	     &pos->member != (head);					\ +#define list_for_each_entry_continue_reverse(pos, head, member)                \ +	for (pos = list_prev_entry(pos, member); &pos->member != (head);       \  	     pos = list_prev_entry(pos, member))  /** - * list_for_each_entry_from - iterate over list of given type from the current point + * list_for_each_entry_from - iterate over list of given type from the current + * point   * @pos:	the type * to use as a loop cursor.   * @head:	the head for your list.   * @member:	the name of the list_head within the struct.   *   * Iterate over list of given type, continuing from current position.   */ -#define list_for_each_entry_from(pos, head, member) 			\ -	for (; &pos->member != (head);					\ -	     pos = list_next_entry(pos, member)) +#define list_for_each_entry_from(pos, head, member)                            \ +	for (; &pos->member != (head); pos = list_next_entry(pos, member))  /**   * list_for_each_entry_from_reverse - iterate backwards over list of given type @@ -694,25 +690,25 @@ static inline void list_splice_tail_init(struct list_head *list,   *   * Iterate backwards over list of given type, continuing from current position.   */ -#define list_for_each_entry_from_reverse(pos, head, member)		\ -	for (; &pos->member != (head);					\ -	     pos = list_prev_entry(pos, member)) +#define list_for_each_entry_from_reverse(pos, head, member)                    \ +	for (; &pos->member != (head); pos = list_prev_entry(pos, member))  /** - * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry + * list_for_each_entry_safe - iterate over list of given type safe against + * removal of list entry   * @pos:	the type * to use as a loop cursor.   * @n:		another type * to use as temporary storage   * @head:	the head for your list.   * @member:	the name of the list_head within the struct.   */ -#define list_for_each_entry_safe(pos, n, head, member)			\ -	for (pos = list_first_entry(head, typeof(*pos), member),	\ -		n = list_next_entry(pos, member);			\ -	     &pos->member != (head); 					\ -	     pos = n, n = list_next_entry(n, member)) +#define list_for_each_entry_safe(pos, n, head, member)                         \ +	for (pos = list_first_entry(head, typeof(*pos), member),               \ +	    n = list_next_entry(pos, member);                                  \ +	     &pos->member != (head); pos = n, n = list_next_entry(n, member))  /** - * list_for_each_entry_safe_continue - continue list iteration safe against removal + * list_for_each_entry_safe_continue - continue list iteration safe against + * removal   * @pos:	the type * to use as a loop cursor.   * @n:		another type * to use as temporary storage   * @head:	the head for your list. @@ -721,14 +717,14 @@ static inline void list_splice_tail_init(struct list_head *list,   * Iterate over list of given type, continuing after current point,   * safe against removal of list entry.   */ -#define list_for_each_entry_safe_continue(pos, n, head, member) 		\ -	for (pos = list_next_entry(pos, member), 				\ -		n = list_next_entry(pos, member);				\ -	     &pos->member != (head);						\ -	     pos = n, n = list_next_entry(n, member)) +#define list_for_each_entry_safe_continue(pos, n, head, member)                \ +	for (pos = list_next_entry(pos, member),                               \ +	    n = list_next_entry(pos, member);                                  \ +	     &pos->member != (head); pos = n, n = list_next_entry(n, member))  /** - * list_for_each_entry_safe_from - iterate over list from current point safe against removal + * list_for_each_entry_safe_from - iterate over list from current point safe + * against removal   * @pos:	the type * to use as a loop cursor.   * @n:		another type * to use as temporary storage   * @head:	the head for your list. @@ -737,13 +733,13 @@ static inline void list_splice_tail_init(struct list_head *list,   * Iterate over list of given type from current point, safe against   * removal of list entry.   */ -#define list_for_each_entry_safe_from(pos, n, head, member) 			\ -	for (n = list_next_entry(pos, member);					\ -	     &pos->member != (head);						\ +#define list_for_each_entry_safe_from(pos, n, head, member)                    \ +	for (n = list_next_entry(pos, member); &pos->member != (head);         \  	     pos = n, n = list_next_entry(n, member))  /** - * list_for_each_entry_safe_reverse - iterate backwards over list safe against removal + * list_for_each_entry_safe_reverse - iterate backwards over list safe against + * removal   * @pos:	the type * to use as a loop cursor.   * @n:		another type * to use as temporary storage   * @head:	the head for your list. @@ -752,11 +748,10 @@ static inline void list_splice_tail_init(struct list_head *list,   * Iterate backwards over list of given type, safe against removal   * of list entry.   */ -#define list_for_each_entry_safe_reverse(pos, n, head, member)		\ -	for (pos = list_last_entry(head, typeof(*pos), member),		\ -		n = list_prev_entry(pos, member);			\ -	     &pos->member != (head); 					\ -	     pos = n, n = list_prev_entry(n, member)) +#define list_for_each_entry_safe_reverse(pos, n, head, member)                 \ +	for (pos = list_last_entry(head, typeof(*pos), member),                \ +	    n = list_prev_entry(pos, member);                                  \ +	     &pos->member != (head); pos = n, n = list_prev_entry(n, member))  /**   * list_safe_reset_next - reset a stale list_for_each_entry_safe loop @@ -770,7 +765,6 @@ static inline void list_splice_tail_init(struct list_head *list,   * and list_safe_reset_next is called after re-taking the lock and before   * completing the current iteration of the loop body.   */ -#define list_safe_reset_next(pos, n, member)				\ -	n = list_next_entry(pos, member) +#define list_safe_reset_next(pos, n, member) n = list_next_entry(pos, member)  #endif diff --git a/shared/mc-protocol.c b/shared/mc-protocol.c index afc9b38..03a2dcd 100644 --- a/shared/mc-protocol.c +++ b/shared/mc-protocol.c @@ -4,15 +4,14 @@  #include "utils.h" -#define MC_HELO			0x00 -#define MC_NEXT_STATE_STATUS	0x01 -#define MC_GET_STATUS		0x00 -#define MC_VARINT_MAX_BYTES	5 -#define MC_STATUS_REPLY		0x00 -#define MC_UNDEFINED_VERSION	-1 - -static inline unsigned -write_byte(char **pos, char byte) +#define MC_HELO		     0x00 +#define MC_NEXT_STATE_STATUS 0x01 +#define MC_GET_STATUS	     0x00 +#define MC_VARINT_MAX_BYTES  5 +#define MC_STATUS_REPLY	     0x00 +#define MC_UNDEFINED_VERSION -1 + +static inline unsigned write_byte(char **pos, char byte)  {  	if (pos && *pos) {  		**pos = byte; @@ -20,8 +19,7 @@ write_byte(char **pos, char byte)  	}  	return 1;  } -static inline unsigned -write_varint(char **pos, int32_t v) +static inline unsigned write_varint(char **pos, int32_t v)  {  	uint32_t u = (uint32_t)v;  	unsigned rv = 0; @@ -40,8 +38,7 @@ write_varint(char **pos, int32_t v)  	return rv;  } -static inline unsigned -write_bytes(char **pos, const char *bytes, size_t n) +static inline unsigned write_bytes(char **pos, const char *bytes, size_t n)  {  	if (pos && *pos) {  		memcpy(*pos, bytes, n); @@ -51,8 +48,7 @@ write_bytes(char **pos, const char *bytes, size_t n)  	return n;  } -static inline unsigned -write_str(char **pos, const char *str, size_t len) +static inline unsigned write_str(char **pos, const char *str, size_t len)  {  	unsigned rv; @@ -68,8 +64,7 @@ write_str(char **pos, const char *str, size_t len)   *   0 = need more bytes   * < 0 = error   */ -static inline int -read_varint(const char **from, size_t *remain, int32_t *res) +static inline int read_varint(const char **from, size_t *remain, int32_t *res)  {  	unsigned consumed;  	uint32_t val = 0; @@ -103,8 +98,7 @@ read_varint(const char **from, size_t *remain, int32_t *res)   *   0 = need more bytes   * < 0 = error   */ -int -mc_is_handshake_complete(const char *buf, size_t len) +int mc_is_handshake_complete(const char *buf, size_t len)  {  	int32_t mclen;  	int r; @@ -123,21 +117,21 @@ mc_is_handshake_complete(const char *buf, size_t len)  	}  	if (mclen < len) { -		debug(DBG_IDLE, "short MC message - len: %" PRIi32 ", remain: %zu", -		      mclen, len); +		debug(DBG_IDLE, +		      "short MC message - len: %" PRIi32 ", remain: %zu", mclen, +		      len);  		return 0; -	}  +	}  	debug(DBG_IDLE, "Complete message");  	return 1;  } -#define PLAYERS_NEEDLE	"\"players\"" -#define MAX_NEEDLE	"\"max\"" -#define ONLINE_NEEDLE	"\"online\"" -static bool -mc_get_player_count(const char *buf, size_t remain, -		    unsigned *ronline, unsigned *rmax) +#define PLAYERS_NEEDLE "\"players\"" +#define MAX_NEEDLE     "\"max\"" +#define ONLINE_NEEDLE  "\"online\"" +static bool mc_get_player_count(const char *buf, size_t remain, +				unsigned *ronline, unsigned *rmax)  {  	/*  	 * Example JSON (line breaks added): @@ -182,9 +176,8 @@ error:  	return false;  } -bool -mc_protocol_parse_status_reply(const char *buf, size_t len, -			       unsigned *online, unsigned *max) +bool mc_protocol_parse_status_reply(const char *buf, size_t len, +				    unsigned *online, unsigned *max)  {  	const char *from = buf;  	size_t remain = len; @@ -201,8 +194,8 @@ mc_protocol_parse_status_reply(const char *buf, size_t len,  		return false;  	} -	debug(DBG_IDLE, "MC message - len: %" PRIi32 ", remain: %zu", -	      mclen, remain); +	debug(DBG_IDLE, "MC message - len: %" PRIi32 ", remain: %zu", mclen, +	      remain);  	if (*from != MC_STATUS_REPLY) {  		error("unknown server reply (0x%02hhx)", *from); @@ -218,8 +211,8 @@ mc_protocol_parse_status_reply(const char *buf, size_t len,  		return false;  	} -	debug(DBG_IDLE, "MC - json len: %" PRIi32 ", remain: %zu", -	      jsonlen, remain); +	debug(DBG_IDLE, "MC - json len: %" PRIi32 ", remain: %zu", jsonlen, +	      remain);  	if (jsonlen < remain) {  		error("invalid JSON length"); @@ -232,9 +225,8 @@ mc_protocol_parse_status_reply(const char *buf, size_t len,  	return false;  } -bool -mc_protocol_create_status_request(char *buf, size_t len, size_t *rlen, -				  struct saddr *saddr) +bool mc_protocol_create_status_request(char *buf, size_t len, size_t *rlen, +				       struct saddr *saddr)  {  	uint16_t port;  	char hostname[INET6_ADDRSTRLEN]; @@ -248,7 +240,7 @@ mc_protocol_create_status_request(char *buf, size_t len, size_t *rlen,  	hostlen = strlen(hostname);  	/* First, a handshake, calculate body length... */ -	bodylen  = write_byte(NULL, MC_HELO); +	bodylen = write_byte(NULL, MC_HELO);  	bodylen += write_varint(NULL, MC_UNDEFINED_VERSION);  	bodylen += write_str(NULL, hostname, hostlen);  	bodylen += write_byte(NULL, (port >> 8) & 0xff); @@ -279,4 +271,3 @@ mc_protocol_create_status_request(char *buf, size_t len, size_t *rlen,  	*rlen = packetlen;  	return true;  } - diff --git a/shared/mc-protocol.h b/shared/mc-protocol.h index 8ecc02a..8e62aeb 100644 --- a/shared/mc-protocol.h +++ b/shared/mc-protocol.h @@ -10,4 +10,3 @@ bool mc_protocol_create_status_request(char *buf, size_t len, size_t *rlen,  				       struct saddr *saddr);  #endif - diff --git a/shared/rcon-protocol.c b/shared/rcon-protocol.c index 0ea1245..0cf73fc 100644 --- a/shared/rcon-protocol.c +++ b/shared/rcon-protocol.c @@ -5,8 +5,7 @@  #include "rcon-protocol.h" -static int32_t -read_int(const char **pos, size_t *len) +static int32_t read_int(const char **pos, size_t *len)  {  	uint32_t val;  	const char *p; @@ -18,8 +17,8 @@ read_int(const char **pos, size_t *len)  		return 0;  	p = *pos; -	val  = ((uint8_t)p[0] <<  0); -	val += ((uint8_t)p[1] <<  8); +	val = ((uint8_t)p[0] << 0); +	val += ((uint8_t)p[1] << 8);  	val += ((uint8_t)p[2] << 16);  	val += ((uint8_t)p[3] << 24); @@ -30,8 +29,7 @@ read_int(const char **pos, size_t *len)  	return (int32_t)val;  } -static void -write_int(char **pos, size_t *len, int32_t orig) +static void write_int(char **pos, size_t *len, int32_t orig)  {  	uint32_t val = (uint32_t)orig;  	char *p; @@ -40,8 +38,8 @@ write_int(char **pos, size_t *len, int32_t orig)  		return;  	p = *pos; -	p[0] = (val >>  0) & 0xff; -	p[1] = (val >>  8) & 0xff; +	p[0] = (val >> 0) & 0xff; +	p[1] = (val >> 8) & 0xff;  	p[2] = (val >> 16) & 0xff;  	p[3] = (val >> 24) & 0xff; @@ -50,8 +48,7 @@ write_int(char **pos, size_t *len, int32_t orig)  		*len += RCON_INT_LEN;  } -static void -write_str(char **pos, size_t *len, const char *str, size_t slen) +static void write_str(char **pos, size_t *len, const char *str, size_t slen)  {  	if (!pos || !*pos || !str || *str == '\0' || slen < 1)  		return; @@ -62,8 +59,7 @@ write_str(char **pos, size_t *len, const char *str, size_t slen)  		*len += slen;  } -static void -write_end(char **pos, size_t *len) +static void write_end(char **pos, size_t *len)  {  	char *p; @@ -79,9 +75,9 @@ write_end(char **pos, size_t *len)  		*len += RCON_END_LEN;  } -bool -rcon_protocol_create_packet(char *buf, size_t len, size_t *rlen, int32_t reqid, -			    enum rcon_packet_type type, const char *msg) +bool rcon_protocol_create_packet(char *buf, size_t len, size_t *rlen, +				 int32_t reqid, enum rcon_packet_type type, +				 const char *msg)  {  	size_t plen, msglen;  	char *pos; @@ -115,8 +111,7 @@ rcon_protocol_create_packet(char *buf, size_t len, size_t *rlen, int32_t reqid,   *   0 = packet not complete   * > 0 = packet complete (length)   */ -int32_t -rcon_protocol_packet_complete(const char *buf, size_t len) +int32_t rcon_protocol_packet_complete(const char *buf, size_t len)  {  	const char *pos;  	int32_t plen; @@ -140,9 +135,9 @@ rcon_protocol_packet_complete(const char *buf, size_t len)  		return plen;  } -bool -rcon_protocol_read_packet(const char *buf, size_t len, int32_t *id, int32_t *type, -			  const char **rmsg, const char **error) +bool rcon_protocol_read_packet(const char *buf, size_t len, int32_t *id, +			       int32_t *type, const char **rmsg, +			       const char **error)  {  	const char *pos;  	int32_t plen; diff --git a/shared/rcon-protocol.h b/shared/rcon-protocol.h index 097da1d..b3aea98 100644 --- a/shared/rcon-protocol.h +++ b/shared/rcon-protocol.h @@ -5,6 +5,7 @@  #include <stdint.h>  /* FIXME: FAIL is an id, not type, LOGIN_OK should be LOGIN_RESPONSE */ +/* clang-format off */  enum rcon_packet_type {  	RCON_PACKET_LOGIN	= 3,  	RCON_PACKET_LOGIN_OK	= 2, @@ -12,6 +13,7 @@ enum rcon_packet_type {  	RCON_PACKET_COMMAND	= 2,  	RCON_PACKET_RESPONSE	= 0,  }; +/* clang-format on */  #define RCON_INT_LEN 4 @@ -22,8 +24,7 @@ enum rcon_packet_type {  /* header + reqid + type + end */  #define RCON_PKT_MIN_LEN (RCON_HDR_LEN + 2 * RCON_INT_LEN + RCON_END_LEN) -static inline size_t -rcon_protocol_packet_len(size_t msglen) +static inline size_t rcon_protocol_packet_len(size_t msglen)  {  	/* header + reqid + type + msg + end */  	return (RCON_PKT_MIN_LEN + msglen); diff --git a/shared/server-config-options.h b/shared/server-config-options.h index 5aee734..5600e52 100644 --- a/shared/server-config-options.h +++ b/shared/server-config-options.h @@ -25,55 +25,68 @@ struct cfg_key_value_map scfg_key_map[] = {  		.key_name = "type",  		.key_value = SCFG_KEY_TYPE,  		.value_type = CFG_VAL_TYPE_STRING, -	}, { +	}, +	{  		.key_name = "name",  		.key_value = SCFG_KEY_NAME,  		.value_type = CFG_VAL_TYPE_STRING, -	}, { +	}, +	{  		.key_name = "port",  		.key_value = SCFG_KEY_PORT,  		.value_type = CFG_VAL_TYPE_UINT16, -	}, { +	}, +	{  		.key_name = "local",  		.key_value = SCFG_KEY_LOCAL,  		.value_type = CFG_VAL_TYPE_ADDRS, -	}, { +	}, +	{  		.key_name = "remote",  		.key_value = SCFG_KEY_REMOTE,  		.value_type = CFG_VAL_TYPE_ADDRS, -	}, { +	}, +	{  		.key_name = "idle_timeout",  		.key_value = SCFG_KEY_IDLE_TIMEOUT,  		.value_type = CFG_VAL_TYPE_UINT16, -	}, { +	}, +	{  		.key_name = "stop_method",  		.key_value = SCFG_KEY_STOP_METHOD,  		.value_type = CFG_VAL_TYPE_STRING, -	}, { +	}, +	{  		.key_name = "start_method",  		.key_value = SCFG_KEY_START_METHOD,  		.value_type = CFG_VAL_TYPE_STRING, -	}, { +	}, +	{  		.key_name = "stop_exec",  		.key_value = SCFG_KEY_STOP_EXEC,  		.value_type = CFG_VAL_TYPE_STRING, -	}, { +	}, +	{  		.key_name = "start_exec",  		.key_value = SCFG_KEY_START_EXEC,  		.value_type = CFG_VAL_TYPE_STRING, -	}, { +	}, +	{  		.key_name = "rcon",  		.key_value = SCFG_KEY_RCON,  		.value_type = CFG_VAL_TYPE_ADDRS, -	}, { +	}, +	{  		.key_name = "rcon_password",  		.key_value = SCFG_KEY_RCON_PASSWORD,  		.value_type = CFG_VAL_TYPE_STRING, -	}, { +	}, +	{  		.key_name = "systemd_service",  		.key_value = SCFG_KEY_SYSTEMD_SERVICE,  		.value_type = CFG_VAL_TYPE_STRING, -	}, { +	}, +	{  		.key_name = NULL,  		.key_value = SCFG_KEY_INVALID,  		.value_type = CFG_VAL_TYPE_INVALID, @@ -81,4 +94,3 @@ struct cfg_key_value_map scfg_key_map[] = {  };  #endif - diff --git a/shared/utils.c b/shared/utils.c index c71f1f7..20d9809 100644 --- a/shared/utils.c +++ b/shared/utils.c @@ -17,8 +17,7 @@  unsigned debug_mask = 0; -void -socket_set_low_latency(int sfd, bool keepalive, bool iptos, bool nodelay) +void socket_set_low_latency(int sfd, bool keepalive, bool iptos, bool nodelay)  {  	int option; @@ -27,31 +26,33 @@ socket_set_low_latency(int sfd, bool keepalive, bool iptos, bool nodelay)  	/* Probably not necessary, but can't hurt */  	if (keepalive) {  		option = true; -		if (setsockopt(sfd, SOL_SOCKET, SO_KEEPALIVE, &option, sizeof(option)) < 0) +		if (setsockopt(sfd, SOL_SOCKET, SO_KEEPALIVE, &option, +			       sizeof(option)) < 0)  			error("setsockopt: %m");  	}  	/* Doubtful if it has much effect, but can't hurt */  	if (iptos) {  		option = IPTOS_LOWDELAY; -		if (setsockopt(sfd, IPPROTO_IP, IP_TOS, &option, sizeof(option)) < 0) +		if (setsockopt(sfd, IPPROTO_IP, IP_TOS, &option, +			       sizeof(option)) < 0)  			error("setsockopt: %m");  	}  	/* Nagle's algorithm is a poor fit for gaming */  	if (nodelay) {  		option = true; -		if (setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, &option, sizeof(option)) < 0) +		if (setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, &option, +			       sizeof(option)) < 0)  			error("setsockopt: %m");  	}  } -uint16_t -saddr_port(struct saddr *saddr) +uint16_t saddr_port(struct saddr *saddr)  { -	//assert_return(saddr, 0); +	// assert_return(saddr, 0); -	switch (saddr->storage.ss_family) { +	switch (saddr->st.ss_family) {  	case AF_INET:  		return ntohs(saddr->in4.sin_port);  	case AF_INET6: @@ -61,18 +62,19 @@ saddr_port(struct saddr *saddr)  	}  } -char * -saddr_addr(struct saddr *saddr, char *buf, size_t len) +char *saddr_addr(struct saddr *saddr, char *buf, size_t len)  { -	//assert_return(saddr && buf && len > 0, NULL); +	// assert_return(saddr && buf && len > 0, NULL); -	switch (saddr->storage.ss_family) { +	switch (saddr->st.ss_family) {  	case AF_INET: -		if (inet_ntop(saddr->in4.sin_family, &saddr->in4.sin_addr, buf, len)) +		if (inet_ntop(saddr->in4.sin_family, &saddr->in4.sin_addr, buf, +			      len))  			return buf;  		break;  	case AF_INET6: -		if (inet_ntop(saddr->in6.sin6_family, &saddr->in6.sin6_addr, buf, len)) +		if (inet_ntop(saddr->in6.sin6_family, &saddr->in6.sin6_addr, +			      buf, len))  			return buf;  		break;  	default: @@ -83,10 +85,9 @@ saddr_addr(struct saddr *saddr, char *buf, size_t len)  	return buf;  } -void -saddr_set_ipv4(struct saddr *saddr, in_addr_t ip, in_port_t port) +void saddr_set_ipv4(struct saddr *saddr, in_addr_t ip, in_port_t port)  { -	//assert_return(saddr); +	// assert_return(saddr);  	memset(&saddr->in4, 0, sizeof(saddr->in4));  	saddr->in4.sin_family = AF_INET; @@ -96,10 +97,10 @@ saddr_set_ipv4(struct saddr *saddr, in_addr_t ip, in_port_t port)  	saddr_set_addrstr(saddr);  } -void -saddr_set_ipv6(struct saddr *saddr, const struct in6_addr *ip, in_port_t port) +void saddr_set_ipv6(struct saddr *saddr, const struct in6_addr *ip, +		    in_port_t port)  { -	//assert_return(saddr && ip); +	// assert_return(saddr && ip);  	memset(&saddr->in6, 0, sizeof(saddr->in6));  	saddr->in6.sin6_family = AF_INET6; @@ -110,14 +111,13 @@ saddr_set_ipv6(struct saddr *saddr, const struct in6_addr *ip, in_port_t port)  	saddr_set_addrstr(saddr);  } -void -saddr_set_addrstr(struct saddr *saddr) +void saddr_set_addrstr(struct saddr *saddr)  { -	//assert_return(saddr); +	// assert_return(saddr);  	char abuf[ADDRSTRLEN]; -	switch (saddr->storage.ss_family) { +	switch (saddr->st.ss_family) {  	case AF_INET:  		snprintf(saddr->addrstr, sizeof(saddr->addrstr),  			 "AF_INET4 %s %" PRIu16, @@ -136,8 +136,7 @@ saddr_set_addrstr(struct saddr *saddr)  	}  } -int -strtou16_strict(const char *str, uint16_t *result) +int strtou16_strict(const char *str, uint16_t *result)  {  	char *end;  	long val; @@ -150,7 +149,7 @@ strtou16_strict(const char *str, uint16_t *result)  	if (errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))  		return -EINVAL; -	 +  	if (errno != 0 && val == 0)  		return -EINVAL; @@ -167,4 +166,3 @@ strtou16_strict(const char *str, uint16_t *result)  		*result = val;  	return 0;  } - diff --git a/shared/utils.h b/shared/utils.h index 3ed1c87..9171648 100644 --- a/shared/utils.h +++ b/shared/utils.h @@ -12,14 +12,14 @@  extern unsigned debug_mask; -#define _unused_ __attribute__((__unused__)) -#define _pure_ __attribute__((__pure__)) -#define _const_ __attribute__((__const__)) -#define _alloc_(...) __attribute__((__alloc_size__(__VA_ARGS__))) -#define _malloc_ __attribute__((__malloc__)) +#define _unused_       __attribute__((__unused__)) +#define _pure_	       __attribute__((__pure__)) +#define _const_	       __attribute__((__const__)) +#define _alloc_(...)   __attribute__((__alloc_size__(__VA_ARGS__))) +#define _malloc_       __attribute__((__malloc__))  #define _printf_(a, b) __attribute__((__format__(printf, a, b))) -#define _alignas_(x) __attribute__((__aligned__(__alignof(x)))) -#define _big_endian_ __attribute__((packed, scalar_storage_order("big-endian"))) +#define _alignas_(x)   __attribute__((__aligned__(__alignof(x)))) +#define _big_endian_   __attribute__((packed, scalar_storage_order("big-endian")))  #if __GNUC__ >= 7  #define _fallthrough_ __attribute__((__fallthrough__)) @@ -35,7 +35,7 @@ extern unsigned debug_mask;  #endif  #endif -#define STRLEN(x) (sizeof(""x"") - 1) +#define STRLEN(x) (sizeof("" x "") - 1)  #include "list.h"  #include "debug.h" @@ -56,7 +56,7 @@ extern unsigned debug_mask;  struct saddr {  	union { -		struct sockaddr_storage storage; +		struct sockaddr_storage st;  		struct sockaddr_in in4;  		struct sockaddr_in6 in6;  		struct sockaddr_ll ll; @@ -74,7 +74,8 @@ uint16_t saddr_port(struct saddr *saddr);  void saddr_set_ipv4(struct saddr *saddr, in_addr_t ip, in_port_t port); -void saddr_set_ipv6(struct saddr *saddr, const struct in6_addr *ip, in_port_t port); +void saddr_set_ipv6(struct saddr *saddr, const struct in6_addr *ip, +		    in_port_t port);  void saddr_set_addrstr(struct saddr *saddr); @@ -105,9 +106,11 @@ static inline bool strcaseeq(const char *a, const char *b)  #endif  #if __BYTE_ORDER == __LITTLE_ENDIAN -#define cinet_addr(a,b,c,d) ((uint32_t)((a)<<0|(b)<<8|(c)<<16|(d)<<24)) +#define cinet_addr(a, b, c, d)                                                 \ +	((uint32_t)((a) << 0 | (b) << 8 | (c) << 16 | (d) << 24))  #else -#define cinet_addr(a,b,c,d) ((uint32_t)((a)<<24|(b)<<16|(c)<<8|(d)<<0)) +#define cinet_addr(a, b, c, d)                                                 \ +	((uint32_t)((a) << 24 | (b) << 16 | (c) << 8 | (d) << 0))  #endif  #define PIPE_RD 0 @@ -117,7 +120,6 @@ static inline bool strcaseeq(const char *a, const char *b)  #define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) +#define DIV_ROUND_UP(n, d) (((n) + (d)-1) / (d))  #endif -  | 
