#include "../configuration.h"
#include "../vrps.h"
-#include "pdu.h"
#include "pdu_serializer.h"
/* Header length field is always 64 bits long */
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];
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;
#define SRC_RTR_PDU_SENDER_H_
#include <sys/types.h>
+#include "pdu.h"
struct sender_common {
int fd;
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_ */
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;
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);