[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