From: eh1112.kim Date: Thu, 4 Jul 2013 05:13:42 +0000 (+0900) Subject: Fixed callback issue for push. X-Git-Tag: submit/tizen_2.2/20130714.153010~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1de5683f1b0ad05f3a361787157e479f4714446d;p=framework%2Fosp%2Fmessaging.git Fixed callback issue for push. Change-Id: Ib7885264bc1c9108d0886221161d5b9b2ad9c88b Signed-off-by: eh1112.kim --- diff --git a/src/FMsg_PushManagerImpl.cpp b/src/FMsg_PushManagerImpl.cpp index 85b5fdc..9672870 100755 --- a/src/FMsg_PushManagerImpl.cpp +++ b/src/FMsg_PushManagerImpl.cpp @@ -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 diff --git a/src/FMsg_PushManagerImpl.h b/src/FMsg_PushManagerImpl.h index dc4d2c3..0291c99 100755 --- a/src/FMsg_PushManagerImpl.h +++ b/src/FMsg_PushManagerImpl.h @@ -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); diff --git a/src/FMsg_PushRequest.cpp b/src/FMsg_PushRequest.cpp old mode 100644 new mode 100755 index 4f3cb76..06e69ce --- a/src/FMsg_PushRequest.cpp +++ b/src/FMsg_PushRequest.cpp @@ -20,7 +20,7 @@ * * This file contains implementation of _PushRequest class. */ - +#include #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 diff --git a/src/FMsg_PushRequest.h b/src/FMsg_PushRequest.h old mode 100644 new mode 100755 index f211cb4..45f7c34 --- a/src/FMsg_PushRequest.h +++ b/src/FMsg_PushRequest.h @@ -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 diff --git a/src/FMsg_PushSendListener.cpp b/src/FMsg_PushSendListener.cpp index bc70448..8c95d2b 100755 --- a/src/FMsg_PushSendListener.cpp +++ b/src/FMsg_PushSendListener.cpp @@ -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 diff --git a/src/FMsg_PushSendListener.h b/src/FMsg_PushSendListener.h old mode 100644 new mode 100755 index 3f40ebd..1b4dded --- a/src/FMsg_PushSendListener.h +++ b/src/FMsg_PushSendListener.h @@ -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 diff --git a/src/FMsg_PushUrlRequestListener.cpp b/src/FMsg_PushUrlRequestListener.cpp index 6db0c3f..0d50b32 100755 --- a/src/FMsg_PushUrlRequestListener.cpp +++ b/src/FMsg_PushUrlRequestListener.cpp @@ -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) { diff --git a/src/FMsg_PushUrlRequestListener.h b/src/FMsg_PushUrlRequestListener.h old mode 100644 new mode 100755 index 663730a..1547cc0 --- a/src/FMsg_PushUrlRequestListener.h +++ b/src/FMsg_PushUrlRequestListener.h @@ -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