⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jam_policy.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 3 页
字号:
    return return_a2p;
}

/*****************************************************************************
 * FUNCTION
 *  get_def_max_perm
 * DESCRIPTION
 *  Get the default and maximum setting of a domain in _policy.txt
 * PARAMETERS
 *  allowed         [OUT]        If there is any "ALLOW" permission
 *  default_setting [OUT]        Setting of default permission
 *  max_setting     [OUT]        Setting of maximum permission
 *  perm_key        [IN]         Input string in _policy.txt.
 * RETURNS
 *  void
 *****************************************************************************/
static void get_def_max_perm(kal_bool* allowed, kal_char* default_setting, kal_char* max_setting, kal_char* perm_key)
{
    kal_int32 perm_index = 0;
    
    while(kp_map[perm_index].key_string != NULL)
    {
        if(strncmp(kp_map[perm_index].key_string, perm_key, kp_map[perm_index].key_len) == 0)
        {
            if(perm_index == 0)
            {
                *allowed = KAL_TRUE;
                return;
            }
            *max_setting = kp_map[perm_index].permission;
            break;
        }
        perm_index ++;
    }
    
    perm_index = 0;
    
    while(*perm_key != 0)
    {
        if(*perm_key == '(')
        {
            perm_key ++;
            break;
        }
        perm_key ++;
    }
    if(*perm_key != 0)
    {
        while(kp_map[perm_index].key_string != NULL)
        {
            if(strncmp(kp_map[perm_index].key_string, perm_key, kp_map[perm_index].key_len) == 0)
            {
                if(perm_index == 0)
                {
                    *allowed = KAL_TRUE;
                    return;
                }
                *default_setting = kp_map[perm_index].permission;
                break;
            }
            perm_index ++;
        }
    }
}

/*****************************************************************************
 * FUNCTION
 *  get_domain_perm
 * DESCRIPTION
 *  Get permissions for all domain in _policy.txt
 * PARAMETERS
 *  kp          [IN]        The key / value pair structure
 *  alias_to_perm_struct [IN] Alias permission group mapping
 * RETURNS
 *  domain_permission_struct Array of domain name, max setting, 
 *   and defualt setting group.
 *****************************************************************************/
static domain_permission_struct* get_domain_perm(key_value_pair_struct* kp, alias_to_perm_struct* a2p)
{
    domain_permission_struct* return_domain;
    kal_int32 total_domain = 0;
    kal_int32 kp_index = 0;
    kal_int32 domain_index = 0;
    kal_bool get_permission = KAL_FALSE;
    while(kp[kp_index].key != NULL)
    {
        if(strcmp(kp[kp_index].key, "domain") == 0)
        {
            total_domain ++;
        }
        kp_index ++;
    }
    return_domain = (domain_permission_struct*) jvm_malloc(sizeof(domain_permission_struct) * (total_domain + 1));
    kp_index = 0;
    
    while(total_domain > 0)
    {
        total_domain --;
        return_domain[total_domain].perm.permission_network = PERMISSION_DENY;
        return_domain[total_domain].perm.permission_push = PERMISSION_DENY;
        return_domain[total_domain].perm.permission_message = PERMISSION_DENY;
        return_domain[total_domain].perm.permission_multimedia = PERMISSION_DENY;
        return_domain[total_domain].perm.permission_data_read = PERMISSION_DENY;
        return_domain[total_domain].perm.permission_data_write = PERMISSION_DENY;
        return_domain[total_domain].perm.permission_local_connectivity = PERMISSION_DENY;
        return_domain[total_domain].perm.permission_reserved = PERMISSION_DENY;
        return_domain[total_domain].max_perm.permission_network = PERMISSION_DENY;
        return_domain[total_domain].max_perm.permission_push = PERMISSION_DENY;
        return_domain[total_domain].max_perm.permission_message = PERMISSION_DENY;
        return_domain[total_domain].max_perm.permission_multimedia = PERMISSION_DENY;
        return_domain[total_domain].max_perm.permission_data_read = PERMISSION_DENY;
        return_domain[total_domain].max_perm.permission_data_write = PERMISSION_DENY;
        return_domain[total_domain].max_perm.permission_local_connectivity = PERMISSION_DENY;
        return_domain[total_domain].max_perm.permission_reserved = PERMISSION_DENY;
        return_domain[total_domain].domain = NULL;
    }
    
    while(kp[kp_index].key != NULL)
    {
        if(strcmp(kp[kp_index].key, "domain") == 0)
        {
            if(get_permission)
            {
                domain_index ++;
                get_permission = KAL_FALSE;
            }
            if(strcmp(kp[kp_index].value, "minimum") != 0 && strcmp(kp[kp_index].value, "maximum") != 0)
            {
                if(return_domain[domain_index].domain != NULL)
                {
                    jvm_free(return_domain[domain_index].domain);
                }
                return_domain[domain_index].domain = (kal_char*)jvm_malloc(strlen(kp[kp_index].value) + 1);
                strcpy(return_domain[domain_index].domain, kp[kp_index].value);
                get_permission = KAL_TRUE;
            }
            kp_index ++;
            continue;
        }
        if(get_permission)
        {
            int alias_index = 0;
            kal_bool is_allowed = KAL_FALSE;
            while (a2p[alias_index].key != NULL)
            {
                if(strcmp(a2p[alias_index].key, kp[kp_index].value) == 0)
                {
                    switch(a2p[alias_index].perm)
                    {
                        case PERMISSION_NETWORK:
                            get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_network), 
                                             &(return_domain[domain_index].max_perm.permission_network), kp[kp_index].key);
                        break;
                        case PERMISSION_PUSH:
                            get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_push), 
                                             &(return_domain[domain_index].max_perm.permission_push), kp[kp_index].key);
                        break;
                        case PERMISSION_MESSAGE:
                            get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_message), 
                                             &(return_domain[domain_index].max_perm.permission_message), kp[kp_index].key);
                        break;
                        case PERMISSION_MULTIMEDIA:
                            get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_multimedia), 
                                             &(return_domain[domain_index].max_perm.permission_multimedia), kp[kp_index].key);
                        break;
                        case PERMISSION_DATA_READ:
                            get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_data_read), 
                                             &(return_domain[domain_index].max_perm.permission_data_read), kp[kp_index].key);
                        break;
                        case PERMISSION_DATA_WRITE:
                            get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_data_write), 
                                             &(return_domain[domain_index].max_perm.permission_data_write), kp[kp_index].key);
                        break;
                        case PERMISSION_LOCAL_CON:
                            get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_local_connectivity), 
                                             &(return_domain[domain_index].max_perm.permission_local_connectivity), kp[kp_index].key);
                        break;
                    }
                    if(is_allowed)
                    {
                        get_permission = KAL_FALSE;
                    }
                    break;
                }
                alias_index ++;
            }
        }
        kp_index ++;
    }
    return return_domain;
}

/*****************************************************************************
 * FUNCTION
 *  set_permission
 * DESCRIPTION
 *  Set the default setting of a domain
 * PARAMETERS
 *  kp          [IN]        The key / value pair structure
 *  domain_name [IN]        The requested domain name
 *  alias_to_perm_struct [IN] Alias permission group mapping
 *  domain_permission_struct [IN]
 *  mmi_setting_struct [IN] Setting to be used.
 * RETURNS
 *  J2ME_NO_ERROR if no error or J2ME_ACTION_FAILE if fail.
 *****************************************************************************/
static kal_int32 set_permission(key_value_pair_struct* kp, kal_char* domain_name, alias_to_perm_struct* a2p, 
                         domain_permission_struct* domain_perm, mmi_setting_struct* default_setting)
{
    kal_int32 temp_index = 0;
    kal_int32 start_index = 0;
    kal_int32 end_index = 0;
    kal_int32 a2p_index = 0;
    kal_bool hitted = KAL_FALSE;
    domain_permission_struct selected_domain;

    temp_index = 0;
    while(kp[temp_index].value != NULL)
    {
        if(strcmp(kp[temp_index].key, "domain") == 0)
        {
            if(hitted)
            {
                break;
            }
            if(!hitted && strcmp(kp[temp_index].value, domain_name) == 0)
            {
                hitted = KAL_TRUE;
                start_index = temp_index;
            }
        }
        temp_index ++;
    }
    if(!hitted)
    {
        return J2ME_ACTION_FAILE;
    }
    
    start_index ++;
    end_index = temp_index;
    
    temp_index = 0;
    while(domain_perm[temp_index].domain != NULL)
    {
        if(strcmp(domain_perm[temp_index].domain, domain_name) == 0)
        {
            selected_domain = domain_perm[temp_index];
            break;
        }
        temp_index ++;
    }
    
    if(domain_perm[temp_index].domain == NULL)
    {
        return J2ME_ACTION_FAILE;
    }
    
    while(a2p[a2p_index].key != NULL)
    {
        kal_uint8 permision_setting = PERMISSION_DENY;
        switch(a2p[a2p_index].perm)
        {
            case PERMISSION_NETWORK:
                permision_setting = default_setting->permission_network;
                if(permision_setting == PERMISSION_BLANKET_GRANTED)
                {
                    permision_setting = PERMISSION_BLANKET;
                }
                if(selected_domain.max_perm.permission_network > permision_setting)
                {
                    return J2ME_ACTION_FAILE;
                }
            break;
            case PERMISSION_PUSH:
                permision_setting = default_setting->permission_push;
                if(permision_setting == PERMISSION_BLANKET_GRANTED)
                {
                    permision_setting = PERMISSION_BLANKET;
                }
                if(selected_domain.max_perm.permission_push > permision_setting)
                {
                    return J2ME_ACTION_FAILE;
                }
            break;
            case PERMISSION_MESSAGE:
                permision_setting = default_setting->permission_message;
                if(permision_setting == PERMISSION_BLANKET_GRANTED)
                {
                    permision_setting = PERMISSION_BLANKET;
                }
                if(selected_domain.max_perm.permission_message > permision_setting)
                {
                    return J2ME_ACTION_FAILE;
                }
            break;
            case PERMISSION_MULTIMEDIA:
                permision_setting = default_setting->permission_multimedia;
                if(permision_setting == PERMISSION_BLANKET_GRANTED)
                {
                    permision_setting = PERMISSION_BLANKET;
                }
                if(selected_domain.max_perm.permission_multimedia > permision_setting)
                {
                    return J2ME_ACTION_FAILE;
                }
            break;
            case PERMISSION_DATA_READ:
                permision_setting = default_setting->permission_data_read;
                if(permision_setting == PERMISSION_BLANKET_GRANTED)
                {
                    permision_setting = PERMISSION_BLANKET;
                }
                if(selected_domain.max_perm.permission_data_read > permision_setting)
                {
                    return J2ME_ACTION_FAILE;
                }
            break;
            case PERMISSION_DATA_WRITE:
                permision_setting = default_setting->permission_data_write;
                if(permision_setting == PERMISSION_BLANKET_GRANTED)
                {
                    permision_setting = PERMISSION_BLANKET;
                }
                if(selected_domain.max_perm.permission_data_write > permision_setting)
                {
                    return J2ME_ACTION_FAILE;
                }
            break;
            case PERMISSION_LOCAL_CON:
                permision_setting = default_setting->permission_local_connectivity;
                if(permision_setting == PERMISSION_BLANKET_GRANTED)
                {
                    permision_setting = PERMISSION_BLANKET;
                }
                if(selected_domain.max_perm.permission_local_connectivity > permision_setting)
                {
                    return J2ME_ACTION_FAILE;
                }
            break;
        }
        temp_index = start_index;
        while(temp_index < end_index)
        {
            if(strcmp(kp[temp_index].value, a2p[a2p_index].key) == 0)
            {
                kal_int32 permission_map = 0;
                kal_int32 str_index;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -