📄 mconfig.c
字号:
/*
* Copyright (C) Obigo AB, 2002-2005.
* All rights reserved.
*
* This software is covered by the license agreement between
* the end user and Obigo AB, and may be
* used and copied only in accordance with the terms of the
* said agreement.
*
* Obigo AB assumes no responsibility or
* liability for any errors or inaccuracies in this software,
* or any consequential, incidental or indirect damage arising
* out of the use of the software.
*
*/
#include "cansilib.h"
#include "cmnconf.h"
#include "cmntypes.h"
#include "aapicmn.h"
#include "gmem.h"
#include "mmsconf.h"
#include "mmstypes.h"
#include "aapimms.h"
#include "msig.h"
#include "mmem.h"
#include "mconfig.h"
#include "mcpdu.h"
#include "mcwap.h"
#include "mcpost.h"
#include "mcget.h"
#include "mnotify.h"
#define MMS_MIN_PORT 1
#define MMS_MAX_PORT 65535
#define IS_ADDRESS_LETTER(x) ((IS_HOST_LETTER(x)) || (x) == '@' || (x) == '+')
#define IS_URI_LETTER(x) ( \
((x) >= '0' && (x) <= '9') || \
((x) >= 'a' && (x) <= 'z') || \
((x) >= 'A' && (x) <= 'Z') || \
(x) == '.' || (x) == '-' || (x) == '_' || (x) == '?' || (x) == '%' || \
(x) == '/' || (x) == '~' || (x) == ':' || (x) == ';' || (x) == '@' || \
(x) == '&' || (x) == '=' || (x) == '+' || (x) == ',' || (x) == '$')
static UINT32 cfgIntValues[MMS_CFG_TOTAL_INT];
static char *cfgStrValues[MMS_CFG_TOTAL_STR];
static const char *myValidSchemes[] =
{
"",
"http://",
"https://",
NULL
};
static void afterChangeCheckInt(MmsConfigInt key);
static void afterChangeCheckStr(MmsConfigStr key);
static void cfgMain(MmsSignal *sig);
static CMN_BOOL checkIntValue(MmsConfigInt key, UINT32 value);
static CMN_BOOL checkStrValue(MmsConfigStr key, const char *value);
static CMN_BOOL validAddress(const char *address);
static CMN_BOOL validHostName(const char *hostName);
static CMN_BOOL validUri(const char *uri);
static CMN_BOOL validScheme(const char *scheme);
static CMN_BOOL validName(const char *name);
static void afterChangeCheckInt(MmsConfigInt key)
{
switch (key)
{
case MMS_CFG_DISCONNECT_ON_IDLE :
mmsWapConnectionCheck();
break;
case MMS_CFG_IMMEDIATE_RETRIEVAL :
msrNotifyImmediateCheck();
break;
default :
break;
}
}
static void afterChangeCheckStr(MmsConfigStr key)
{
switch (key)
{
case MMS_CFG_CLIENT_HTTP_HEADER :
case MMS_CFG_CLIENT_USER_AGENT :
cohPostSetHttpHeader();
cohGetSetHttpHeader();
break;
default:
break;
}
}
UINT32 cfgGetInt(MmsConfigInt key)
{
if (key < 0 || key >= MMS_CFG_TOTAL_INT)
{
MMS_LOG_I(("%s(%d): Invalid MmsConfigInt %d.\n", __FILE__, __LINE__, key));
MMSa_error(MMS_RESULT_ERROR);
return MMS_INVALID_CFG_VARIABLE;
}
return cfgIntValues[key];
}
char *cfgGetStr(MmsConfigStr key)
{
if (key < 0 || key >= MMS_CFG_TOTAL_STR)
{
return NULL;
}
return cfgStrValues[key];
}
void cfgInit(void)
{
int i = 0;
for (i = 0; i < MMS_CFG_TOTAL_INT; i++)
{
cfgIntValues[i] = 0;
}
cfgIntValues[MMS_CFG_DELIVERY_REPORT] = MMS_DELIVERY_REPORT_YES;
cfgIntValues[MMS_CFG_DISCONNECT_ON_IDLE] = MMS_DISCONNECT_ON_IDLE;
cfgIntValues[MMS_CFG_EXTERNAL_DRM_PARSER] = MMS_DEFAULT_EXTERNAL_DRM_PARSER;
cfgIntValues[MMS_CFG_EXTRA_NOTIFY_RESP] = MMS_DEFAULT_EXTRA_NOTIFY_RESP;
cfgIntValues[MMS_CFG_FROM_ADDRESS_TYPE] = MMS_ADDRESS_PLMN;
cfgIntValues[MMS_CFG_GET_RETRY] = MMS_DEFAULT_GET_RETRY;
cfgIntValues[MMS_CFG_MAX_DOWNLOAD_SIZE] = MMS_DEFAULT_MAX_DOWNLOAD_SIZE;
cfgIntValues[MMS_CFG_NO_SMS_NOTIFY_RESP] = MMS_NO_SMS_NOTIFY_RESP;
cfgIntValues[MMS_CFG_PORT] = MMS_PORT;
cfgIntValues[MMS_CFG_POST_RETRY] = MMS_DEFAULT_POST_RETRY;
cfgIntValues[MMS_CFG_PROXY_RELAY_VERSION] = MMS_DEFAULT_PROXY_RELAY_VERSION;
cfgIntValues[MMS_CFG_READ_REPORT_MULTIPART_MIXED] = MMS_DEFAULT_READ_REPORT_MULTIPART_MIXED;
cfgIntValues[MMS_CFG_STANDARD_NOTIFICATION_URI] = MMS_DEFAULT_STANDARD_NOTIFICATION_URI;
cfgIntValues[MMS_CFG_USE_RECEPTION_DATE] = MMS_DEFAULT_USE_RECEPTION_DATE;
cfgIntValues[MMS_CFG_IMMEDIATE_RETRIEVAL] = FALSE;
cfgIntValues[MMS_CFG_IMM_RET_RETRY_ATTEMPTS] = MMS_DEFAULT_IMM_RET_RETRY_ATTEMPTS;
cfgIntValues[MMS_CFG_IMM_RET_RETRY_TIMEOUT] = MMS_DEFAULT_IMM_RET_RETRY_TIMEOUT;
cfgIntValues[MMS_CFG_CLASS_PERSONAL] = TRUE;
cfgIntValues[MMS_CFG_CLASS_ADVERTISEMENT] = FALSE;
cfgIntValues[MMS_CFG_CLASS_INFORMATIONAL] = TRUE;
cfgIntValues[MMS_CFG_CLASS_AUTO] = TRUE;
cfgIntValues[MMS_CFG_ANONYMOUS_SENDER] = FALSE;
cfgIntValues[MMS_CFG_MAX_SIZE_OF_MSG] = MMS_MAX_MSG_SIZE;
for (i = 0; i < MMS_CFG_TOTAL_STR; i++)
{
cfgStrValues[i] = NULL;
}
cfgStrValues[MMS_CFG_SCHEME] = M_ALLOC(sizeof(MMS_DEFAULT_SCHEME));
cfgStrValues[MMS_CFG_CLIENT_USER_AGENT] = M_ALLOC(sizeof(MMS_DEFAULT_USER_AGENT));
cfgStrValues[MMS_CFG_CLIENT_HTTP_HEADER] = M_ALLOC(sizeof(MMS_DEFAULT_HTTP_HEADER));
cfgStrValues[MMS_CFG_PROXY_RELAY] = M_ALLOC(sizeof(MMS_PROXY_RELAY));
cfgStrValues[MMS_CFG_POST_URI] = M_ALLOC(sizeof(MMS_POST_URI));
cfgStrValues[MMS_CFG_GET_URI] = M_ALLOC(sizeof(MMS_DEFAULT_GET_URI));
if (cfgStrValues[MMS_CFG_SCHEME] == NULL ||
cfgStrValues[MMS_CFG_CLIENT_USER_AGENT] == NULL ||
cfgStrValues[MMS_CFG_CLIENT_HTTP_HEADER] == NULL ||
cfgStrValues[MMS_CFG_PROXY_RELAY] == NULL ||
cfgStrValues[MMS_CFG_POST_URI] == NULL ||
cfgStrValues[MMS_CFG_GET_URI] == NULL)
{
MMS_LOG_I(("%s(%d): Not enough memory.\n", __FILE__, __LINE__));
MMSa_error(MMS_RESULT_RESTART_NEEDED);
return;
}
strcpy( cfgStrValues[MMS_CFG_SCHEME], MMS_DEFAULT_SCHEME);
strcpy( cfgStrValues[MMS_CFG_CLIENT_USER_AGENT], MMS_DEFAULT_USER_AGENT);
strcpy( cfgStrValues[MMS_CFG_CLIENT_HTTP_HEADER], MMS_DEFAULT_HTTP_HEADER);
strcpy( cfgStrValues[MMS_CFG_PROXY_RELAY], MMS_PROXY_RELAY);
strcpy( cfgStrValues[MMS_CFG_POST_URI], MMS_POST_URI);
strcpy( cfgStrValues[MMS_CFG_GET_URI], MMS_DEFAULT_GET_URI);
cfgStrValues[MMS_CFG_TEXT_FROM] = M_ALLOC(sizeof(MMS_RR_TEXT_FROM));
cfgStrValues[MMS_CFG_TEXT_TO] = M_ALLOC(sizeof(MMS_RR_TEXT_TO));
cfgStrValues[MMS_CFG_TEXT_READ] = M_ALLOC(sizeof(MMS_RR_TEXT_READ));
cfgStrValues[MMS_CFG_TEXT_MSGID] = M_ALLOC(sizeof(MMS_RR_TEXT_MSGID));
cfgStrValues[MMS_CFG_TEXT_SENT] = M_ALLOC(sizeof(MMS_RR_TEXT_SENT));
cfgStrValues[MMS_CFG_TEXT_YOUR_MSG] = M_ALLOC(sizeof(MMS_RR_TEXT_YOUR_MSG));
cfgStrValues[MMS_CFG_TEXT_WAS_READ] = M_ALLOC(sizeof(MMS_RR_TEXT_WAS_READ));
cfgStrValues[MMS_CFG_TEXT_SUBJECT] = M_ALLOC(sizeof(MMS_RR_TEXT_SUBJECT));
if (cfgStrValues[MMS_CFG_TEXT_FROM] == NULL ||
cfgStrValues[MMS_CFG_TEXT_TO] == NULL ||
cfgStrValues[MMS_CFG_TEXT_READ] == NULL ||
cfgStrValues[MMS_CFG_TEXT_MSGID] == NULL ||
cfgStrValues[MMS_CFG_TEXT_SENT] == NULL ||
cfgStrValues[MMS_CFG_TEXT_YOUR_MSG] == NULL ||
cfgStrValues[MMS_CFG_TEXT_WAS_READ] == NULL ||
cfgStrValues[MMS_CFG_TEXT_SUBJECT] == NULL)
{
MMS_LOG_I(("%s(%d): Not enough memory.\n", __FILE__, __LINE__));
MMSa_error(MMS_RESULT_RESTART_NEEDED);
return;
}
strcpy( cfgStrValues[MMS_CFG_TEXT_FROM], MMS_RR_TEXT_FROM);
strcpy( cfgStrValues[MMS_CFG_TEXT_TO], MMS_RR_TEXT_TO);
strcpy( cfgStrValues[MMS_CFG_TEXT_READ], MMS_RR_TEXT_READ);
strcpy( cfgStrValues[MMS_CFG_TEXT_MSGID], MMS_RR_TEXT_MSGID);
strcpy( cfgStrValues[MMS_CFG_TEXT_SENT], MMS_RR_TEXT_SENT);
strcpy( cfgStrValues[MMS_CFG_TEXT_YOUR_MSG], MMS_RR_TEXT_YOUR_MSG);
strcpy( cfgStrValues[MMS_CFG_TEXT_WAS_READ], MMS_RR_TEXT_WAS_READ);
strcpy( cfgStrValues[MMS_CFG_TEXT_SUBJECT], MMS_RR_TEXT_SUBJECT);
mSignalRegisterDst(M_FSM_CORE_CONFIG, cfgMain);
MMS_LOG_I(("MMS FSM CORE CONFIG: initialized\n"));
}
static void cfgMain(MmsSignal *sig)
{
MmsConfigInt iKey;
MmsConfigStr sKey;
switch (sig->type)
{
#ifdef MMS_STANDARD_INTERFACE
case MMS_SIG_CORE_GET_CONFIG_INT :
iKey = (MmsConfigInt)sig->u_param1;
if (iKey < 0 || iKey >= MMS_CFG_TOTAL_INT)
{
MMS_LOG_I(("cfgMain: Illegal int key (%d)\n", (int)iKey));
MMSa_getConfigIntResponse(MMS_RESULT_CONFIG_VARIABLE_NOT_FOUND, iKey, 0);
}
else
{
MMSa_getConfigIntResponse(MMS_RESULT_OK, iKey, cfgIntValues[iKey]);
}
break;
case MMS_SIG_CORE_GET_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));
MMSa_getConfigStrResponse(MMS_RESULT_CONFIG_VARIABLE_NOT_FOUND,
sKey, NULL);
}
else
{
#ifdef MMS_RETAIN_ADAPTER_PARAMETERS
char *tmp = NULL;
if (cfgStrValues[sKey] != NULL)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -