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 + -
显示快捷键?