2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
28 #include <appcore-common.h>
29 #include <pkgmgr_installer.h>
32 #include <FAppPkgPackageInfo.h>
33 #include <FAppPkg_PackageManagerImpl.h>
35 #include "InstallerManager.h"
36 #include "HybridInstaller.h"
38 using namespace Tizen::App;
39 using namespace Tizen::App::Package;
40 using namespace Tizen::Base;
41 using namespace Tizen::Io;
43 extern "C" void Osp_Initialize();
44 static bool __osp_installer_report_result(const PackageId& packageId, int errorType);
46 static pkgmgr_installer *_pi = null;
49 main(int argc, char **argv)
55 const char* pPkgInfo = null;
56 const char* pPkgPath = null;
57 const char* pOptional = null;
58 const char* pStoreClientId = null;
63 appcore_set_i18n(null, null);
67 for (int i = 0; i < argc; i++)
69 const char* pStr = argv[i];
72 AppLog(" # argv[%d] = [%s]", i, pStr);
74 std::unique_ptr< String > pCmd(new (std::nothrow) String(pStr));
75 TryReturn(pCmd, 0, "pCmd is null.");
77 buf.Append(*pCmd.get());
88 fprintf(stderr, " ## osp-installer: %s device=[%s] cmd=[%ls]\n", OSP_INSTALLER_VERSION, emul?"Emulator":"Target", buf.GetPointer());
90 if (argc == TEST_ARG_COUNT)
92 errorType = InstallerManager::ReqeustByTest();
95 else if (argc <= COMMAND_ARG_COUNT && (!(argv[1][2] == 'v' || argv[1][1] == 'v')))
97 errorType = InstallerManager::RequestByCommand(argc, argv);
100 else if (argv[1][2] == 'v')
102 if (argv[3] && argv[3][1] == 'p')
106 errorType = InstallerManager::RequestHybrid(argv[1][1], argv[2], atoi(argv[4]));
110 errorType = INSTALLER_ERROR_SIGNATURE_NOT_FOUND;
112 AppLog("stdout is updated by errorType [%d]", errorType);
113 fprintf(stdout, "%d", errorType);
120 errorType = InstallerManager::RequestHybrid(argv[1][1], argv[2]);
124 else if(argv[1][1] == 'v')
126 if (argv[3] && argv[3][1] == 'p')
130 errorType = InstallerManager::RequestHybrid(argv[1][1], argv[2], atoi(argv[4]));
134 errorType = INSTALLER_ERROR_SIGNATURE_NOT_FOUND;
136 AppLog("stdout is updated by errorType [%d]", errorType);
137 fprintf(stdout, "%d", errorType);
144 errorType = InstallerManager::RequestHybrid(argv[1][2], argv[2]);
149 _pi = pkgmgr_installer_new();
151 pkgmgr_installer_receive_request(_pi, argc, argv);
153 reqType = pkgmgr_installer_get_request_type(_pi);
154 if (PKGMGR_REQ_INVALID >= reqType)
159 pPkgInfo = pkgmgr_installer_get_request_info(_pi);
160 pPkgPath = (const_cast<char*>(pPkgInfo));
161 AppLog(" # path = [%s]", pPkgPath);
167 case PKGMGR_REQ_INSTALL:
169 pOptional = pkgmgr_installer_get_optional_data(_pi);
172 optionalData = pOptional;
173 AppLog(" # optional = [%ls]", optionalData.GetPointer());
178 result r = File::GetAttributes(path, attr);
181 AppLog("GetAttributes() failed. [%ls]", path.GetPointer());
185 if (attr.IsDirectory())
187 if (path.EndsWith("/") == true)
189 int length = path.GetLength();
190 path.Remove(length - 1, 1);
193 path.SubString(path.GetLength() - PACKAGE_ID_LENGTH, PACKAGE_ID_LENGTH, packageId);
197 std::unique_ptr< PackageInfo > pPackageInfo(_PackageManagerImpl::GetInstance()->GetPackageInfoFromFileN(path));
200 packageId = pPackageInfo->GetId();
204 optionalData = packageId;
205 AppLog(" # path = [%ls] -> optionalData = [%ls]", path.GetPointer(), optionalData.GetPointer());
208 pStoreClientId = pkgmgr_installer_get_caller_pkgid(_pi);
211 PackageId StoreClientId = pStoreClientId;
212 optionalData.Append(":StoreClientId=");
213 optionalData.Append(StoreClientId);
214 AppLog(" # optionalData = [%ls]", optionalData.GetPointer());
217 errorType = InstallerManager::Request(path, INSTALLER_OPERATION_INSTALL, INSTALLER_OPTION_NORMAL, _pi, &optionalData);
219 // if (errorType != 0)
221 // manager.RemoveGarbage(path);
224 __osp_installer_report_result(packageId, errorType);
228 case PKGMGR_REQ_UNINSTALL:
230 bool isCscPackage = false;
232 PackageId reqeustPackageId;
233 path.SubString(0, PACKAGE_ID_LENGTH, reqeustPackageId);
234 AppLog("reqeustPackage = %ls", reqeustPackageId.GetPointer());
236 if (InstallerManager::IsUninstallUpdates(reqeustPackageId, originPath, isCscPackage) == true)
238 AppLog("originPath = [%ls], isCscPackage = [%s]", originPath.GetPointer(), isCscPackage?"true":"false");
239 optionalData = reqeustPackageId;
241 errorType = InstallerManager::Request(reqeustPackageId, INSTALLER_OPERATION_UNINSTALL, INSTALLER_OPTION_NORMAL, _pi);
243 if (isCscPackage == false)
245 errorType = InstallerManager::Request(originPath, INSTALLER_OPERATION_INSTALL, INSTALLER_OPTION_RESET_PRELOADED, _pi, &optionalData);
249 InstallerOption option = INSTALLER_OPTION_RESET_PRELOADED;
250 option = (InstallerOption)(option | INSTALLER_OPTION_CSC);
252 errorType = InstallerManager::RequestCsc(originPath, option, _pi);
257 errorType = InstallerManager::Request(reqeustPackageId, INSTALLER_OPERATION_UNINSTALL, INSTALLER_OPTION_NORMAL, _pi);
260 __osp_installer_report_result(reqeustPackageId, errorType);
264 case PKGMGR_REQ_REINSTALL:
266 PackageId rdsPackageId;
268 path.SubString(0, PACKAGE_ID_LENGTH, rdsPackageId);
270 AppLog("rdsPackage = %ls", rdsPackageId.GetPointer());
271 ret = InstallerManager::Request(rdsPackageId, INSTALLER_OPERATION_REINSTALL, INSTALLER_OPTION_NORMAL, _pi, &rdsPackageId);
273 __osp_installer_report_result(rdsPackageId, errorType);
277 case PKGMGR_REQ_MOVE:
282 moveType = pkgmgr_installer_get_move_type(_pi);
284 InstallerManager::RequestMove(path, moveType, _pi);
288 AppLog("_pi is null");
309 __osp_installer_report_result(const PackageId& packageId, int errorType)
311 AppLog("------------------------------------------");
312 AppLog("osp_installer_report_result");
313 AppLog(" # request_type = [%d]", pkgmgr_installer_get_request_type(_pi));
314 AppLog(" # request_info = [%s]", pkgmgr_installer_get_request_info(_pi));
315 AppLog(" # session = [%s]", pkgmgr_installer_get_session_id(_pi));
316 if (packageId.IsEmpty() == false)
318 AppLog(" # package = [%ls]", packageId.GetPointer());
320 AppLog(" # errorType = [%d]", errorType);
321 AppLog("------------------------------------------");
325 AppLog("_pi is null");
329 pkgmgr_installer_free(_pi);