/usr/include/ns3.17/ns3/lte-asn1-header.h is in libns3-dev 3.17+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Lluis Parcerisa <lparcerisa@cttc.cat>
*/
#ifndef ASN1_HEADER_H
#define ASN1_HEADER_H
#include "ns3/header.h"
#include <bitset>
#include <string>
#include "ns3/lte-rrc-sap.h"
namespace ns3 {
/**
* This class has the purpose to encode Information Elements according
* to ASN.1 syntax, as defined in ITU-T X-691.
* IMPORTANT: The encoding is done following the UNALIGNED variant.
*/
class Asn1Header : public Header
{
public:
Asn1Header ();
virtual ~Asn1Header ();
// Inherited from ns3::Header base class
static TypeId GetTypeId (void);
virtual TypeId GetInstanceTypeId (void) const;
uint32_t GetSerializedSize (void) const;
void Serialize (Buffer::Iterator bIterator) const;
// Inherited from ns3::Header base class
// Pure virtual methods, to be implemented in child classes
virtual uint32_t Deserialize (Buffer::Iterator bIterator) = 0;
virtual void Print (std::ostream &os) const = 0;
/**
* This function serializes class attributes to m_serializationResult local Buffer.
* As ASN1 encoding produces a bitstream that does not have a fixed length,
* this function is needed to store the result, so its length can be retrieved
* with Header::GetSerializedSize() function.
* This method is pure virtual in this class (needs to be implemented in child classes)
* as the meningful information elements are in the subclasses.
*/
virtual void PreSerialize (void) const = 0;
protected:
mutable uint8_t m_serializationPendingBits;
mutable uint8_t m_numSerializationPendingBits;
mutable bool m_isDataSerialized;
mutable Buffer m_serializationResult;
// Function to write in m_serializationResult, after resizing its size
void WriteOctet (uint8_t octet) const;
// Serialization functions
void SerializeBoolean (bool value) const;
void SerializeInteger (int n, int nmin, int nmax) const;
void SerializeOctetstring (std::string s) const;
void SerializeSequenceOf (int numElems, int nMax, int nMin) const;
void SerializeChoice (int numOptions, int selectedOption, bool isExtensionMarkerPresent) const;
void SerializeEnum (int numElems, int selectedElem) const;
void SerializeNull () const;
void FinalizeSerialization () const;
template <int N>
void SerializeBitset (std::bitset<N> data) const;
template <int N>
void SerializeSequence (std::bitset<N> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<0> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<1> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<2> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<3> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<4> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<5> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<6> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<9> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<10> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
void SerializeSequence (std::bitset<11> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
template <int N>
void SerializeBitstring (std::bitset<N> bitstring) const;
void SerializeBitstring (std::bitset<1> bitstring) const;
void SerializeBitstring (std::bitset<2> bitstring) const;
void SerializeBitstring (std::bitset<8> bitstring) const;
void SerializeBitstring (std::bitset<10> bitstring) const;
void SerializeBitstring (std::bitset<16> bitstring) const;
void SerializeBitstring (std::bitset<27> bitstring) const;
void SerializeBitstring (std::bitset<28> bitstring) const;
void SerializeBitstring (std::bitset<32> bitstring) const;
// Deserialization functions
template <int N>
Buffer::Iterator DeserializeBitset (std::bitset<N> *data, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBitset (std::bitset<8> *data, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBoolean (bool *value, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeInteger (int *n, int nmin, int nmax, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeChoice (int numOptions, bool isExtensionMarkerPresent, int *selectedOption, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeEnum (int numElems, int *selectedElem, Buffer::Iterator bIterator);
template <int N>
Buffer::Iterator DeserializeSequence (std::bitset<N> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<0> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<1> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<2> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<3> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<4> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<5> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<6> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<9> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<10> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequence (std::bitset<11> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
template <int N>
Buffer::Iterator DeserializeBitstring (std::bitset<N> *bitstring, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBitstring (std::bitset<1> *bitstring, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBitstring (std::bitset<2> *bitstring, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBitstring (std::bitset<8> *bitstring, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBitstring (std::bitset<10> *bitstring, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBitstring (std::bitset<16> *bitstring, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBitstring (std::bitset<27> *bitstring, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBitstring (std::bitset<28> *bitstring, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeBitstring (std::bitset<32> *bitstring, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeNull (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSequenceOf (int *numElems, int nMax, int nMin, Buffer::Iterator bIterator);
};
} // namespace ns3
#endif // ASN1_HEADER_H
|