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

📄 mconfig.c

📁 彩信MMS的全部代码
💻 C
📖 第 1 页 / 共 2 页
字号:
                tmp = M_ALLOC( strlen(cfgStrValues[sKey]) + 1);
                strcpy( tmp, cfgStrValues[sKey]);
            } 

            MMSa_getConfigStrResponse(MMS_RESULT_OK, sKey, tmp);
#else
            
            MMSa_getConfigStrResponse(MMS_RESULT_OK, sKey, cfgStrValues[sKey]);
#endif 
        } 
        break;
#endif 
    case MMS_SIG_CORE_SET_CONFIG_INT :
        iKey = (MmsConfigInt)sig->u_param2;
        if (iKey < 0 || iKey >= MMS_CFG_TOTAL_INT)
        {
            MMS_LOG_I(("cfgMain: Illegal int key (%d)\n", (int)iKey));
            MMSa_setConfigIntResponse(MMS_RESULT_CONFIG_VARIABLE_NOT_FOUND, iKey);
        }
        else if (checkIntValue( iKey, sig->u_param1))
        {
            


            if (cfgIntValues[iKey] != sig->u_param1)
            {
                cfgIntValues[iKey] = sig->u_param1;
                afterChangeCheckInt(iKey);
            } 

            MMSa_setConfigIntResponse(MMS_RESULT_OK, iKey);
        }
        else
        {
            MMSa_setConfigIntResponse(MMS_RESULT_CONFIG_ILLEGAL_VALUE, iKey);
        } 
        break;
    case MMS_SIG_CORE_SET_CONFIG_STR :
        sKey = (MmsConfigStr)sig->u_param1;
        if (sKey < 0 || sKey >= MMS_CFG_TOTAL_STR)
        {
            MMS_LOG_I(("cfgMain: Illegal string key (%d)\n", (int)sKey));
            M_FREE(sig->p_param);
            MMSa_setConfigStrResponse(MMS_RESULT_CONFIG_VARIABLE_NOT_FOUND, sKey);
        }
        else if (checkStrValue( sKey, (const char *)sig->p_param))
        {
            


            if ((cfgStrValues[sKey] == NULL && sig->p_param == NULL) || 
                (cfgStrValues[sKey] != NULL && sig->p_param != NULL &&
                strcmp( cfgStrValues[sKey], (char *)sig->p_param) == 0))
            {
                
                if (sig->p_param != NULL)
                {
                    M_FREE(sig->p_param);
                } 
            }
            else
            {
                if (cfgStrValues[sKey] != NULL)
                {
                    M_FREE(cfgStrValues[sKey]);
                } 

                cfgStrValues[sKey] = (char *)sig->p_param;
                afterChangeCheckStr(sKey);
            } 

            MMSa_setConfigStrResponse(MMS_RESULT_OK, sKey);
        }
        else
        {
            M_FREE(sig->p_param);
            MMSa_setConfigStrResponse(MMS_RESULT_CONFIG_ILLEGAL_VALUE, sKey);
        } 
        break;
    default:
        
        MMS_LOG_I(("MMS FSM CORE CONFIG: received unknown signal\n"));
        break;
    } 
    
    
    mSignalDelete(sig);
} 




void cfgTerminate(void)
{
    int i = 0;

    
    mSignalDeregister(M_FSM_CORE_CONFIG);

    for (i = 0; i < MMS_CFG_TOTAL_STR; i++)
    {
        if (cfgStrValues[i] != NULL)
        {
            M_FREE(cfgStrValues[i]);
            cfgStrValues[i] = NULL;
        } 
    } 
    
    MMS_LOG_I(("MMS FSM CORE CONFIG: terminated\n"));
} 








static CMN_BOOL checkIntValue(MmsConfigInt key, UINT32 value)
{
    CMN_BOOL ret = FALSE;

    switch (key)
    {
    case MMS_CFG_DELIVERY_REPORT :
        if (value == MMS_DELIVERY_REPORT_YES || value == MMS_DELIVERY_REPORT_NO)
        {
            ret = TRUE;
        } 
        break;
    case MMS_CFG_FROM_ADDRESS_INSERT_TYPE :
        if (value == MMS_FROM_ADDRESS_PRESENT || value == MMS_FROM_INSERT_ADDRESS)
        {
            ret = TRUE;
        } 
        break;
    case MMS_CFG_FROM_ADDRESS_TYPE :
        if ( value == MMS_ADDRESS_PLMN || value == MMS_ADDRESS_EMAIL)
        {
            ret = TRUE;
        } 
        break;
    case MMS_CFG_PORT : 
        if (value == 0 || (value >= MMS_MIN_PORT && value <= MMS_MAX_PORT))
        {
            ret = TRUE;
        } 
        break;
    case MMS_CFG_PROXY_RELAY_VERSION :
        if (value == MMS_VERSION_10 || value == MMS_VERSION_11 || 
            value == MMS_VERSION_12)
        {
            ret = TRUE;
        } 
        break;
    default:
        ret = TRUE;  
        break;
    } 

    return ret;
} 








static CMN_BOOL checkStrValue(MmsConfigStr key, const char *value)
{
    CMN_BOOL ret = FALSE;

    switch (key)
    {
    case MMS_CFG_FROM_ADDRESS :
         
        ret = validAddress(value);
        break;
    case MMS_CFG_IMMEDIATE_RETRIEVAL_SERVER :
         
        ret = validHostName(value);
        break;
    case MMS_CFG_POST_URI :
         
        ret = validUri(value);
        break;
    case MMS_CFG_PROXY_RELAY :
         
        ret = validHostName(value);
        break;
    case MMS_CFG_SCHEME :
         
        ret = validScheme(value);
        break;
    case MMS_CFG_FROM_NAME :
        ret = validName( value);
        break;
    case MMS_CFG_CLASS_STRING :
        ret = validName( value);
        break;
    default :
        ret = TRUE; 
        break;
    } 

    return ret;
} 







static CMN_BOOL validAddress(const char *address)
{
    CMN_BOOL ret = FALSE;
    int i = 0;

    if (address == NULL)
    {
        ret = TRUE;
    }
    else
    {
        for ( i = 0; address[i] != EOS; ++i)
        {
            if ( !IS_ADDRESS_LETTER((unsigned char)address[i]) )
            {
                return FALSE;
            } 
        } 

        if (i < MAX_ADDRESS_LEN)
        {
            ret = TRUE;
        } 
    } 

    return ret;
} 











static CMN_BOOL validHostName(const char *hostName)
{
    int i = 0;

    if (hostName == NULL)
    {
        return TRUE;
    } 

    for ( i = 0; hostName[i] != EOS; ++i)
    {
        if (!IS_HOST_LETTER((unsigned char)hostName[i]) && 
            !IS_HOST_SEPARATOR((unsigned char)hostName[i]) &&
            !IS_PORT((unsigned char)hostName[i]))
        {
            return FALSE;
        } 
    } 

    return TRUE;
} 








static CMN_BOOL validScheme(const char *scheme)
{
    int i = 0;

    if (scheme == NULL)
    {
        return FALSE;
    } 

    for ( i = 0; myValidSchemes[i] != NULL; ++i)
    {
        if ( strcmp( scheme, myValidSchemes[i]) == 0 )
        {
            return TRUE;
        } 
    } 

    return FALSE;
} 







static CMN_BOOL validUri(const char *uri)
{
    int i = 0;

    if (uri == NULL)
    {
        return TRUE;
    } 

    for ( i = 0; uri[i] != EOS; ++i)
    {
        if ( !IS_URI_LETTER((unsigned char)uri[i]) )
        {
            return FALSE;
        } 
    } 

    return TRUE;
} 







static CMN_BOOL validName(const char *name)
{
    int i = 0;

    if ( name == NULL)
    {
        return TRUE;
    } 

    for ( i = 0; name[i] != EOS; ++i)
    {
        if ( (unsigned char)name[i] <= 31 )
        {
            return FALSE;
        } 
    
    } 

    return TRUE;
} 

⌨️ 快捷键说明

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