MQTT_Server component bugfixes

Signed-off-by: eantwuh <antal.wu-hen-chang@ericsson.com>
diff --git a/IFW_MQTT_Server_Functions.ttcn b/IFW_MQTT_Server_Functions.ttcn
index 2e92e95..3f927c5 100644
--- a/IFW_MQTT_Server_Functions.ttcn
+++ b/IFW_MQTT_Server_Functions.ttcn
@@ -67,10 +67,58 @@
   {
     ctx := p_ctx;
   }
+  
+  function f_MQTT_getPacketId(in MQTT_v3_1_1_ReqResp p_msg)
+  return integer
+  {
+         if (ischosen(p_msg.publish))     { return p_msg.publish.packet_identifier }
+    else if (ischosen(p_msg.puback))      { return p_msg.puback.packet_identifier }
+    else if (ischosen(p_msg.pubrec))      { return p_msg.pubrec.packet_identifier }
+    else if (ischosen(p_msg.pubrel))      { return p_msg.pubrel.packet_identifier }
+    else if (ischosen(p_msg.pubcomp))     { return p_msg.pubcomp.packet_identifier }
+    else if (ischosen(p_msg.subscribe))   { return p_msg.subscribe.packet_identifier }
+    else if (ischosen(p_msg.suback))      { return p_msg.suback.packet_identifier }
+    else if (ischosen(p_msg.unsubscribe)) { return p_msg.unsubscribe.packet_identifier }
+    else if (ischosen(p_msg.unsuback))    { return p_msg.unsuback.packet_identifier }
+    else {
+      return -1;
+    }
+  }
+  
+  function f_MQTT_setPacketId(inout MQTT_v3_1_1_ReqResp p_msg, integer p_id)
+  return boolean
+  {
+         if (ischosen(p_msg.publish))     { p_msg.publish.packet_identifier := p_id; }
+    else if (ischosen(p_msg.puback))      { p_msg.puback.packet_identifier := p_id; }
+    else if (ischosen(p_msg.pubrec))      { p_msg.pubrec.packet_identifier := p_id; }
+    else if (ischosen(p_msg.pubrel))      { p_msg.pubrel.packet_identifier := p_id; }
+    else if (ischosen(p_msg.pubcomp))     { p_msg.pubcomp.packet_identifier := p_id; }
+    else if (ischosen(p_msg.subscribe))   { p_msg.subscribe.packet_identifier := p_id; }
+    else if (ischosen(p_msg.suback))      { p_msg.suback.packet_identifier := p_id; }
+    else if (ischosen(p_msg.unsubscribe)) { p_msg.unsubscribe.packet_identifier := p_id; }
+    else if (ischosen(p_msg.unsuback))    { p_msg.unsuback.packet_identifier := p_id; }
+    else { return false; }
+    
+    return true;
+  }
 	
-  function f_MQTT_Server_setMessageToSend(in MQTT_v3_1_1_ReqResp p_msg) runs on IFW_MQTT_Server_CT
+  function f_MQTT_Server_setMessageToSend(in MQTT_v3_1_1_ReqResp p_msg, boolean p_msgIdFromLastReceived := false) runs on IFW_MQTT_Server_CT
   {
     msgToSend := p_msg;
+
+    if (p_msgIdFromLastReceived)
+    {
+      var integer lastReceivedPacketId := f_MQTT_getPacketId(lastReceived);
+      
+      if (lastReceivedPacketId != -1)
+      {
+        if (not f_MQTT_setPacketId(msgToSend, lastReceivedPacketId))
+	{
+	  log("MQTT_Server: couldn't set packet id in msgToSend: ", msgToSend)
+	}
+      }
+      else { log("MQTT_Server: couldn't fetch packet id from lastReceived: ",lastReceived) };
+    }
   }	
 	
   function f_MQTT_Server_send() runs on IFW_MQTT_Server_CT
diff --git a/IFW_MQTT_Server_TestSteps.ttcn b/IFW_MQTT_Server_TestSteps.ttcn
index d2e97ec..0da01a0 100644
--- a/IFW_MQTT_Server_TestSteps.ttcn
+++ b/IFW_MQTT_Server_TestSteps.ttcn
@@ -75,14 +75,14 @@
     return true;
   }	
 	
-  function f_IFW_MqttServer_setMessageToSend(in integer p_serverIdx, MQTT_v3_1_1_ReqResp p_msg) runs on IFW_MAIN_CT
+  function f_IFW_MqttServer_setMessageToSend(in integer p_serverIdx, MQTT_v3_1_1_ReqResp p_msg, boolean p_msgIdFromLastReceived := false) runs on IFW_MAIN_CT
   return boolean
   {
     var IFW_MQTT_Server_CT v_server := mqttServers[p_serverIdx];	  
     if (v_server == null) { log("IFW: No MQTT server found"); return false; }	  
     f_isRunningGuard(v_server);
 
-    v_server.start(f_MQTT_Server_setMessageToSend(p_msg));
+    v_server.start(f_MQTT_Server_setMessageToSend(p_msg, p_msgIdFromLastReceived));
     v_server.done;
 
     return true;