src/lte/model/lte-rrc-header.cc
changeset 9509 4c25580103bd
parent 9508 c230119063ad
child 9573 0243c2781970
--- a/src/lte/model/lte-rrc-header.cc	Wed Dec 12 17:24:54 2012 +0100
+++ b/src/lte/model/lte-rrc-header.cc	Wed Dec 12 18:17:10 2012 +0100
@@ -3282,6 +3282,111 @@
   return m_rrcConnectionRelease;
 }
 
+//////////////////// RrcConnectionRejectHeader class ////////////////////////
+
+RrcConnectionRejectHeader::RrcConnectionRejectHeader ()
+{
+}
+
+void
+RrcConnectionRejectHeader::PreSerialize () const
+{
+  m_serializationResult = Buffer ();
+
+  // Serialize CCCH message
+  SerializeDlCcchMessage (2);
+
+  // Serialize RrcConnectionReject sequence:
+  // no default or optional fields. Extension marker not present.
+  SerializeSequence (std::bitset<0> (),false);
+
+  // Serialize criticalExtensions choice
+  SerializeChoice (2,0);
+
+  // Serialize c1 choice
+  SerializeChoice (4,0);
+  
+  // Serialize rrcConnectionReject-r8 sequence
+  // 1 optional field (not present), no extension marker.
+  SerializeSequence (std::bitset<1> (0),false);
+
+  // Serialize waitTime
+  SerializeInteger (m_rrcConnectionReject.waitTime, 1, 16);
+
+  // Finish serialization
+  FinalizeSerialization ();
+}
+
+uint32_t
+RrcConnectionRejectHeader::Deserialize (Buffer::Iterator bIterator)
+{
+  std::bitset<0> bitset0;
+  int n;
+
+  bIterator = DeserializeDlCcchMessage (bIterator);
+
+  // Deserialize RrcConnectionReject sequence
+  // 0 optional fields, no extension marker
+  bIterator = DeserializeSequence (&bitset0,false,bIterator);
+
+  // Deserialize criticalExtensions choice
+  int criticalExtensionsChoice;
+  bIterator = DeserializeChoice (2,&criticalExtensionsChoice,bIterator);
+  if (criticalExtensionsChoice == 1)
+    {
+      // Deserialize criticalExtensionsFuture
+      bIterator = DeserializeSequence (&bitset0,false,bIterator);
+    }
+  else if (criticalExtensionsChoice == 0)
+    {
+      // Deserialize c1 choice
+      int c1Choice;
+      bIterator = DeserializeChoice (4,&c1Choice,bIterator);
+
+      if (c1Choice > 0)
+      {
+        bIterator = DeserializeNull(bIterator);
+      }
+      else if (c1Choice == 0)
+      {
+        // Deserialize rrcConnectionReject-r8
+        std::bitset<1> opts;
+        bIterator = DeserializeSequence (&opts,false,bIterator);
+        
+        bIterator = DeserializeInteger (&n,1,16,bIterator);
+        m_rrcConnectionReject.waitTime = n;
+
+        if (opts[0])
+        {
+          // Deserialize RRCConnectionReject-v8a0-IEs
+          // ...
+        }
+      }
+    }
+
+  return GetSerializedSize ();
+}
+
+void
+RrcConnectionRejectHeader::Print (std::ostream &os) const
+{
+  os << "wait time: " << (int)m_rrcConnectionReject.waitTime << std::endl;
+}
+
+void
+RrcConnectionRejectHeader::SetMessage (RrcConnectionReject msg)
+{
+  m_rrcConnectionReject = msg;
+  m_isDataSerialized = false;
+}
+
+LteRrcSap::RrcConnectionReject
+RrcConnectionRejectHeader::GetMessage () const
+{
+  return m_rrcConnectionReject;
+}
+
+
 ///////////////////  RrcUlDcchMessage //////////////////////////////////
 uint32_t
 RrcUlDcchMessage::Deserialize (Buffer::Iterator bIterator)