Make UserSubscription as shared_ptr in Subscription

Currently UserSubscription are used as value in Subscription. This
causes the copy of the object between subscriptionsMap and
subscriptionConfigMap when doing PATCH.

Using a shared_ptr for UserSubscription avoids the memory copy of it.

Tested:

- Using Redfish Event Listener, test subscriptions and eventing.
- Redfish Service Validator passes

Change-Id: I5821b72f28ba737a5c9b75288d377766c84c6a6a
Signed-off-by: Myung Bae <myungbae@us.ibm.com>
diff --git a/redfish-core/lib/eventservice_sse.hpp b/redfish-core/lib/eventservice_sse.hpp
index 80c0a3a..8625c63 100644
--- a/redfish-core/lib/eventservice_sse.hpp
+++ b/redfish-core/lib/eventservice_sse.hpp
@@ -47,12 +47,19 @@
     std::shared_ptr<Subscription> subValue =
         std::make_shared<Subscription>(conn);
 
-    // GET on this URI means, Its SSE subscriptionType.
-    subValue->userSub.subscriptionType = redfish::subscriptionTypeSSE;
+    if (subValue->userSub == nullptr)
+    {
+        BMCWEB_LOG_ERROR("Subscription data is null");
+        conn.close("Internal Error");
+        return;
+    }
 
-    subValue->userSub.protocol = "Redfish";
-    subValue->userSub.retryPolicy = "TerminateAfterRetries";
-    subValue->userSub.eventFormatType = "Event";
+    // GET on this URI means, Its SSE subscriptionType.
+    subValue->userSub->subscriptionType = redfish::subscriptionTypeSSE;
+
+    subValue->userSub->protocol = "Redfish";
+    subValue->userSub->retryPolicy = "TerminateAfterRetries";
+    subValue->userSub->eventFormatType = "Event";
 
     std::string id = manager.addSSESubscription(subValue, lastEventId);
     if (id.empty())