[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