1 /** 2 * Copyright(c) 2011 Trusted Logic. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name Trusted Logic nor the names of its 15 * contributors may be used to endorse or promote products derived 16 * from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 32 #ifndef __SMC_PROPERTIES_PARSER_H__ 33 #define __SMC_PROPERTIES_PARSER_H__ 34 35 36 37 #include "s_type.h" 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 44 /* --------------------------------------------------------------------------------- 45 Defines 46 ---------------------------------------------------------------------------------*/ 47 48 #define SYSTEM_SECTION_NAME "Global" 49 #define CONFIG_SERVICE_ID_PROPERTY_NAME "config.s.serviceID" 50 #define CONFIG_PROPERTY_NAME "config." 51 52 53 54 /* --------------------------------------------------------------------------------- 55 types definition 56 ---------------------------------------------------------------------------------*/ 57 58 typedef struct NODE 59 { 60 struct NODE* pLeft; 61 struct NODE* pRight; 62 struct NODE* pNext; 63 struct NODE* pPrevious; 64 char* pName; 65 } NODE; 66 67 typedef struct 68 { 69 NODE* pRoot; 70 NODE* pFirst; 71 } LIST; 72 73 typedef struct 74 { 75 NODE sNode; 76 char* pValue; 77 bool bChecked; /* Whether it has been checked that this property is allowed */ 78 } PROPERTY; 79 80 typedef struct 81 { 82 NODE sNode; 83 struct S_PROPERTY* pProperty; 84 } S_PROPERTY_NODE; 85 86 typedef struct SERVICE_SECTION 87 { 88 NODE sNode; 89 bool inSCF; 90 struct SERVICE_SECTION* pNextInSCF; /* next section defined in config file */ 91 S_UUID sUUID; 92 uint32_t nFlags; 93 char* pComment; 94 void* pFileInfo; /* used to retreive filename and MD5 hash (optional) */ 95 LIST sPublicPropertyList; 96 LIST sPrivatePropertyList; 97 } SERVICE_SECTION; 98 99 typedef struct 100 { 101 char* pComment; 102 LIST sSystemSectionPropertyList; 103 SERVICE_SECTION* pFirstSectionInSCF; /* first section defined in config file */ 104 LIST sDriverSectionList; 105 LIST sPreinstalledSectionList; 106 LIST sSectionList; 107 } CONF_FILE; 108 109 110 111 /* --------------------------------------------------------------------------------- 112 Prototypes 113 ---------------------------------------------------------------------------------*/ 114 115 uint32_t SMCPropStringToInt (char* pValue); 116 char* SMCPropGetSystemProperty (CONF_FILE* pConfFile, char* pPropertyName); 117 uint32_t SMCPropGetSystemPropertyAsInt(CONF_FILE* pConfFile, char* pPropertyName); 118 S_RESULT SMCPropParseConfigFile (char* pConfigFilename,CONF_FILE* pConfFile); 119 120 121 #ifdef __cplusplus 122 } 123 #endif 124 125 #endif /* __SMC_PROPERTIES_PARSER_H__ */ 126