Initialize transaction id

Initialize the transaction id in the code generated by the sdbusplus tool.
Generate a unique value if the transaction id has not been
initialized and a caller requests it. This is the scenario for
clients that have not made a dbus call yet and create journal
entries.

Change-Id: Ia7b926fd3f83963fac01fbd1ce4cdd59d2224008
Signed-off-by: Adriana Kobylak <anoo@us.ibm.com>
diff --git a/sdbusplus/server/transaction.hpp b/sdbusplus/server/transaction.hpp
index 0dbab5f..b4443c2 100644
--- a/sdbusplus/server/transaction.hpp
+++ b/sdbusplus/server/transaction.hpp
@@ -88,6 +88,12 @@
   */
 inline uint64_t get_id()
 {
+    // If the transaction id has not been initialized, generate one.
+    if (!details::id)
+    {
+        details::Transaction t;
+        details::id = std::hash<details::Transaction>{}(t);
+    }
     return details::id;
 }
 
diff --git a/tools/sdbusplus/templates/interface.mako.server.cpp b/tools/sdbusplus/templates/interface.mako.server.cpp
index 89fa2a9..aec8cfb 100644
--- a/tools/sdbusplus/templates/interface.mako.server.cpp
+++ b/tools/sdbusplus/templates/interface.mako.server.cpp
@@ -52,6 +52,14 @@
     try
     {
         auto m = message::message(reply);
+#ifndef DISABLE_TRANSACTION
+        {
+            auto tbus = m.get_bus();
+            sdbusplus::server::transaction::Transaction t(tbus, m);
+            sdbusplus::server::transaction::set_id
+                (std::hash<sdbusplus::server::transaction::Transaction>{}(t));
+        }
+#endif
 
         auto o = static_cast<${classname}*>(context);
         m.append(convertForMessage(o->${p.camelCase}()));
@@ -85,6 +93,14 @@
     try
     {
         auto m = message::message(value);
+#ifndef DISABLE_TRANSACTION
+        {
+            auto tbus = m.get_bus();
+            sdbusplus::server::transaction::Transaction t(tbus, m);
+            sdbusplus::server::transaction::set_id
+                (std::hash<sdbusplus::server::transaction::Transaction>{}(t));
+        }
+#endif
 
         auto o = static_cast<${classname}*>(context);
 
diff --git a/tools/sdbusplus/templates/method.mako.prototype.hpp b/tools/sdbusplus/templates/method.mako.prototype.hpp
index b58a2e3..0c4615e 100644
--- a/tools/sdbusplus/templates/method.mako.prototype.hpp
+++ b/tools/sdbusplus/templates/method.mako.prototype.hpp
@@ -128,6 +128,14 @@
         ### Need to add a ref to msg since we attached it to an
         ### sdbusplus::message.
         auto m = message::message(msg);
+#ifndef DISABLE_TRANSACTION
+        {
+            auto tbus = m.get_bus();
+            sdbusplus::server::transaction::Transaction t(tbus, m);
+            sdbusplus::server::transaction::set_id
+                (std::hash<sdbusplus::server::transaction::Transaction>{}(t));
+        }
+#endif
 
     % if len(method.parameters) != 0:
         ${parameters_as_local(as_param=False)}{};