[PATCH 2/5] Allow a server to be specified.
Sergio Durigan Junior
sergiodj en sergiodj.net
Lun Abr 24 13:35:44 UTC 2017
On Thursday, April 20 2017, Thadeu Lima de Souza Cascardo wrote:
> 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)
Se você só precisa do endereço do servidor aqui, acho melhor passar só
ele.
> {
> 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
De resto, OK.
--
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
http://sergiodj.net/
Más información sobre la lista de distribución Softwares-impostos