This file is indexed.

/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