]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Send only header of erroneous PDU at Error Report PDU
authorpcarana <pc.moreno2099@gmail.com>
Fri, 8 Mar 2019 16:25:11 +0000 (10:25 -0600)
committerpcarana <pc.moreno2099@gmail.com>
Fri, 8 Mar 2019 16:25:11 +0000 (10:25 -0600)
src/rtr/pdu_sender.c
src/rtr/pdu_sender.h
src/rtr/pdu_serializer.c

index cdcf2db51b5b35cd0794b44ac5de2a60a2f43132..e46fc62c7c54a9e8946ae59b0832d80a45008a62 100644 (file)
@@ -9,7 +9,6 @@
 
 #include "../configuration.h"
 #include "../vrps.h"
-#include "pdu.h"
 #include "pdu_serializer.h"
 
 /* Header length field is always 64 bits long */
@@ -249,7 +248,7 @@ send_end_of_data_pdu(struct sender_common *common)
 
 int
 send_error_report_pdu(struct sender_common *common, u_int16_t code,
-    void *err_pdu, char *message)
+    struct pdu_header *err_pdu_header, char *message)
 {
        struct error_report_pdu pdu;
        char data[BUFFER_SIZE];
@@ -259,11 +258,9 @@ send_error_report_pdu(struct sender_common *common, u_int16_t code,
            code);
 
        pdu.error_pdu_length = 0;
-       pdu.erroneous_pdu = err_pdu;
-       if (err_pdu != NULL) {
-               /* TODO Really? Or get the PDU header length field */
-               pdu.error_pdu_length = sizeof(*err_pdu);
-       }
+       pdu.erroneous_pdu = (void *)err_pdu_header;
+       if (err_pdu_header != NULL)
+               pdu.error_pdu_length = sizeof(err_pdu_header);
 
        pdu.error_message_length = 0;
        pdu.error_message = NULL;
index f7d767a6c0a6c98d94ae492663e2c59ddb7d50ec..9a0b85f286965d6afa858eeeb09a232545ad81e9 100644 (file)
@@ -2,6 +2,7 @@
 #define SRC_RTR_PDU_SENDER_H_
 
 #include <sys/types.h>
+#include "pdu.h"
 
 struct sender_common {
        int fd;
@@ -19,7 +20,8 @@ int send_cache_reset_pdu(struct sender_common *);
 int send_cache_response_pdu(struct sender_common *);
 int send_payload_pdus(struct sender_common *);
 int send_end_of_data_pdu(struct sender_common *);
-int send_error_report_pdu(struct sender_common *, u_int16_t, void *, char *);
+int send_error_report_pdu(struct sender_common *, u_int16_t,
+    struct pdu_header *, char *);
 
 
 #endif /* SRC_RTR_PDU_SENDER_H_ */
index 8c11819cf23ca15da92e7cc0480265324500383d..4ab8914cbb9af21cb986f5febf5fd185da6437d3 100644 (file)
@@ -120,6 +120,7 @@ serialize_cache_reset_pdu(struct cache_reset_pdu *pdu, char *buf)
 size_t
 serialize_error_report_pdu(struct error_report_pdu *pdu, char *buf)
 {
+       struct pdu_header *err_pdu_header;
        size_t head_size;
        char *ptr, *tmp_ptr;
        int i;
@@ -130,12 +131,11 @@ serialize_error_report_pdu(struct error_report_pdu *pdu, char *buf)
 
        ptr = write_int32(ptr, pdu->error_pdu_length);
        if (pdu->error_pdu_length > 0) {
-               tmp_ptr = pdu->erroneous_pdu;
-               /* TODO Set only the header of err PDU */
-               while (*tmp_ptr != '\0') {
-                       ptr = write_int8(ptr, *tmp_ptr);
-                       tmp_ptr++;
-               }
+               /* Set only the header of err PDU */
+               err_pdu_header = (struct pdu_header *)pdu->erroneous_pdu;
+               head_size = serialize_pdu_header(err_pdu_header,
+                   err_pdu_header->reserved, ptr);
+               ptr = ptr + head_size;
        }
 
        ptr = write_int32(ptr, pdu->error_message_length);