[Push] Fixing disconnect method 27/93427/3
authorPiotr Kosko <p.kosko@samsung.com>
Mon, 24 Oct 2016 08:33:59 +0000 (10:33 +0200)
committerHyunjin Park <hj.na.park@samsung.com>
Tue, 1 Nov 2016 08:48:10 +0000 (01:48 -0700)
[Feature] Now disconnect method really disconnects from push server

[Verification] TCT passrate didn't change.

Change-Id: I18fe628e62dd4d2528e4278b5b6dec6143cde4e8
Signed-off-by: Piotr Kosko <p.kosko@samsung.com>
src/push/push_manager_old.cc
src/push/push_manager_old.h

index e9a20918a6c43c3288b2f375b555d599d83e961b..b9fa0e25ba6e93488d1d8a604831d285907f3a72 100644 (file)
@@ -33,6 +33,18 @@ namespace push {
 using common::PlatformResult;
 using common::ErrorCode;
 
+#define CHECK_CONNECTION() \
+  if (!m_handle) { \
+    int ret = push_service_connect(m_pkgId.c_str(), onPushState, onPushNotify, this, \
+                                   &m_handle);\
+    if (ret != PUSH_SERVICE_ERROR_NONE) { \
+      LoggerE("Failed to connect to push (%d)", ret);\
+    }\
+    m_state = PUSH_SERVICE_STATE_UNREGISTERED;\
+    m_ignoreNotificationEvents = true;\
+  }
+
+
 PushManagerOld::PushManagerOld(EventListener* listener) :
     IPushManager(listener),
     m_state(PUSH_SERVICE_STATE_UNREGISTERED),
@@ -51,19 +63,27 @@ PushManagerOld::~PushManagerOld() {
 
 PlatformResult PushManagerOld::connectService() {
   LoggerD("Enter");
+  CHECK_CONNECTION();
   m_ignoreNotificationEvents = false;
   return common::PlatformResult(ErrorCode::NO_ERROR);
 }
 
 PlatformResult PushManagerOld::disconnectService() {
   LoggerD("Enter");
-  m_ignoreNotificationEvents = true;
+  // disconnecting from push server
+  if (m_handle) {
+    push_service_disconnect(m_handle);
+    m_handle = nullptr;
+    m_state = PUSH_SERVICE_STATE_UNREGISTERED;
+    m_ignoreNotificationEvents = true;
+  }
   return common::PlatformResult(ErrorCode::NO_ERROR);
 }
 
 
 PlatformResult PushManagerOld::registerApplication(double callbackId) {
   LoggerD("Enter");
+  CHECK_CONNECTION();
 
   PushManagerHolder* holder = new PushManagerHolder{this, callbackId};
 
@@ -77,12 +97,27 @@ PlatformResult PushManagerOld::registerApplication(double callbackId) {
   return common::PlatformResult(ErrorCode::NO_ERROR);
 }
 
+bool PushManagerOld::checkRegistered() {
+    LoggerD("Enter");
+    bool result = false;
+    char* temp = NULL;
+    int ret = push_service_get_registration_id(m_handle, &temp);
+    if (ret != PUSH_SERVICE_ERROR_NONE) {
+        return result;
+    }
+    result = (NULL != temp ? true : false);
+    free(temp);
+    return result;
+}
+
+
 common::PlatformResult PushManagerOld::unregisterApplication(double callbackId) {
     LoggerD("Enter");
+    CHECK_CONNECTION();
     PushManagerHolder* holder = new PushManagerHolder{this, callbackId};
 
-    if (m_state == PUSH_SERVICE_STATE_UNREGISTERED) {
-        LoggerD("Already unregister, call unregister callback");
+    if (!checkRegistered()) {
+        LoggerD("Already unregistered, call unregister callback");
         if (!g_idle_add(onFakeDeregister, holder)) {
             delete holder;
             return LogAndCreateResult(ErrorCode::UNKNOWN_ERR,
@@ -111,6 +146,7 @@ common::PlatformResult PushManagerOld::unregisterApplication(double callbackId)
 
 common::PlatformResult PushManagerOld::getRegistrationId(std::string& id) {
     LoggerD("Enter");
+    CHECK_CONNECTION();
     char* temp = NULL;
     int ret = push_service_get_registration_id(m_handle, &temp);
     if (ret != PUSH_SERVICE_ERROR_NONE) {
@@ -132,6 +168,7 @@ common::PlatformResult PushManagerOld::getRegistrationId(std::string& id) {
 
 common::PlatformResult PushManagerOld::getUnreadNotifications() {
     LoggerD("Enter");
+    CHECK_CONNECTION();
     int ret = push_service_request_unread_notification(m_handle);
     if (ret != PUSH_SERVICE_ERROR_NONE) {
         return LogAndCreateResult(ErrorCode::UNKNOWN_ERR,
@@ -143,6 +180,7 @@ common::PlatformResult PushManagerOld::getUnreadNotifications() {
 
 PlatformResult PushManagerOld::getPushMessage(picojson::value* out) {
   LoggerD("Enter");
+  CHECK_CONNECTION();
 
   push_service_notification_h handle = nullptr;
   int ret = push_service_app_control_to_notification(app_control_, operation_,
index 9c9deb7c96bf9bde4bad894596169866f0053a93..4ff45a81c8fcf733c964420dd4ae356f821a1380 100644 (file)
@@ -45,6 +45,7 @@ class PushManagerOld : public IPushManager {
     static common::ErrorCode ConvertPushError(int e);
 
  private:
+    bool checkRegistered();
     static void onPushState(push_service_state_e state, const char *err,
         void *user_data);
     static void onPushNotify(push_service_notification_h noti, void *user_data);