javaextensions/wma/mms/pushplugin/src.s60/s60mmsserverconnection.cpp
changeset 78 71ad690e91f5
parent 49 35baca0e7a2e
child 80 d6dafc5d983f
--- a/javaextensions/wma/mms/pushplugin/src.s60/s60mmsserverconnection.cpp	Fri Sep 17 16:44:34 2010 +0300
+++ b/javaextensions/wma/mms/pushplugin/src.s60/s60mmsserverconnection.cpp	Mon Oct 04 11:29:25 2010 +0300
@@ -38,7 +38,8 @@
 OS_EXPORT S60MmsServerConnection::S60MmsServerConnection(const wstring& aUri,
         const wstring& aFilter)
         :CActive(EPriorityStandard), mUri(aUri), mFilter(aFilter),
-        mActiveConnection(false), mIsAppLaunched(false),mListener(0)
+        mActiveConnection(false), mIsAppLaunched(false),mListener(0),
+		mUnregister(0)
 
 {
     JELOG2(EWMA);
@@ -69,6 +70,18 @@
         mUri, false);
 }
 
+void S60MmsServerConnection::setUnregister()
+{
+    LOG(EWMA, EInfo,"S60MmsServerConnection::setUnregister");
+    mUnregister = true;
+}
+
+void S60MmsServerConnection::clearUnregister()
+{
+    LOG(EWMA, EInfo, "S60MmsServerConnection::clearUnregister");
+    mUnregister = false;
+}
+
 OS_EXPORT void S60MmsServerConnection::open(ConnectionListener* aListener)
 {
     JELOG2(EWMA);
@@ -112,7 +125,11 @@
     mSession = CMsvSession::OpenSyncL(*this);
     mApplicationId = S60CommonUtils::wstringToDes(mAppId.c_str());
     TMsvId folderId;
-    mMmsApplicationAdapter->RegisterL(*mApplicationId, folderId);
+    TBool isRegistered = mMmsApplicationAdapter->RegisteredL(*mApplicationId);
+    if (!isRegistered)
+    { 
+       mMmsApplicationAdapter->RegisterL(*mApplicationId, folderId);
+    }
     TMsvId tmsvId = mMmsApplicationAdapter->FolderIdL(*mApplicationId);
     if (tmsvId != KErrNone)
     {
@@ -320,15 +337,20 @@
     }
     case ENotifyingClose:
     {
-        mClientEntry->RemoveObserver(*this);
-        if (mMmsApplicationAdapter)
-        {
-            mMmsApplicationAdapter->UnregisterL(*mApplicationId);
-            delete mMmsApplicationAdapter;
-            mMmsApplicationAdapter = NULL;
-        }
         if (mClientEntry)
         {
+           mClientEntry->RemoveObserver(*this);
+           if (mMmsApplicationAdapter)
+           {
+              if (mUnregister)
+              {
+                  LOG(EWMA, EInfo, "Unregistering");
+                  mMmsApplicationAdapter->UnregisterL(*mApplicationId);
+              }
+              delete mMmsApplicationAdapter;
+              mMmsApplicationAdapter = NULL;
+           }
+        
             delete mClientEntry;
             mClientEntry = NULL;
         }