javacall_ams_suitestore.c
来自「This is a resource based on j2me embedde」· C语言 代码 · 共 1,908 行 · 第 1/5 页
C
1,908 行
} for (i = 0; i < JAVACALL_AMS_NUMBER_OF_PERMISSIONS; i++) { pPermissions[i] = JAVACALL_AMS_PERMISSION_VAL_NEVER; } for (i = 0; i < iNumberOfPermissions; i++) { javacall_ams_permission jcPermission = midp_permission2javacall(i); if (jcPermission != JAVACALL_AMS_PERMISSION_VAL_INVALID) { pPermissions[(int)jcPermission] = midp_permission_val2javacall(pMidpPermissions[i]); } } if (iNumberOfPermissions > 0 && pMidpPermissions != NULL) { pcsl_mem_free(pMidpPermissions); } return JAVACALL_OK;}/** * Implementation for javanotify_ams_suite_set_permission and * javanotify_ams_suite_set_permissions. * * @param suiteId [in] unique ID of the MIDlet suite * @param pPermissions [in] array of JAVACALL_AMS_NUMBER_OF_PERMISSIONS * elements containing the permissions' values * to be set; may be NULL * @param permissionToSet [in] permission that must be set or * JAVACALL_AMS_PERMISSION_INVALID if it is required * to set values for all permissions * @param valueToSet [in] value to which permissionToSet must be set or * JAVACALL_AMS_PERMISSION_VAL_INVALID if it is * required to set values for all permissions * * @return <tt>JAVACALL_OK</tt> on success, an error code otherwise */static javacall_resultset_permissions_impl(javacall_suite_id suiteId, javacall_ams_permission_val* pPermissions, javacall_ams_permission permissionToSet, javacall_ams_permission_val valueToSet) { MIDPError status; char* pszError = NULL; jbyte permissionsBuf[JAVACALL_AMS_NUMBER_OF_PERMISSIONS]; jbyte* pTmpPermissions; jbyte* pNewMidpPermissions; int iNumberOfPermissions; jbyte pushInterruptSetting; jint pushOptions; jboolean enabled; int i; /* read other settings to preserve them when updating permissions */ status = read_settings(&pszError, (SuiteIdType)suiteId, &enabled, &pushInterruptSetting, &pushOptions, &pTmpPermissions, &iNumberOfPermissions); if (status != ALL_OK) { storageFreeError(pszError); return midp_error2javacall(status); } /* convert Javacall permission values to the midp values */ if (pPermissions != NULL) { /* set values for all permissions */ iNumberOfPermissions = JAVACALL_AMS_NUMBER_OF_PERMISSIONS; pNewMidpPermissions = permissionsBuf; for (i = 0; i < iNumberOfPermissions; i++) { int midpPermission = javacall_permission2midp((javacall_ams_permission)i); if (midpPermission >= 0 && midpPermission < JAVACALL_AMS_NUMBER_OF_PERMISSIONS) { pNewMidpPermissions[midpPermission] = javacall_permission_val2midp(pPermissions[i]); } } } else { /* set value for one permission */ int midpPermission; pNewMidpPermissions = pTmpPermissions; midpPermission = javacall_permission2midp(permissionToSet); if (midpPermission >= 0 && midpPermission < JAVACALL_AMS_NUMBER_OF_PERMISSIONS) { pNewMidpPermissions[midpPermission] = javacall_permission_val2midp(valueToSet); } } /* write the updated settings */ status = write_settings(&pszError, (SuiteIdType)suiteId, enabled, pushInterruptSetting, pushOptions, pNewMidpPermissions, iNumberOfPermissions, NULL); if (iNumberOfPermissions > 0 && pTmpPermissions != NULL) { pcsl_mem_free(pTmpPermissions); } if (status != ALL_OK) { storageFreeError(pszError); return midp_error2javacall(status); } return JAVACALL_OK;}/** * App Manager invokes this function to set a single permission of the suite * when the user changes it. * * @param suiteId unique ID of the MIDlet suite * @param permission permission be set * @param value new value of permssion * * @return <tt>JAVACALL_OK</tt> on success, an error code otherwise */javacall_resultjavanotify_ams_suite_set_permission(javacall_suite_id suiteId, javacall_ams_permission permission, javacall_ams_permission_val value) { return set_permissions_impl(suiteId, NULL, permission, value);}/** * App Manager invokes this function to set permissions of the suite. * * @param suiteId [in] unique ID of the MIDlet suite * @param pPermissions [in] array of JAVACALL_AMS_NUMBER_OF_PERMISSIONS * elements containing the permissions' values * to be set * * @return <tt>JAVACALL_OK</tt> on success, an error code otherwise */javacall_resultjavanotify_ams_suite_set_permissions(javacall_suite_id suiteId, javacall_ams_permission_val* pPermissions) { if (pPermissions == NULL) { return JAVACALL_FAIL; } return set_permissions_impl(suiteId, pPermissions, JAVACALL_AMS_PERMISSION_INVALID, JAVACALL_AMS_PERMISSION_VAL_INVALID);}/** * App Manager invokes this function to remove a suite with the given ID. * This call is synchronous. * * @param suiteId ID of the suite to remove * * @return <tt>JAVACALL_OK</tt> on success, an error code otherwise */javacall_resultjavanotify_ams_suite_remove(javacall_suite_id suiteId) { return midp_error2javacall(midp_remove_suite((SuiteIdType)suiteId));}/** * App Manager invokes this function to move a software package with given * suite ID to the specified storage. * * @param suiteId suite ID for the installed package * @param newStorageId new storage ID * * @return <tt>JAVACALL_OK</tt> on success, an error code otherwise */javacall_resultjavanotify_ams_suite_change_storage(javacall_suite_id suiteId, javacall_storage_id newStorageId) { return midp_error2javacall(midp_change_suite_storage( (SuiteIdType)suiteId, (StorageIdType)newStorageId));}/** * App Manager invokes this function to check if the suite with the given ID * is trusted. * * This is just a helper method, javanotify_ams_suite_get_info() * also can be used for this purpose. * * @param suiteId unique ID of the MIDlet suite * * @return <tt>JAVACALL_TRUE</tt> if the suite is trusted, * <tt>JAVACALL_FALSE</tt> otherwise */javacall_booljavanotify_ams_suite_is_preinstalled(javacall_suite_id suiteId) { MidletSuiteData* pMidpSuiteData = get_suite_data((SuiteIdType)suiteId); if (pMidpSuiteData == NULL) { return JAVACALL_FALSE; } return (pMidpSuiteData->type == COMPONENT_PREINSTALLED_SUITE) ? JAVACALL_TRUE : JAVACALL_FALSE;}/** * App Manager invokes this function to get the amount of storage * on the device that this suite is using. * This includes the JAD, JAR, management data and RMS. * * @param suiteId ID of the suite * * @return number of bytes of storage the suite is using or less than * 0 if out of memory */long javanotify_ams_suite_get_storage_size(javacall_suite_id suiteId) { return midp_get_suite_storage_size((SuiteIdType)suiteId);}/** * App Manager invokes this function to check the integrity of the suite * storage database and of the installed suites. * * @param fullCheck 0 to check just an integrity of the database, * other value for full check * @param delCorruptedSuites != 0 to delete the corrupted suites, * 0 - to keep them (for re-installation). * * @return <tt>JAVACALL_OK</tt> on success, an error code otherwise */javacall_resultjavanotify_ams_suite_check_suites_integrity(javacall_bool fullCheck, javacall_bool delCorruptedSuites) { return midp_error2javacall(midp_check_suites_integrity( (fullCheck == JAVACALL_TRUE), (delCorruptedSuites == JAVACALL_TRUE)));}/*------------- Getting Information About AMS Folders ---------------*//** * App Manager invokes this function to get an information about * the AMS folders currently defined. * * @param ppFoldersInfo [out] on exit will hold an address of the array * containing the folders info * @param pNumberOfEntries [out] number of entries in the returned array * * @return <tt>JAVACALL_OK</tt> on success, an error code otherwise */javacall_resultjavanotify_ams_suite_get_all_folders_info( javacall_ams_folder_info** ppFoldersInfo, int* pNumberOfEntries) {#if ENABLE_AMS_FOLDERS MIDPError status; javacall_ams_folder_info* pTmpFoldersInfo; int i; /* IMPL_NOTE: temporary hardcoded, should be moved to an xml */ int foldersNum = 2; PCSL_DEFINE_ASCII_STRING_LITERAL_START(pcslStrFolderName1) {'P','r','e','i','n','s','t','a','l','l','e','d',' ', 'a','p','p','s','\0'} PCSL_DEFINE_ASCII_STRING_LITERAL_END(pcslStrFolderName1); PCSL_DEFINE_ASCII_STRING_LITERAL_START(pcslStrFolderName2) {'O','t','h','e','r',' ', 'a','p','p','s','\0'} PCSL_DEFINE_ASCII_STRING_LITERAL_END(pcslStrFolderName2);#endif /* ENABLE_AMS_FOLDERS */ if (ppFoldersInfo == NULL || pNumberOfEntries == NULL) { return JAVACALL_FAIL; } *pNumberOfEntries = 0;#if ENABLE_AMS_FOLDERS /* IMPL_NOTE: temporary hardcoded, should be moved to an xml */ pTmpFoldersInfo = (javacall_ams_folder_info*)javacall_malloc( foldersNum * sizeof(javacall_ams_folder_info)); if (pTmpFoldersInfo == NULL) { return JAVACALL_FAIL; } for (i = 0; i < foldersNum; i++) { pTmpFoldersInfo[i].folderId = (javacall_folder_id)i; status = midp_pcsl_str2javacall_str((i == 0) ? &pcslStrFolderName1 : &pcslStrFolderName2, &pTmpFoldersInfo[i].folderName); if (status != ALL_OK) { int j; for (j = 0; j < i; j++) { if (pTmpFoldersInfo[i].folderName != NULL) { javacall_free(pTmpFoldersInfo[i].folderName); } } return midp_error2javacall(status); } } *pNumberOfEntries = foldersNum; *ppFoldersInfo = pTmpFoldersInfo;#endif /* ENABLE_AMS_FOLDERS */ return JAVACALL_OK;}/** * App Manager invokes this function to free an array of structures describing * the AMS folders. * * @param pFoldersInfo points to an array with midlets info * @param numberOfEntries number of elements in pFoldersInfo */voidjavanotify_ams_suite_free_all_folders_info( javacall_ams_folder_info* pFoldersInfo, int numberOfEntries) { if (pFoldersInfo != NULL && numberOfEntries > 0) { int i; for (i = 0; i < numberOfEntries; i++) { if (pFoldersInfo[i].folderName != NULL) { javacall_free(pFoldersInfo[i].folderName); } } javacall_free(pFoldersInfo); }}/** * App Manager invokes this function to get an information about * the given AMS folder. * * Note that memory for the out parameter pFolderInfo and its fields is * allocated by the callee. The caller is responsible for freeing it using * javanotify_ams_suite_free_folder_info(). * * @param folderId [in] unique ID of the folder * @param ppFolderInfo [out] on exit will hold a pointer to a structure * describing the given folder * * @return <tt>JAVACALL_OK</tt> on success, an error code otherwise */javacall_resultjavanotify_ams_suite_get_folder_info(javacall_folder_id folderId, javacall_ams_folder_info** ppFolderInfo) { /* IMPL_NOTE: the implementation should be optimized */ javacall_result res; javacall_ams_folder_info* pAllFoldersInfo; int foldersNum, i; res = javanotify_ams_suite_get_all_folders_info(&pAllFoldersInfo, &foldersNum); if (res != JAVACALL_OK) { return res; } res = JAVACALL_FAIL; for (i = 0; i < foldersNum; i++) { if (pAllFoldersInfo[i].folderId == folderId) { *ppFolderInfo = (javacall_ams_folder_info*)javacall_malloc( sizeof(javacall_ams_folder_info)); if (*ppFolderInfo == NULL) { break; } memcpy(*ppFolderInfo, &pAllFoldersInfo[i], (size_t)sizeof(javacall_ams_folder_info)); (*ppFolderInfo)->folderName = pAllFoldersInfo[i].folderName; pAllFoldersInfo[i].folderName = NULL; res = JAVACALL_OK; break; } } javanotify_ams_suite_free_all_folders_info(pAllFoldersInfo, foldersNum); return res;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?