From: Thadeu Lima de Souza Cascardo Date: Sat, 2 Nov 2013 21:09:15 +0000 (-0200) Subject: Sixth byte in some messages are not always 1. X-Git-Tag: v0.1.1~2 X-Git-Url: http://git.cascardo.info/?p=cascardo%2Flibreceita.git;a=commitdiff_plain;h=7421958f9ba1677463f8944edf0103f7841db604 Sixth byte in some messages are not always 1. The first message, with the hash, uses the sixth byte as 1. The second message, on the other hand, uses it as 0. --- diff --git a/doc/FORMATO b/doc/FORMATO index 270c3f4..ddede18 100644 --- a/doc/FORMATO +++ b/doc/FORMATO @@ -51,6 +51,6 @@ S: (6 bytes) + deflate(hash) chave TEXTO: "XXXX.Erro xxxxxxxx", onde XXXX é o código de erro chaves *ARQ* C: (6 bytes) + deflate(hash) - header: 0x01 0xII 0xII 0xOO 0xOO 0x01, II é o tamanho da entrada, OO é o tamanho da saída do deflate + header: 0x01 0xII 0xII 0xOO 0xOO 0x00, II é o tamanho da entrada, OO é o tamanho da saída do deflate conteúdo: arquivo DEC, com apenas os registros de declaração, ou seja, excluídos os registros de recibo, removido o número de controle (últimos 10 bytes) de todos os registros O tamanho e o hash da mensagem anterior do cliente são o tamanho e o hash MD5 do conteúdo desta transmissão diff --git a/rnetclient.c b/rnetclient.c index a9c75cd..2b98cc4 100644 --- a/rnetclient.c +++ b/rnetclient.c @@ -49,7 +49,7 @@ static void session_new(gnutls_session_t *session) gnutls_credentials_set(*session, GNUTLS_CRD_CERTIFICATE, cred); } -static int deflateRecord(char *buffer, size_t len, char **out, size_t *olen) +static int deflateRecord(char *buffer, size_t len, char **out, size_t *olen, int header) { z_stream zstrm; int r; @@ -80,7 +80,7 @@ static int deflateRecord(char *buffer, size_t len, char **out, size_t *olen) (*out)[2] = (zstrm.total_out & 0xff); (*out)[3] = (len >> 8); (*out)[4] = (len & 0xff); - (*out)[5] = 0x1; + (*out)[5] = header ? 0x01 : 0x0; deflateEnd(&zstrm); return 0; } @@ -174,11 +174,11 @@ static void usage(void) exit(1); } -static int rnet_send(gnutls_session_t session, char *buffer, size_t len) +static int rnet_send(gnutls_session_t session, char *buffer, size_t len, int header) { char *out; size_t olen; - deflateRecord(buffer, len, &out, &olen); + deflateRecord(buffer, len, &out, &olen, header); gnutls_record_send(session, out, olen); free(out); return 0; @@ -321,7 +321,7 @@ int main(int argc, char **argv) gnutls_strerror(r)); rnet_encode(decfile, &message); - rnet_send(session, message->buffer, message->len); + rnet_send(session, message->buffer, message->len, 1); rnet_message_del(message); message = NULL; @@ -354,7 +354,7 @@ int main(int argc, char **argv) goto out; message = rnet_decfile_get_file(decfile); - rnet_send(session, message->buffer, message->len); + rnet_send(session, message->buffer, message->len, 0); message = NULL; r = rnet_recv(session, &message);