Fixed callback issue for push.
authoreh1112.kim <eh1112.kim@samsung.com>
Thu, 4 Jul 2013 05:13:42 +0000 (14:13 +0900)
committereh1112.kim <eh1112.kim@samsung.com>
Fri, 5 Jul 2013 07:27:44 +0000 (16:27 +0900)
Change-Id: Ib7885264bc1c9108d0886221161d5b9b2ad9c88b
Signed-off-by: eh1112.kim <eh1112.kim@samsung.com>
src/FMsg_PushManagerImpl.cpp
src/FMsg_PushManagerImpl.h
src/FMsg_PushRequest.cpp [changed mode: 0644->0755]
src/FMsg_PushRequest.h [changed mode: 0644->0755]
src/FMsg_PushSendListener.cpp
src/FMsg_PushSendListener.h [changed mode: 0644->0755]
src/FMsg_PushUrlRequestListener.cpp
src/FMsg_PushUrlRequestListener.h [changed mode: 0644->0755]

index 85b5fdc..9672870 100755 (executable)
@@ -334,12 +334,6 @@ _PushManagerImpl::~_PushManagerImpl(void)
                __pBody = null;
        }
 
-       if (__pTransaction != null)
-       {
-               delete __pTransaction;
-               __pTransaction = null;
-       }
-
        if (__pSession != null)
        {
                delete __pSession;
@@ -1087,7 +1081,7 @@ _PushManagerImpl::GetAppSecret(void) const
 }
 
 result
-_PushManagerImpl::GetUrlFromRegistrationId(const String& registrationId, const _PushRequest* pRequest, const PushMessage& pushMessage, const IList& registrationIdList, String& url)
+_PushManagerImpl::GetUrlFromRegistrationId(const String& registrationId, _PushRequest* pRequest, const PushMessage& pushMessage, const IList& registrationIdList, String& url)
 {
        SysLog(NID_MSG, "The GetUrlFromRegistrationId is entering.");
 
@@ -1133,6 +1127,7 @@ _PushManagerImpl::GetUrlFromRegistrationId(const String& registrationId, const _
                SysLog(NID_MSG, "Region : China");
                url = "https://apchina.push.samsungosp.com.cn:8088/spp/pns/api/push";
        }
+
        else if (prefix.Equals("7c", false))
        {
                SysLog(NID_MSG, "Region : Staging");
@@ -1162,7 +1157,7 @@ _PushManagerImpl::GetUrlFromRegistrationId(const String& registrationId, const _
 }
 
 result
-_PushManagerImpl::QueryServerUrl(const String& prefix, const _PushRequest* pRequest, const PushMessage& pushMessage, const IList& registrationIdList)
+_PushManagerImpl::QueryServerUrl(const String& prefix, _PushRequest* pRequest, const PushMessage& pushMessage, const IList& registrationIdList)
 {
        SysLog(NID_MSG, "The QueryServerUrl is entering.");
 
@@ -1220,8 +1215,6 @@ _PushManagerImpl::QueryServerUrl(const String& prefix, const _PushRequest* pRequ
                pRegistrationIdList->Add(*pTemStr);
        }
 
-       __pUrlListener->SetParams(pRequest);
-
        r = __pTransaction->AddHttpTransactionListener(*__pUrlListener);
        r = TransExceptionsExclusive(r, E_SYSTEM, E_OUT_OF_MEMORY);
        SysTryCatch(NID_MSG, r == E_SUCCESS, , r, "[%s] Failed to add http transaction listener.", GetErrorMessage(r));
@@ -1249,7 +1242,7 @@ _PushManagerImpl::QueryServerUrl(const String& prefix, const _PushRequest* pRequ
        r = __pRequest->SetEntity(*pHttpUrlEncodedEntity);
        SysTryCatch(NID_MSG, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[%s] Failed to set entity into the http url encoded entity.", GetErrorMessage(r));
 
-       pUserData = new (std::nothrow) _UserData(pHttpUrlEncodedEntity, pPushMessage, pRegistrationIdList);
+       pUserData = new (std::nothrow) _UserData(pHttpUrlEncodedEntity, pPushMessage, pRequest, pRegistrationIdList);
        SysTryCatch(NID_MSG, pUserData != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
 
        r = __pTransaction->SetUserObject(pUserData);
@@ -1287,7 +1280,7 @@ CATCH:
 }
 
 result
-_PushManagerImpl::SendHttpRequest(const String& url, const _PushRequest* pRequest, const PushMessage& pushMessage, const IList& registrationIdList)
+_PushManagerImpl::SendHttpRequest(const String& url, _PushRequest* pRequest, const PushMessage& pushMessage, const IList& registrationIdList)
 {
        SysLog(NID_MSG, "The SendHttpRequest is entering.");
 
@@ -1299,6 +1292,7 @@ _PushManagerImpl::SendHttpRequest(const String& url, const _PushRequest* pReques
        String lengthAsString(L"");
        PackageId packageId(L"");
        String appSecret(L"");
+       _SendUserData* pUserData = null;
 
        r = uri.SetUri(url);
        r = TransExceptionsExclusive(r, E_SYSTEM, E_OUT_OF_MEMORY);
@@ -1321,8 +1315,6 @@ _PushManagerImpl::SendHttpRequest(const String& url, const _PushRequest* pReques
        r = __pTransaction->SetTimeout(timeout);
        SysTryCatch(NID_MSG, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[%s] Failed to set timeout.", GetErrorMessage(r));
 
-       __pListener->SetParams(pRequest);
-
        r = __pTransaction->AddHttpTransactionListener(*__pListener);
        r = TransExceptionsExclusive(r, E_SYSTEM, E_OUT_OF_MEMORY);
        SysTryCatch(NID_MSG, r == E_SUCCESS, , r, "[%s] Failed to add http transaction listener.", GetErrorMessage(r));
@@ -1368,6 +1360,12 @@ _PushManagerImpl::SendHttpRequest(const String& url, const _PushRequest* pReques
        r = __pRequest->WriteBody(*__pBody);
        SysTryCatch(NID_MSG, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[%s] Failed to write body into the http request.", GetErrorMessage(r));
 
+       pUserData = new (std::nothrow) _SendUserData(pRequest);
+       SysTryCatch(NID_MSG, pUserData != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+       r = __pTransaction->SetUserObject(pUserData);
+       SysTryCatch(NID_MSG, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[%s] Failed to set user object the http transaction.", GetErrorMessage(r));
+
        r = __pTransaction->Submit();
        r = TransExceptionsExclusive(r, E_SYSTEM, E_OUT_OF_MEMORY);
        SysTryCatch(NID_MSG, r == E_SUCCESS, , r, "[%s] Failed to submit for http transaction.", GetErrorMessage(r));
@@ -1377,6 +1375,11 @@ _PushManagerImpl::SendHttpRequest(const String& url, const _PushRequest* pReques
        return r;
 
 CATCH:
+       if(pUserData)
+       {
+               delete pUserData;
+               pUserData = null;
+       }
        if (__pBody)
        {
                delete __pBody;
@@ -1671,7 +1674,7 @@ _PushManagerImpl::RequestPushUnregistration(const _PushRequest* pRequest)
 }
 
 result
-_PushManagerImpl::RequestPushSendMessageSingle(const _PushRequest* pRequest, const PushMessage& pushMessage, const String& registrationId)
+_PushManagerImpl::RequestPushSendMessageSingle(_PushRequest* pRequest, const PushMessage& pushMessage, const String& registrationId)
 {
        SysLog(NID_MSG, "The RequestPushSendMessageSingle is entering.");
 
@@ -1699,7 +1702,7 @@ _PushManagerImpl::RequestPushSendMessageSingle(const _PushRequest* pRequest, con
 }
 
 result
-_PushManagerImpl::RequestPushSendMessageMultiple(const _PushRequest* pRequest, const PushMessage& pushMessage, const IList& registrationIdList)
+_PushManagerImpl::RequestPushSendMessageMultiple(_PushRequest* pRequest, const PushMessage& pushMessage, const IList& registrationIdList)
 {
        SysLog(NID_MSG, "The RequestPushSendMessageMultiple is entering.");
 
@@ -1913,5 +1916,4 @@ _PushManagerImpl::UpdatePushServerUrl(String& url)
                r = reg.Flush();
        }
 }
-
 } } // Osp::Messaging
index dc4d2c3..0291c99 100755 (executable)
@@ -179,9 +179,9 @@ public:
        void CheckNextRequest(void);
 
        Tizen::Base::String GetAppSecret(void) const;
-       result GetUrlFromRegistrationId(const Tizen::Base::String& registrationId, const _PushRequest* pRequest, const PushMessage& pushMessage, const Tizen::Base::Collection::IList& registrationIdList, Tizen::Base::String& url);
-       result QueryServerUrl(const Tizen::Base::String& prefix, const _PushRequest* pRequest, const PushMessage& pushMessage, const Tizen::Base::Collection::IList& registrationIdList);
-       result SendHttpRequest(const Tizen::Base::String& url, const _PushRequest* pRequest, const PushMessage& pushMessage, const Tizen::Base::Collection::IList& registrationIdList);
+       result GetUrlFromRegistrationId(const Tizen::Base::String& registrationId, _PushRequest* pRequest, const PushMessage& pushMessage, const Tizen::Base::Collection::IList& registrationIdList, Tizen::Base::String& url);
+       result QueryServerUrl(const Tizen::Base::String& prefix, _PushRequest* pRequest, const PushMessage& pushMessage, const Tizen::Base::Collection::IList& registrationIdList);
+       result SendHttpRequest(const Tizen::Base::String& url, _PushRequest* pRequest, const PushMessage& pushMessage, const Tizen::Base::Collection::IList& registrationIdList);
        result ComposeJsonObject(const _PushRequest* pRequest, const PushMessage& pushMessage, const Tizen::Base::Collection::IList& registrationIdList, Tizen::Base::ByteBuffer& buffer) const;
 
 private:
@@ -190,8 +190,8 @@ private:
 private:
        result RequestPushRegistration(const _PushRequest* pRequest);
        result RequestPushUnregistration(const _PushRequest* pRequest);
-       result RequestPushSendMessageSingle(const _PushRequest* pRequest, const PushMessage& message, const Tizen::Base::String& registrationId);
-       result RequestPushSendMessageMultiple(const _PushRequest* pRequest, const PushMessage& message, const Tizen::Base::Collection::IList& registrationIdList);
+       result RequestPushSendMessageSingle(_PushRequest* pRequest, const PushMessage& message, const Tizen::Base::String& registrationId);
+       result RequestPushSendMessageMultiple(_PushRequest* pRequest, const PushMessage& message, const Tizen::Base::Collection::IList& registrationIdList);
 
        bool GetLastPushStatus(void) const;
        void UpdateLastPushStatus(bool value);
old mode 100644 (file)
new mode 100755 (executable)
index 4f3cb76..06e69ce
@@ -20,7 +20,7 @@
  *
  * This file contains implementation of _PushRequest class.
  */
-
+#include <FBaseSysLog.h>
 #include "FMsg_PushManagerImpl.h"
 #include "FMsg_PushRequest.h"
 
@@ -33,6 +33,7 @@ _PushRequest::_PushRequest(_PushManagerImpl* pPushManager, RequestId reqId, _Pus
        : __pPushManager(pPushManager)
        , __reqId(reqId)
        , __type(type)
+       , __refCount(0)
 {
 }
 
@@ -58,4 +59,24 @@ _PushRequest::GetType(void) const
        return __type;
 }
 
+void
+_PushRequest::AddRef(void)
+{
+       __refCount++;
+       SysLog(NID_MSG, "The reference count is %d", __refCount);
+}
+
+void
+_PushRequest::Release(void)
+{
+       __refCount--;
+       SysLog(NID_MSG, "The reference count is %d", __refCount);
+
+       if(__refCount == 0)
+       {
+               SysLog(NID_MSG,"The reference count is 0, so delete _PushRequest");
+               delete this;
+       }
+}
+
 } } // Tizen::Messaging
old mode 100644 (file)
new mode 100755 (executable)
index f211cb4..45f7c34
@@ -48,6 +48,8 @@ public:
        _PushManagerImpl* GetPushManager(void) const;
        RequestId GetRequestId(void) const;
        _PushRequestType GetType(void) const;
+       void AddRef(void);
+       void Release(void);
 
 private:
        _PushRequest(void);
@@ -58,6 +60,7 @@ private:
        _PushManagerImpl* __pPushManager;
        RequestId __reqId;
        _PushRequestType __type;
+       int __refCount;
 }; // _PushRequest
 
 } } // Tizen::Messaging
index bc70448..8c95d2b 100755 (executable)
@@ -41,13 +41,12 @@ namespace Tizen { namespace Messaging
 {
 
 _PushSendListener::_PushSendListener(void)
-       : __pPushRequest(null)
 {
 }
 
 _PushSendListener::~_PushSendListener(void)
 {
-       __pPushRequest = null;
+
 }
 
 void
@@ -67,15 +66,19 @@ _PushSendListener::OnTransactionAborted(HttpSession& httpSession, HttpTransactio
        String errorCode(L"");
        String errorMsg(L"");
 
-       pManager = __pPushRequest->GetPushManager();
+       _SendUserData* pUserData = dynamic_cast<_SendUserData*> (httpTransaction.GetUserObject());
+       SysTryReturnVoidResult(NID_MSG, pUserData != null, E_SYSTEM, "[E_SYSTEM] Failed to cast user data.");
+
+       pManager = (pUserData->GetPushRequest())->GetPushManager();
        SysTryReturnVoidResult(NID_MSG, pManager != null, E_SYSTEM, "[E_SYSTEM] A _PushManagerImpl is NULL.");
 
-       if (__pPushRequest->GetType() == _PUSH_REQUEST_SEND)
+       if ((pUserData->GetPushRequest())->GetType() == _PUSH_REQUEST_SEND)
        {
                // Push Send Message Request
-               pManager->HandlePushSendMessageResponse(__pPushRequest->GetRequestId(), pManager->GetRegistrationId(), res, errorCode, errorMsg);
+               pManager->HandlePushSendMessageResponse((pUserData->GetPushRequest())->GetRequestId(), pManager->GetRegistrationId(), res, errorCode, errorMsg);
        }
 
+       delete pUserData;
        delete &httpTransaction;
 }
 
@@ -99,6 +102,9 @@ _PushSendListener::OnTransactionCompleted(HttpSession& httpSession, HttpTransact
        HttpResponse* pResponse = httpTransaction.GetResponse();
        SysTryReturnVoidResult(NID_MSG, pResponse != null, E_SYSTEM, "[E_SYSTEM] HttpResponse is invalid.");
 
+       _SendUserData* pUserData = dynamic_cast<_SendUserData*> (httpTransaction.GetUserObject());
+       SysTryReturnVoidResult(NID_MSG, pUserData != null, E_SYSTEM, "[E_SYSTEM] Failed to cast user data.");
+
        result r = E_SUCCESS;
        _PushManagerImpl* pManager = null;
        String registrationId(L"");
@@ -175,7 +181,7 @@ _PushSendListener::OnTransactionCompleted(HttpSession& httpSession, HttpTransact
                SysLog(NID_MSG, "The current value of errorCode is %ls.", errorCode.GetPointer());
                SysLog(NID_MSG, "The current value of errorMsg is %ls.", errorMsg.GetPointer());
 
-               pManager = __pPushRequest->GetPushManager();
+               pManager = (pUserData->GetPushRequest())->GetPushManager();
                SysTryCatch(NID_MSG, pManager != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A _PushManagerImpl is NULL.");
 
                if (pResponse->GetHttpStatusCode() != HTTP_STATUS_OK)
@@ -219,15 +225,18 @@ _PushSendListener::OnTransactionCompleted(HttpSession& httpSession, HttpTransact
                        }
                }
 
-               if (__pPushRequest->GetType() == _PUSH_REQUEST_SEND)
+               if ((pUserData->GetPushRequest())->GetType() == _PUSH_REQUEST_SEND)
                {
                        // Push Send Message Request
-                       pManager->HandlePushSendMessageResponse(__pPushRequest->GetRequestId(), registrationId, r, errorCode, errorMsg);
+                       pManager->HandlePushSendMessageResponse((pUserData->GetPushRequest())->GetRequestId(), registrationId, r, errorCode, errorMsg);
+
                }
        }
 
        delete pBody;
        delete pJsonVal;
+       delete pUserData;
+       delete &httpTransaction;
 
        return;
 
@@ -244,6 +253,12 @@ CATCH:
                pJsonVal = null;
        }
 
+       if (pUserData)
+       {
+               delete pUserData;
+               pUserData = null;
+       }
+
        return;
 }
 
@@ -260,10 +275,21 @@ _PushSendListener::OnTransactionCertVerificationRequiredN(HttpSession& httpSessi
        return;
 }
 
-void
-_PushSendListener::SetParams(const _PushRequest* pPushRequestSet)
+_SendUserData::_SendUserData(_PushRequest* pPushRequest)
+       : __pPushRequest(pPushRequest)
+{
+       __pPushRequest->AddRef();
+}
+
+_SendUserData::~_SendUserData(void)
+{
+       __pPushRequest->Release();
+}
+
+_PushRequest*
+_SendUserData::GetPushRequest(void)
 {
-       __pPushRequest = pPushRequestSet;
+       return __pPushRequest;
 }
 
 } } // Tizen::Messaging
old mode 100644 (file)
new mode 100755 (executable)
index 3f40ebd..1b4dded
@@ -53,16 +53,30 @@ public:
 
        void OnTransactionCertVerificationRequiredN(Tizen::Net::Http::HttpSession& httpSession, Tizen::Net::Http::HttpTransaction& httpTransaction, Tizen::Base::String* pCert);
 
-       void SetParams(const _PushRequest* pPushRequestSet);
-
 private:
        _PushSendListener(const _PushSendListener& rhs);
        _PushSendListener& operator =(const _PushSendListener& rhs);
 
+};
+
+// _PushSendListener
+class _SendUserData
+       : public Tizen::Base::Object
+{
+public:
+               _SendUserData(_PushRequest *pPushRequest);
+               virtual ~_SendUserData(void);
+
+public:
+               _PushRequest* GetPushRequest(void);
+
 private:
-       const _PushRequest* __pPushRequest;
+               _SendUserData(const _SendUserData& rhs);
+               _SendUserData& operator =(const _SendUserData& rhs);
 
-}; // _PushSendListener
+private:
+       _PushRequest* __pPushRequest;
+ };    // _UserData
 
 } } // Tizen::Messaging
 
index 6db0c3f..0d50b32 100755 (executable)
@@ -38,13 +38,11 @@ namespace Tizen { namespace Messaging
 {
 
 _PushUrlRequestListener::_PushUrlRequestListener(void)
- : __pPushRequest(null)
 {
 }
 
 _PushUrlRequestListener::~_PushUrlRequestListener(void)
 {
-       __pPushRequest = null;
 }
 
 void
@@ -81,7 +79,7 @@ _PushUrlRequestListener::OnTransactionHeaderCompleted(HttpSession& httpSession,
 void
 _PushUrlRequestListener::OnTransactionCompleted(HttpSession& httpSession, HttpTransaction& httpTransaction)
 {
-       SysLog(NID_MSG, "####### OnTransactionCompleted! #######");
+       SysLog(NID_MSG, "####### OnTransactionCompleted!#######");
 
        HttpResponse* pResponse = httpTransaction.GetResponse();
        SysTryReturnVoidResult(NID_MSG, pResponse != null, E_SYSTEM, "[E_SYSTEM] HttpResponse is invalid.");
@@ -150,10 +148,10 @@ _PushUrlRequestListener::OnTransactionCompleted(HttpSession& httpSession, HttpTr
                                urlValue.Append(L"/spp/pns/api/push");
                                SysSecureLog(NID_MSG, "The read body url is %ls.", urlValue.GetPointer());
 
-                               pManager = __pPushRequest->GetPushManager();
+                               pManager = (pUserData->GetPushRequest())->GetPushManager();
+                               SysTryReturnVoidResult(NID_MSG, pManager != null, E_SYSTEM, "A _PushManagerImpl is NULL.");
                                pManager->UpdatePushServerUrl(urlValue);
-
-                               r = pManager->SendHttpRequest(urlValue, __pPushRequest, *(pUserData->GetPushMessage()), *(pUserData->GetRegistrationIdList()));
+                               r = pManager->SendHttpRequest(urlValue, pUserData->GetPushRequest(), *(pUserData->GetPushMessage()), *(pUserData->GetRegistrationIdList()));
                                SysTryReturnVoidResult(NID_MSG, r == E_SUCCESS, r, "[%s] Failed to submit http request.", GetErrorMessage(r));
                        }
                        else
@@ -166,8 +164,8 @@ _PushUrlRequestListener::OnTransactionCompleted(HttpSession& httpSession, HttpTr
        }
 
        delete pUserData;
-
        delete &httpTransaction;
+
 }
 
 void
@@ -183,21 +181,19 @@ _PushUrlRequestListener::OnTransactionCertVerificationRequiredN(HttpSession& htt
        return;
 }
 
-void
-_PushUrlRequestListener::SetParams(const _PushRequest* pPushRequestSet)
-{
-       __pPushRequest = pPushRequestSet;
-}
-
-_UserData::_UserData(HttpUrlEncodedEntity* pHttpUrlEncodedEntity, PushMessage* pPushMessage, IList* pRegistrationIdList)
+_UserData::_UserData(HttpUrlEncodedEntity* pHttpUrlEncodedEntity, PushMessage* pPushMessage, _PushRequest* pPushRequest, IList* pRegistrationIdList)
        : __pHttpUrlEncodedEntity(pHttpUrlEncodedEntity),
          __pPushMessage(pPushMessage),
+         __pPushRequest(pPushRequest),
          __pRegistrationIdList(pRegistrationIdList)
 {
+       __pPushRequest->AddRef();
 }
 
 _UserData::~_UserData(void)
 {
+       __pPushRequest->Release();
+
        if (__pHttpUrlEncodedEntity != null)
        {
                delete __pHttpUrlEncodedEntity;
@@ -223,6 +219,12 @@ _UserData::GetPushMessage(void)
        return __pPushMessage;
 }
 
+_PushRequest*
+_UserData::GetPushRequest(void)
+{
+       return __pPushRequest;
+}
+
 IList*
 _UserData::GetRegistrationIdList(void)
 {
old mode 100644 (file)
new mode 100755 (executable)
index 663730a..1547cc0
@@ -52,25 +52,21 @@ public:
 
        void OnTransactionCertVerificationRequiredN(Tizen::Net::Http::HttpSession& httpSession, Tizen::Net::Http::HttpTransaction& httpTransaction, Tizen::Base::String* pCert);
 
-       void SetParams(const _PushRequest* pPushRequestSet);
-
 private:
        _PushUrlRequestListener(const _PushUrlRequestListener& rhs);
        _PushUrlRequestListener& operator =(const _PushUrlRequestListener& rhs);
-
-private:
-       const _PushRequest* __pPushRequest;
 }; // _PushUrlRequestListener
 
 class _UserData
        : public Tizen::Base::Object
 {
 public:
-               _UserData(Tizen::Net::Http::HttpUrlEncodedEntity* pHttpUrlEncodedEntity, PushMessage* pPushMessage, Tizen::Base::Collection::IList* pRegistrationIdList);
+               _UserData(Tizen::Net::Http::HttpUrlEncodedEntity* pHttpUrlEncodedEntity, PushMessage* pPushMessage, _PushRequest* pPushRequest, Tizen::Base::Collection::IList* pRegistrationIdList);
                virtual ~_UserData(void);
 
 public:
                PushMessage* GetPushMessage(void);
+               _PushRequest* GetPushRequest(void);
                Tizen::Base::Collection::IList* GetRegistrationIdList(void);
 
 private:
@@ -80,6 +76,7 @@ private:
 private:
        Tizen::Net::Http::HttpUrlEncodedEntity* __pHttpUrlEncodedEntity;
        PushMessage* __pPushMessage;
+       _PushRequest* __pPushRequest;
        Tizen::Base::Collection::IList* __pRegistrationIdList;
  };    // _UserData