[PATCH 2/5] Allow a server to be specified.

Thadeu Lima de Souza Cascardo cascardo en cascardo.eti.br
Jue Abr 20 11:40:44 UTC 2017


Allow to connect to a different server. That way, a test server may be
used when debugging rnetclient.
---
 rnetclient.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/rnetclient.c b/rnetclient.c
index 946fa79..dad3901 100644
--- a/rnetclient.c
+++ b/rnetclient.c
@@ -50,7 +50,10 @@ static const char rnetclient_doc[] =
 	"Send the Brazilian Income Tax Report to the Brazilian "
 	"Tax Authority";
 static const char rnetclient_args_doc[] =
-	"[-d|--declaration] FILE [-o|--output-dir DIRECTORY]";
+	"[-d|--declaration] FILE [-o|--output-dir DIRECTORY]"
+	" [-s|--server-name SERVER]";
+
+#define RNET_ADDRESS "receitanet.receita.fazenda.gov.br"
 
 /* Description and definition of each option accepted by the program.  */
 
@@ -63,6 +66,10 @@ static const struct argp_option rnetclient_options_desc[] = {
 	  "The directory where you wish to save the receipt.",
 	  0 },
 
+	{ "server-name", 's', "SERVER", 0,
+	  "The server to connect to. Default is " RNET_ADDRESS ".",
+	  0 },
+
 	{ NULL },
 };
 
@@ -75,6 +82,9 @@ struct rnetclient_args {
 
 	/* Output filename. */
 	char output_file[PATH_MAX];
+
+	/* Server to connect to. */
+	char *server_name;
 };
 
 /* Parser for command line arguments.  */
@@ -93,6 +103,10 @@ static error_t rnetclient_parse_opt(int key, char *arg, struct argp_state *state
 		a->output_dir = arg;
 		break;
 
+	case 's':
+		a->server_name = arg;
+		break;
+
 	case ARGP_KEY_ARG:
 		/* The user has possibly provided a filename without
 		   using any switches (e.g., by running './rnetclient
@@ -210,9 +224,7 @@ static int inflateRecord(char *buffer, size_t len, char **out, size_t *olen)
 	return 0;
 }
 
-#define RNET_ADDRESS "receitanet.receita.fazenda.gov.br"
-
-static int connect_rnet(int *c)
+static int connect_rnet(int *c, struct rnetclient_args *args)
 {
 	struct addrinfo *addresses;
 	struct addrinfo *addr;
@@ -224,7 +236,7 @@ static int connect_rnet(int *c)
 	hint.ai_socktype = SOCK_STREAM;
 	hint.ai_protocol = IPPROTO_TCP;
 	hint.ai_flags = AI_ADDRCONFIG;
-	r = getaddrinfo(RNET_ADDRESS, "3456", &hint, &addresses);
+	r = getaddrinfo(args->server_name, "3456", &hint, &addresses);
 	if (r) {
 		return r;
 	}
@@ -453,6 +465,7 @@ int main(int argc, char **argv)
 	   us.  This is a bug, and should not happen in the current
 	   state.  */
 	memset(&rnet_args, 0, sizeof (rnet_args));
+	rnet_args.server_name = RNET_ADDRESS;
 	err = argp_parse (&rnetclient_argp, argc, argv, 0, NULL, &rnet_args);
 	if (err != 0)
 		fprintf(stderr, "internal error while parsing command line arguments.");
@@ -493,7 +506,7 @@ int main(int argc, char **argv)
 	gnutls_global_init();
 
 	session_new(&session);
-	r = connect_rnet(&c);
+	r = connect_rnet(&c, &rnet_args);
 	if (r) {
 		fprintf(stderr, "error connecting to server: %s\n",
 			r == EAI_SYSTEM ? strerror(errno) : gai_strerror(r));
-- 
2.11.0



Más información sobre la lista de distribución Softwares-impostos