Tizen 2.1 base
[platform/framework/native/app-service.git] / src / FApp_PackageManagerStub.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file         FApp_PackageManagerStub.cpp
20  * @brief       This is the implementation for the _PackageManagerStub class.
21  */
22 #include <cstdio>
23 #include <dlfcn.h>
24
25 #include <FAppPkgIPackageInstallationResponseListener.h>
26 #include <FAppPkgIPackageUninstallationResponseListener.h>
27 #include <FBaseSysLog.h>
28 #include <FBase_StringConverter.h>
29 #include <FIo_IpcServer.h>
30 #include <FSec_AccessController.h>
31 #include <FApp_PackageManagerIpcMessages.h>
32
33 #include "FAppPkg_PackageManagerImpl.h"
34 #include "FApp_PackageManagerStub.h"
35
36
37 namespace Tizen { namespace App {
38
39 using namespace Tizen::App::Package;
40 using namespace Tizen::Base;
41 using namespace Tizen::Base::Collection;
42 using namespace Tizen::Io;
43 using namespace Tizen::Security;
44
45
46 ///////////////////////////////////////////
47 // _PackageManagerStub
48 ///////////////////////////////////////////
49
50 _PackageManagerStub::_PackageManagerStub()
51         :__pIpcServer(null)
52         ,__pPackageManagerImpl(null)
53 {
54         SysLog(NID_APP, "_PackageManagerStub - Enter\n");
55 }
56
57 _PackageManagerStub::~_PackageManagerStub()
58 {
59         if ( __pIpcServer != null)
60         {
61                 __pIpcServer->Stop();
62                 delete __pIpcServer;
63         }
64
65         SysLog(NID_APP, "_PackageManagerStub - Exit\n");
66 }
67
68 result
69 _PackageManagerStub::Construct(void)
70 {
71         SysLog(NID_APP, "_PackageManagerStub - Construct.");
72
73         __pPackageManagerImpl = Tizen::App::Package::_PackageManagerImpl::GetInstance();
74
75         result r = E_SUCCESS;
76         r = StartIpcServer();
77         SysTryReturn(NID_APP, !IsFailed(r), r, r, "failed to StartIpcServer.(%s)", GetErrorMessage(r));
78
79         return E_SUCCESS;
80 }
81
82 result
83 _PackageManagerStub::StartIpcServer(void)
84 {
85         SysLog(NID_APP, "_PackageManagerStub - StartIpcServer");
86
87         __pIpcServer = new (std::nothrow) _IpcServer();
88         SysTryReturn(NID_APP, __pIpcServer != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Not enough memory.");
89
90         result r = __pIpcServer->Construct( "osp.app.ipcserver.packagemanager", *this);
91         SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] Failed to create IPC server(%s)", GetErrorMessage(r), "osp.app.ipcserver.packagemanager");
92
93         r = __pIpcServer->Start();
94         SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] Failed to Start IPC server(%s)", GetErrorMessage(r), "osp.app.ipcserver.packagemanager");
95
96         return E_SUCCESS;
97
98 CATCH:
99         delete __pIpcServer;
100         __pIpcServer = null;
101         return r;
102 }
103
104 void
105 _PackageManagerStub::OnInstallPackage(const PackageId& packageId, const String& packagePath, int listener, result* pRes)
106 {
107         SysTryReturnVoidResult(NID_APP, __pPackageManagerImpl != null, E_INVALID_STATE, "Invalid package manager state.");
108
109         *pRes = _AccessController::CheckSystemPrivilege(__pIpcServer->GetClientAppId(), _PRV_PACKAGEMANAGER_INSTALL);
110         SysTryReturnVoidResult(NID_APP, !IsFailed(*pRes), *pRes = E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
111
112         //String appId;
113         //*pRes = __pPackageManagerImpl->InstallPackage(packageId, packagePath, (IPackageInstallationResponseListener*)listener);
114 }
115
116 void
117 _PackageManagerStub::OnUninstallPackage(const PackageId& packageId, int listener, result* pRes)
118 {
119         SysTryReturnVoidResult(NID_APP, __pPackageManagerImpl != null, E_INVALID_STATE, "Invalid package manager state.");
120
121         *pRes = _AccessController::CheckSystemPrivilege(__pIpcServer->GetClientAppId(), _PRV_PACKAGEMANAGER_INSTALL);
122         SysTryReturnVoidResult(NID_APP, !IsFailed(*pRes), *pRes = E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
123
124         //*pRes = __pPackageManagerImpl->UninstallPackage(packageId, (IPackageUninstallationResponseListener*)listener);
125 }
126
127 ///////////////////////////////////////////
128 // ipc handlers
129 ///////////////////////////////////////////
130 void
131 _PackageManagerStub::OnIpcRequestReceived(_IpcServer& server, const IPC::Message& message)
132 {
133         SysLog(NID_APP, "(appId:%ls, pid:%d, clientId:%d)\n", server.GetClientAppId().GetPointer(), server.GetClientProcessId(), server.GetClientId());
134
135         IPC_BEGIN_MESSAGE_MAP(_PackageManagerStub, message)
136                 IPC_MESSAGE_HANDLER_EX(PackageManager_InstallPackage, &server, OnInstallPackage)
137                 IPC_MESSAGE_HANDLER_EX(PackageManager_UninstallPackage, &server, OnUninstallPackage)
138         IPC_END_MESSAGE_MAP()
139 }
140
141 void
142 _PackageManagerStub::OnIpcServerStarted(const _IpcServer& server)
143 {
144         SysLog(NID_APP, "_PackageManagerStub::OnIpcServerStarted \n");
145 }
146
147 void
148 _PackageManagerStub::OnIpcServerStopped(const _IpcServer& server)
149 {
150         SysLog(NID_APP, "_PackageManagerStub::OnIpcServerStopped \n");
151 }
152
153 void
154 _PackageManagerStub::OnIpcClientConnected(const _IpcServer& server, int clientId)
155 {
156         SysLog(NID_APP, "_PackageManagerStub::OnIpcClientConnected (clientId:%d)\n", clientId);
157 }
158
159 void
160 _PackageManagerStub::OnIpcClientDisconnected(const _IpcServer&server, int clientId)
161 {
162         SysLog(NID_APP, "(appId:%ls, pid:%d, clientId:%d)\n", server.GetClientAppId().GetPointer(), server.GetClientProcessId(), clientId);
163 }
164
165 }} //namespace Tizen { namespace App {