installationservices/swi/source/sisregistry/client/sisregistrywritablesession.cpp
changeset 25 98b66e4fb0be
parent 0 ba25891c3a9e
child 42 d17dc5398051
--- a/installationservices/swi/source/sisregistry/client/sisregistrywritablesession.cpp	Fri Mar 19 09:33:35 2010 +0200
+++ b/installationservices/swi/source/sisregistry/client/sisregistrywritablesession.cpp	Fri Apr 16 15:05:20 2010 +0300
@@ -33,8 +33,11 @@
 #include "sisuid.h"
 #include "cleanuputils.h"
 #include "arrayutils.h"
+#include "installtypes.h"
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include "swtypereginfo.h"
+#include "ipcutil.h"
+#include "sisregistrypackage.h"
 #endif
 
 using namespace Swi;
@@ -116,6 +119,31 @@
 
 	CleanupStack::PopAndDestroy(&serializedArray);
 	}
+
+EXPORT_C void RSisRegistryWritableSession::AddEntryL(const Usif::CApplicationRegistrationData& aApparcRegFileData,
+                                                     const CSisRegistryPackage& aSisRegistryPackage)
+    {
+    TIpcArgs ipcArgs;
+    
+    Usif::TComponentId componentUid = GetComponentIdForPackageL(aSisRegistryPackage.Name(),aSisRegistryPackage.Vendor()); 
+    ipcArgs.Set(0, componentUid);
+
+    TInt objectSize = 0;
+    objectSize = GetObjectSizeL(&aApparcRegFileData);
+    
+    HBufC8* appRegData = HBufC8::NewMaxLC(objectSize);
+    TPtr8 appRegDataDes = appRegData->Des();
+
+    RDesWriteStream ipcstream(appRegDataDes);
+    CleanupClosePushL(ipcstream);
+    
+    ipcstream << aApparcRegFileData;
+    ipcstream.CommitL();
+    ipcArgs.Set(1, &appRegDataDes);
+    
+    User::LeaveIfError(SendReceive(EAddAppRegEntry, ipcArgs));
+    CleanupStack::PopAndDestroy(2, appRegData);
+    }
 #endif
 
 void RSisRegistryWritableSession::UpdateEntryImplL(TInt aMessage,
@@ -208,6 +236,41 @@
 	
 	CleanupStack::PopAndDestroy(&serializedArray);
 	}
+
+EXPORT_C void RSisRegistryWritableSession::UpdateEntryL(const CApplication& aApplication, 
+                                                        const Usif::CApplicationRegistrationData& aApparcRegFileData,
+                                                        const CSisRegistryPackage& aSisRegistryPackage) 
+    {
+    TIpcArgs ipcArgs;
+    Usif::TComponentId componentUid = 0;  
+
+    TRAPD(err,componentUid = GetComponentIdForPackageL(aSisRegistryPackage.Name(),aSisRegistryPackage.Vendor());)
+
+	if (err != KErrNone && err != KErrNotFound)
+        {
+        User::Leave(err);
+        }
+    else if (err == KErrNotFound) // Possible only in PU and SA.
+        {
+        componentUid = GetComponentIdForUidL(aApplication.ControllerL().Info().Uid().Uid());
+        }
+
+    ipcArgs.Set(0, componentUid);
+    
+    TInt objectSize = 0;
+    objectSize = GetObjectSizeL(&aApparcRegFileData);
+    HBufC8* appRegData=HBufC8::NewMaxLC(objectSize);
+    TPtr8 appRegDataDes = appRegData->Des();
+
+    RDesWriteStream ipcstream(appRegDataDes);
+    CleanupClosePushL(ipcstream);
+    
+    ipcstream << aApparcRegFileData;
+    ipcstream.CommitL();
+    ipcArgs.Set(1, &appRegDataDes);
+    User::LeaveIfError(SendReceive(EUpdateAppRegEntry, ipcArgs));
+    CleanupStack::PopAndDestroy(2, appRegData);
+    }
 #endif
 
 EXPORT_C void RSisRegistryWritableSession::DeleteEntryL(const CSisRegistryPackage& aPackage, TInt64 aTransactionID)