MME2 changes - Propped commits from openmme/paging branch. Added scripts
for code gen

Change-Id: Ie55032217232214ac8544ca76ea34335205329e4
diff --git a/scripts/GtpV2StackCodeGen/tts/msgEncode.tt b/scripts/GtpV2StackCodeGen/tts/msgEncode.tt
new file mode 100644
index 0000000..b1dcd54
--- /dev/null
+++ b/scripts/GtpV2StackCodeGen/tts/msgEncode.tt
@@ -0,0 +1,63 @@
+[% IF ieData.ieCardinality == 1 -%]
+
+    // Encode the Ie Header
+    header.ieType = [% ieData.ieType %]IeType;
+    header.instance = [% ieData.instance %];
+    header.length = 0; // We will encode the IE first and then update the length
+    GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
+    startIndex = buffer.getCurrentIndex(); 
+    [% ieData.ieType %]Ie [% ieData.ieLocalVar %]=
+    dynamic_cast<
+    [% ieData.ieType %]Ie&>(GtpV2IeFactory::getInstance().getIeObject([% ieData.ieType %]IeType));
+[% IF ieData.grouped == 'Yes'-%]
+    [% ieData.grpIeInstClassName %] groupedIeInstance =
+    dynamic_cast<
+     [% ieData.grpIeInstClassName %]&>([% ieData.ieLocalVar %].getGroupedIe(msgType, [% ieData.instance %]));
+    rc = groupedIeInstance.encode[% ieData.grpIeInstClassName %](buffer, data.[% ieData.ieVarName %]);
+[% ELSE -%]
+    rc = [% ieData.ieLocalVar %].encode[% ieData.ieType %]Ie(buffer, data.[% ieData.ieVarName %]);
+[% END -%]
+    endIndex = buffer.getCurrentIndex();
+    length = endIndex - startIndex;
+
+    // encode the length value now
+    buffer.goToIndex(startIndex - 3);
+    buffer.writeUint16(length, false);
+    buffer.goToIndex(endIndex);
+[% ELSE -%]
+    // First validate if the applicatoin provided more than the expected cardinality
+    if (data.[% ieData.ieVarName %]Count > [% ieData.ieCardinality %])
+    {
+        errorStream.add((char *)"Number of entries of [% ieData.ieVarName %] exceeded\n");
+        errorStream.add((char *)"Expected count: [% ieData.ieCardinality %] Received count: ");
+        errorStream.add((char *)"data.[% ieData.ieVarName %]Count");
+        errorStream.endOfLine();
+        return false;
+    }
+    for (Uint8 i = 0; i < data.[% ieData.ieVarName %]Count; i++)
+    {
+        // Encode the Ie Header
+        header.ieType = [% ieData.ieType %]IeType;
+        header.instance = [% ieData.instance %];
+        header.length = 0; // We will encode the IE first and then update the length
+        GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
+        startIndex = buffer.getCurrentIndex(); 
+        [% ieData.ieType %]Ie [% ieData.ieLocalVar %]=
+        dynamic_cast<
+        [% ieData.ieType %]Ie&>(GtpV2IeFactory::getInstance().
+        getIeObject([% ieData.ieType %]IeType));
+[% IF ieData.grouped == 'Yes'-%]
+        [% ieData.grpIeInstClassName %] groupedIeInstance = dynamic_cast<[% ieData.grpIeInstClassName %]&>([% ieData.ieLocalVar %].getGroupedIe(msgType, [% ieData.instance %]));
+        rc = groupedIeInstance.encode[% ieData.grpIeInstClassName %](buffer, data.[% ieData.ieVarName %][i]);
+[% ELSE -%]
+        rc = [% ieData.ieLocalVar %].encode[% ieData.ieType %]Ie(buffer, data.[% ieData.ieVarName %][i]);
+[% END -%]
+        endIndex = buffer.getCurrentIndex();
+        length = endIndex - startIndex;
+
+        // encode the length value now
+        buffer.goToIndex(startIndex - 3);
+        buffer.writeUint16(length, false);
+        buffer.goToIndex(endIndex);
+    }
+[% END -%]