libqrtr-glib: Add support for signaling addition/deletion of services.

During a modem crash, the node stays online, but the services are removed
and added back when the modem comes back online. Now to implement SSR we
need to detect these changes (Addition/deletion of services).
diff --git a/src/libqrtr-glib/qrtr-control-socket.c b/src/libqrtr-glib/qrtr-control-socket.c
index 63cac4b..a4dad46 100644
--- a/src/libqrtr-glib/qrtr-control-socket.c
+++ b/src/libqrtr-glib/qrtr-control-socket.c
@@ -42,6 +42,8 @@
 enum {
     SIGNAL_NODE_ADDED,
     SIGNAL_NODE_REMOVED,
+    SIGNAL_SERVICE_ADDED,
+    SIGNAL_SERVICE_REMOVED,
     SIGNAL_LAST
 };
 
@@ -77,6 +79,7 @@
     }
 
     __qrtr_node_add_service_info (node, service, port, version, instance);
+    g_signal_emit (self, signals[SIGNAL_SERVICE_ADDED], 0, node_id, service);
 }
 
 static void
@@ -96,6 +99,7 @@
     }
 
     __qrtr_node_remove_service_info (node, service, port, version, instance);
+    g_signal_emit (self, signals[SIGNAL_SERVICE_REMOVED], 0, node_id, service);
     if (!qrtr_node_has_services (node)) {
         g_debug ("[qrtr] removing node %u", node_id);
         g_signal_emit (self, signals[SIGNAL_NODE_REMOVED], 0, node_id);
@@ -380,4 +384,48 @@
                       G_TYPE_NONE,
                       1,
                       G_TYPE_UINT);
+
+    /**
+     * QrtrControlSocket::qrtr-service-added:
+     * @self: the #QrtrControlSocket
+     * @node: the node ID where service is added
+     * @service: the service ID of the service that has been added
+     *
+     * The ::qrtr-service-added signal is emitted when a new service registers
+     * on the QRTR bus.
+     */
+    signals[SIGNAL_SERVICE_ADDED] =
+        g_signal_new (QRTR_CONTROL_SOCKET_SIGNAL_SERVICE_ADDED,
+                      G_OBJECT_CLASS_TYPE (G_OBJECT_CLASS (klass)),
+                      G_SIGNAL_RUN_LAST,
+                      0,
+                      NULL,
+                      NULL,
+                      NULL,
+                      G_TYPE_NONE,
+                      2,
+                      G_TYPE_UINT,
+                      G_TYPE_UINT);
+
+    /**
+     * QrtrControlSocket::qrtr-service-removed:
+     * @self: the #QrtrControlSocket
+     * @node: the node ID where service is removed
+     * @service: the service ID of the service that was removed
+     *
+     * The ::qrtr-service-removed signal is emitted when a service deregisters
+     * from the QRTR bus.
+     */
+    signals[SIGNAL_SERVICE_REMOVED] =
+        g_signal_new (QRTR_CONTROL_SOCKET_SIGNAL_SERVICE_REMOVED,
+                      G_OBJECT_CLASS_TYPE (G_OBJECT_CLASS (klass)),
+                      G_SIGNAL_RUN_LAST,
+                      0,
+                      NULL,
+                      NULL,
+                      NULL,
+                      G_TYPE_NONE,
+                      2,
+                      G_TYPE_UINT,
+                      G_TYPE_UINT);
 }
diff --git a/src/libqrtr-glib/qrtr-control-socket.h b/src/libqrtr-glib/qrtr-control-socket.h
index 9dff727..beea9b8 100644
--- a/src/libqrtr-glib/qrtr-control-socket.h
+++ b/src/libqrtr-glib/qrtr-control-socket.h
@@ -83,6 +83,20 @@
 #define QRTR_CONTROL_SOCKET_SIGNAL_NODE_REMOVED "qrtr-node-removed"
 
 /**
+ * QRTR_CONTROL_SOCKET_SIGNAL_SERVICE_ADDED:
+ *
+ * Symbol defining the #QrtrControlSocket::qrtr-service-added signal.
+ */
+#define QRTR_CONTROL_SOCKET_SIGNAL_SERVICE_ADDED   "qrtr-service-added"
+
+/**
+ * QRTR_CONTROL_SOCKET_SIGNAL_SERVICE_REMOVED:
+ *
+ * Symbol defining the #QrtrControlSocket::qrtr-service-removed signal.
+ */
+#define QRTR_CONTROL_SOCKET_SIGNAL_SERVICE_REMOVED "qrtr-service-removed"
+
+/**
  * qrtr_control_socket_new:
  * @cancellable: optional #GCancellable object, #NULL to ignore.
  * @error: Return location for error or %NULL.