From b890aeec16fb361e7832b5d125e62e57f0b22bdc Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Fri, 7 Mar 2014 20:28:14 -0300 Subject: [PATCH] Send right part of the header for 2014. The code was sending a piece of the header as expected by the server, considering the header size for 2013. Now, we check for the year we are submitting for, and use the proper size. Reported-by: Alexandre Oliva --- rnet_encode.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/rnet_encode.c b/rnet_encode.c index ecb9732..404f0a9 100644 --- a/rnet_encode.c +++ b/rnet_encode.c @@ -26,6 +26,11 @@ #include "rnet_message.h" #include "decfile.h" +#define RNET_HEADER_START_2013 111 +#define RNET_HEADER_END_2013 (RNET_HEADER_SIZE_2013 - 15) +#define RNET_HEADER_START_2014 111 +#define RNET_HEADER_END_2014 (RNET_HEADER_SIZE_2014 - 15) + int rnet_encode(struct rnet_decfile *decfile, struct rnet_message **msg) { int r; @@ -43,6 +48,8 @@ int rnet_encode(struct rnet_decfile *decfile, struct rnet_message **msg) char *header; uint8_t ret; + size_t header_start, header_end; + *msg = rnet_message_new(); if (*msg == NULL) { return -ENOMEM; @@ -64,6 +71,16 @@ int rnet_encode(struct rnet_decfile *decfile, struct rnet_message **msg) versao_pgd = strtoul(rnet_decfile_get_header_field(decfile, "nr_versao"), NULL, 10); ret = strtoul(rnet_decfile_get_header_field(decfile, "in_ret"), NULL, 10); + if (!strcmp(ano, "2013")) { + header_start = RNET_HEADER_START_2013; + header_end = RNET_HEADER_END_2013; + } else if (!strcmp(ano, "2014")) { + header_start = RNET_HEADER_START_2014; + header_end = RNET_HEADER_END_2014; + } else { + return -EINVAL; + } + (*msg)->buffer[0] = 0x40; (*msg)->len = 1; r = rnet_message_add_u32(msg, "a_comp", 0); @@ -90,7 +107,7 @@ int rnet_encode(struct rnet_decfile *decfile, struct rnet_message **msg) r = rnet_message_add_ascii(msg, "origem", "JA2R"); r = rnet_message_add_ascii(msg, "so", "GNU"); r = rnet_message_add_ascii(msg, "cliente", "201104"); - r = rnet_message_add_buffer(msg, "dados_val", header + 111, 750 - 111); + r = rnet_message_add_buffer(msg, "dados_val", header + header_start, header_end - header_start); r = rnet_message_add_u32(msg, "tam_dados_val", 0); r = rnet_message_add_u32(msg, "tam_dados_val_chave", 0); r = rnet_message_add_u32(msg, "arquivos_restantes", 0); -- 2.20.1