RLCMAC: Fix encoding/decoding of 'union' types
We must supply hand-written C++ functions for encoding/decoding
the union types.
diff --git a/library/RLCMAC_EncDec.cc b/library/RLCMAC_EncDec.cc
index b2f0525..1129ae1 100644
--- a/library/RLCMAC_EncDec.cc
+++ b/library/RLCMAC_EncDec.cc
@@ -261,5 +261,48 @@
return ret_val;
}
+OCTETSTRING enc__RlcmacUlBlock(const RlcmacUlBlock& si)
+{
+ if (si.ischosen(RlcmacUlBlock::ALT_data))
+ return enc__RlcmacUlDataBlock(si.data());
+ else
+ return enc__RlcmacUlCtrlBlock(si.ctrl());
+}
+
+OCTETSTRING enc__RlcmacDlBlock(const RlcmacDlBlock& si)
+{
+ if (si.ischosen(RlcmacDlBlock::ALT_data))
+ return enc__RlcmacDlDataBlock(si.data());
+ else
+ return enc__RlcmacDlCtrlBlock(si.ctrl());
+}
+
+
+RlcmacUlBlock dec__RlcmacUlBlock(const OCTETSTRING& stream)
+{
+ RlcmacUlBlock ret_val;
+ unsigned char pt = stream[0].get_octet() >> 6;
+
+ if (pt == MacPayloadType::MAC__PT__RLC__DATA)
+ ret_val.data() = dec__RlcmacUlDataBlock(stream);
+ else
+ ret_val.ctrl() = dec__RlcmacUlCtrlBlock(stream);
+
+ return ret_val;
+}
+
+RlcmacDlBlock dec__RlcmacDlBlock(const OCTETSTRING& stream)
+{
+ RlcmacDlBlock ret_val;
+ unsigned char pt = stream[0].get_octet() >> 6;
+
+ if (pt == MacPayloadType::MAC__PT__RLC__DATA)
+ ret_val.data() = dec__RlcmacDlDataBlock(stream);
+ else
+ ret_val.ctrl() = dec__RlcmacDlCtrlBlock(stream);
+
+ return ret_val;
+}
+
} // namespace