From e1058170fa9f221c827ab99d8856080648812a88 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 28 Jun 2019 10:54:34 +0200 Subject: Switch to an OS-independent XDR implementation for protocol evaluations --- include/lib/xdr.h | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 include/lib/xdr.h (limited to 'include/lib/xdr.h') diff --git a/include/lib/xdr.h b/include/lib/xdr.h new file mode 100644 index 0000000..c451a2f --- /dev/null +++ b/include/lib/xdr.h @@ -0,0 +1,66 @@ +#ifndef XDR_H +#define XDR_H + +#include + +class XDRWriter +{ +private: + XDRWriter(const XDRWriter ©); + char *buffer; + uint32_t next_array_len; + uint32_t pos; + bool is_fixed_length; + +public: + XDRWriter(char *output_buf) : buffer(output_buf), next_array_len(0), pos(0) {} + + inline void setNextArrayLen(uint32_t len) { next_array_len = len; } + inline void setFixedLength() { is_fixed_length = true; } + inline void setVariableLength() { is_fixed_length = false; } + inline void startList() + { + if (!is_fixed_length) + { + put(next_array_len); + } + } + + inline void put(char c) { put((int32_t)c); } + inline void put(unsigned char c) { put((uint32_t)c); } + inline void put(uint16_t number) { put((int32_t)number); } + inline void put(int16_t number) { put((uint32_t)number); } + void put(uint32_t number); + void put(int32_t number); + void put(uint64_t number); + void put(int64_t number); + void put(float number); + void put(double number); + void put(char const *text); + template + void put(char const (&text)[TSize]); + + inline uint32_t size() { return pos; } +}; + +class XDRReader +{ +private: + XDRReader(const XDRReader ©); + char *data; + uint32_t pos; + +public: + XDRReader(char *d) : pos(0) { data = d; } + uint32_t get_uint32(); + int32_t get_int32(); + uint64_t get_uint64(); + int64_t get_int64(); + float get_float(); + double get_double(); + uint32_t get_opaque_length(); + char *get_opaque(uint32_t length); + void get_string(char *target); +}; + +#endif -- cgit v1.2.3