📄 settings.c
字号:
/*************************************************************************//* module: Communication Services, WSP Settings Functions *//* file: src/xpt/all/settings.c *//* target system: all *//* target OS: all *//*************************************************************************//* * Copyright Notice * Copyright (c) Ericsson, IBM, Lotus, Matsushita Communication * Industrial Co., Ltd., Motorola, Nokia, Openwave Systems, Inc., * Palm, Inc., Psion, Starfish Software, Symbian, Ltd. (2001). * All Rights Reserved. * Implementation of all or part of any Specification may require * licenses under third party intellectual property rights, * including without limitation, patent rights (such a third party * may or may not be a Supporter). The Sponsors of the Specification * are not responsible and shall not be held responsible in any * manner for identifying or failing to identify any or all such * third party intellectual property rights. * * THIS DOCUMENT AND THE INFORMATION CONTAINED HEREIN ARE PROVIDED * ON AN "AS IS" BASIS WITHOUT WARRANTY OF ANY KIND AND ERICSSON, IBM, * LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO. LTD, MOTOROLA, * NOKIA, PALM INC., PSION, STARFISH SOFTWARE AND ALL OTHER SYNCML * SPONSORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT * SHALL ERICSSON, IBM, LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO., * LTD, MOTOROLA, NOKIA, PALM INC., PSION, STARFISH SOFTWARE OR ANY * OTHER SYNCML SPONSOR BE LIABLE TO ANY PARTY FOR ANY LOSS OF * PROFITS, LOSS OF BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF * BUSINESS, OR FOR DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL, * PUNITIVE OR CONSEQUENTIAL DAMAGES OF ANY KIND IN CONNECTION WITH * THIS DOCUMENT OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE. * * The above notice and this paragraph must be included on all copies * of this document that are made. * *//* * Version Label * * RELEASE ??? CANDIDATE ? * 13.06.2000 */#include "syncml_tk_prefix_file.h" // %%% luz: needed for precompiled headers in eVC++#include <settings.h>#include <wsputil.h>#include <wspdef.h> /* For atoi on palm *///#include <xptTransport.h> /* For metadata parsing */#include <xpt.h> /* For SML_ERRs */#include <xptport.h>/*****************************************************************************//*****************************************************************************//** **//** Private Implementation Methods **//** **//*****************************************************************************//*****************************************************************************//** * settingsInitialize * - parses the settings string into WspSettings_t structure * - updates protocol object to point to the settings structure * * IN: szSettings A string containing WSP settings parameters * * OUT: settingPtr Updated to point to a settings structure. * * RETURN: * An indication of whether the settings were successfully initialized. * If any required settings are missing, the initialization will fail. * **/unsigned int settingsInitialize(const char *szSettings, WspSettings_t **settingPtr) { unsigned int rc = SML_ERR_OK; WspSettings_t *settings = NULL; char *tempValue = NULL; XPTDEBUG(("settingsInitialize(%s, %lx)\n", szSettings, (unsigned long) settingPtr)); if (settingPtr == NULL) return SML_ERR_A_XPT_INVALID_PARM; settings = (WspSettings_t *) xppMalloc (sizeof(WspSettings_t)); if (settings == NULL) return SML_ERR_A_XPT_MEMORY; xppMemset(settings, 0, sizeof(WspSettings_t)); /* * Should we return 'All Parms processed', 'Required Parms and Some optional * parms processed', and 'Required Parms Missing' to give the user the choice * of letting it go without all the optional parms? Or should we fail to * initialize if any of the inputted parms cannot be processed? * * Currently we only fail if we don't get all the required parms... */ /* Process required settings */ settings->host = getMetaInfoValue(szSettings, "syncServer"); if (settings->host == NULL) { xppFree(settings); setLastError(SML_ERR_A_XPT_INVALID_PARM, "required wsp setting 'syncServer' is missing."); return SML_ERR_A_XPT_INVALID_PARM; } /* End missing syncServer setting */ /* Some HTTP settings are required, too */ rc = httpInitialize(szSettings, &(settings->httpParms)); if (rc != SML_ERR_OK) { settingsRelease(settings); return SML_ERR_A_XPT_INVALID_PARM; } /* Process optional settings */ tempValue = getMetaInfoValue(szSettings, "createSession"); if ((tempValue != NULL) && (!xppStrcmp(tempValue, "1"))) settings->createSession = AWSP_TRUE; else settings->createSession = AWSP_FALSE; xppFree(tempValue); settings->servAccessPtParms = getSapParms(szSettings, settings->createSession); settings->requestedCapabilities = getCapParms(szSettings); /* Store parsed settings into protocol handle */ *settingPtr = settings;#ifdef WSP_DEBUG dumpSettings(settings);#endif return rc;} /* End settingsInitialize() *//** * settingsRelease * - xppFrees storage for WspSettings_t structure * - updates protocol object to nullify settings reference * * IN: settings A pointer to a settings structure * **/void settingsRelease(WspSettings_t *settings) { if (settings == NULL) return; XPTDEBUG(("settingsRelease(%lx)\n", (unsigned long) settings)); httpRelease(settings->httpParms); releaseCapParms(settings->requestedCapabilities); releaseSapParms(settings->servAccessPtParms); xppFree(settings->host); xppFree(settings);} /* End of settingsRelease() *//** * getSapParms * - parses the settings string into an SapParameters structure * * IN: szSettings A string containing WSP settings parameters * sessionPort An indication of whether the settings are * requesting a session or not. This influences * the default port of the service access point. * RETURN: * A pointer to the SapParameters structure containing the parsed * Service Access Point settings. * **/SapParameters *getSapParms(const char *szSettings, awsp_BOOL sessionPort) { awsp_BOOL hasWapSettings = AWSP_FALSE; char *tempValue = NULL; SapParameters *parms = NULL; XPTDEBUG((" getSapParms(%s, %i)\n", szSettings, (int) sessionPort)); parms = (SapParameters *) xppMalloc(sizeof(SapParameters)); /** * Initialize default values to take for missing WAP parameters. * I'm assuming a session port, how do i determine if this should default * to a connectionless port (9200)?? **/ parms->bearerType = AWSP_DEFAULT_BEARER; parms->addressType = AWSP_DEFAULT_ADDRESS; parms->serverAddress = ""; if (sessionPort) parms->serverPort = 9201; else parms->serverPort = 9200; parms->clientAddress = ""; parms->clientPort = parms->serverPort; tempValue = getMetaInfoValue(szSettings, "wapBearerType"); if (tempValue != NULL) { parms->bearerType = atoi(tempValue); hasWapSettings = AWSP_TRUE; } xppFree(tempValue); tempValue = getMetaInfoValue(szSettings, "wapAddressType"); if (tempValue != NULL) { parms->addressType = atoi(tempValue); hasWapSettings = AWSP_TRUE; } xppFree(tempValue); parms->serverAddress = getMetaInfoValue(szSettings, "wapServerAddr"); if (parms->serverAddress != NULL) hasWapSettings = AWSP_TRUE; tempValue = getMetaInfoValue(szSettings, "wapServerPort"); if (tempValue != NULL) { parms->serverPort = atoi(tempValue); hasWapSettings = AWSP_TRUE; } xppFree(tempValue); parms->clientAddress = getMetaInfoValue(szSettings, "wapClientAddr"); if (parms->clientAddress != NULL) hasWapSettings = AWSP_TRUE; tempValue = getMetaInfoValue(szSettings, "wapClientPort"); if (tempValue != NULL) { parms->clientPort = atoi(tempValue); hasWapSettings = AWSP_TRUE; } xppFree(tempValue); if (hasWapSettings == AWSP_FALSE) { xppFree(parms); parms = NULL; } return parms;} /* End of getSapParms() *//** * releaseSapParms * - xppFrees the storage associate with the input SapParameters structure. * - nullifies the input pointer to the structure. * * IN: sapParms Address of the pointer to the SapParameters structure * **/void releaseSapParms(SapParameters *sapParms) { XPTDEBUG((" releaseSapParms(%lx)\n", (unsigned long) sapParms)); if (sapParms == NULL) return; if (!xppStrcmp(sapParms->serverAddress, "")) xppFree(sapParms->serverAddress); if (!xppStrcmp(sapParms->clientAddress, "")) xppFree(sapParms->clientAddress); xppFree(sapParms);} /* End of releaseSapParms() *//** * getCapParms * - parses the settings string into an awsp_Capabilities object to * represent the requested capabilities. * * IN: szSettings A string containing WSP settings parameters * RETURN: * A pointer to the awsp_Capabilities structure containing the parsed * capabilities negotiation settings. * **/awsp_Capabilities *getCapParms(const char *szSettings) { awsp_BOOL hasCapSettings = AWSP_FALSE; awsp_Capabilities *parms = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -