1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /* 18 * Import and export general routing data using a XML file. 19 */ 20 #pragma once 21 #include "NfcJniUtil.h" 22 #include "nfa_api.h" 23 #include <libxml/parser.h> 24 #include <vector> 25 #include <string> 26 27 28 /***************************************************************************** 29 ** 30 ** Name: RouteData 31 ** 32 ** Description: Base class for every kind of route data. 33 ** 34 *****************************************************************************/ 35 class RouteData 36 { 37 public: 38 enum RouteType {ProtocolRoute, TechnologyRoute}; 39 RouteType mRouteType; 40 41 protected: 42 RouteData (RouteType routeType) : mRouteType (routeType) 43 {} 44 }; 45 46 47 48 49 /***************************************************************************** 50 ** 51 ** Name: RouteDataForProtocol 52 ** 53 ** Description: Data for protocol routes. 54 ** 55 *****************************************************************************/ 56 class RouteDataForProtocol : public RouteData 57 { 58 public: 59 int mNfaEeHandle; //for example 0x4f3, 0x4f4 60 bool mSwitchOn; 61 bool mSwitchOff; 62 bool mBatteryOff; 63 tNFA_PROTOCOL_MASK mProtocol; 64 65 RouteDataForProtocol () : RouteData (ProtocolRoute), mNfaEeHandle (NFA_HANDLE_INVALID), 66 mSwitchOn (false), mSwitchOff (false), mBatteryOff (false), 67 mProtocol (0) 68 {} 69 }; 70 71 72 /***************************************************************************** 73 ** 74 ** Name: RouteDataForTechnology 75 ** 76 ** Description: Data for technology routes. 77 ** 78 *****************************************************************************/ 79 class RouteDataForTechnology : public RouteData 80 { 81 public: 82 int mNfaEeHandle; //for example 0x4f3, 0x4f4 83 bool mSwitchOn; 84 bool mSwitchOff; 85 bool mBatteryOff; 86 tNFA_TECHNOLOGY_MASK mTechnology; 87 88 RouteDataForTechnology () : RouteData (TechnologyRoute), mNfaEeHandle (NFA_HANDLE_INVALID), 89 mSwitchOn (false), mSwitchOff (false), mBatteryOff (false), 90 mTechnology (0) 91 {} 92 }; 93 94 95 /*****************************************************************************/ 96 /*****************************************************************************/ 97 98 99 /***************************************************************************** 100 ** 101 ** Name: AidBuffer 102 ** 103 ** Description: Buffer to store AID after converting a string of hex 104 ** values to bytes. 105 ** 106 *****************************************************************************/ 107 class AidBuffer 108 { 109 public: 110 111 /******************************************************************************* 112 ** 113 ** Function: AidBuffer 114 ** 115 ** Description: Parse a string of hex numbers. Store result in an array of 116 ** bytes. 117 ** aid: string of hex numbers. 118 ** 119 ** Returns: None. 120 ** 121 *******************************************************************************/ 122 AidBuffer (std::string& aid); 123 124 125 /******************************************************************************* 126 ** 127 ** Function: ~AidBuffer 128 ** 129 ** Description: Release all resources. 130 ** 131 ** Returns: None. 132 ** 133 *******************************************************************************/ 134 ~AidBuffer (); 135 136 137 UINT8* buffer () {return mBuffer;}; 138 int length () {return mBufferLen;}; 139 140 private: 141 UINT8* mBuffer; 142 UINT32 mBufferLen; 143 }; 144 145 146 /*****************************************************************************/ 147 /*****************************************************************************/ 148 149 150 /***************************************************************************** 151 ** 152 ** Name: RouteDataSet 153 ** 154 ** Description: Import and export general routing data using a XML file. 155 ** See /data/bcm/param/route.xml 156 ** 157 *****************************************************************************/ 158 class RouteDataSet 159 { 160 public: 161 typedef std::vector<RouteData*> Database; 162 enum DatabaseSelection {DefaultRouteDatabase, SecElemRouteDatabase}; 163 164 165 /******************************************************************************* 166 ** 167 ** Function: ~RouteDataSet 168 ** 169 ** Description: Release all resources. 170 ** 171 ** Returns: None. 172 ** 173 *******************************************************************************/ 174 ~RouteDataSet (); 175 176 177 /******************************************************************************* 178 ** 179 ** Function: initialize 180 ** 181 ** Description: Initialize resources. 182 ** 183 ** Returns: True if ok. 184 ** 185 *******************************************************************************/ 186 bool initialize (); 187 188 189 /******************************************************************************* 190 ** 191 ** Function: import 192 ** 193 ** Description: Import data from an XML file. Fill the database. 194 ** 195 ** Returns: True if ok. 196 ** 197 *******************************************************************************/ 198 bool import (); 199 200 201 /******************************************************************************* 202 ** 203 ** Function: getDatabase 204 ** 205 ** Description: Obtain a database of routing data. 206 ** selection: which database. 207 ** 208 ** Returns: Pointer to database. 209 ** 210 *******************************************************************************/ 211 Database* getDatabase (DatabaseSelection selection); 212 213 214 /******************************************************************************* 215 ** 216 ** Function: saveToFile 217 ** 218 ** Description: Save XML data from a string into a file. 219 ** routesXml: XML that represents routes. 220 ** 221 ** Returns: True if ok. 222 ** 223 *******************************************************************************/ 224 static bool saveToFile (const char* routesXml); 225 226 227 /******************************************************************************* 228 ** 229 ** Function: loadFromFile 230 ** 231 ** Description: Load XML data from file into a string. 232 ** routesXml: string to receive XML data. 233 ** 234 ** Returns: True if ok. 235 ** 236 *******************************************************************************/ 237 static bool loadFromFile (std::string& routesXml); 238 239 240 /******************************************************************************* 241 ** 242 ** Function: deleteFile 243 ** 244 ** Description: Delete route data XML file. 245 ** 246 ** Returns: True if ok. 247 ** 248 *******************************************************************************/ 249 static bool deleteFile (); 250 251 /******************************************************************************* 252 ** 253 ** Function: printDiagnostic 254 ** 255 ** Description: Print some diagnostic output. 256 ** 257 ** Returns: None. 258 ** 259 *******************************************************************************/ 260 void printDiagnostic (); 261 262 private: 263 Database mSecElemRouteDatabase; //routes when NFC service selects sec elem 264 Database mDefaultRouteDatabase; //routes when NFC service deselects sec elem 265 static const char* sConfigFile; 266 static const bool sDebug = false; 267 268 269 /******************************************************************************* 270 ** 271 ** Function: deleteDatabase 272 ** 273 ** Description: Delete all routes stored in all databases. 274 ** 275 ** Returns: None. 276 ** 277 *******************************************************************************/ 278 void deleteDatabase (); 279 280 281 /******************************************************************************* 282 ** 283 ** Function: importProtocolRoute 284 ** 285 ** Description: Parse data for protocol routes. 286 ** element: XML node for one protocol route. 287 ** database: store data in this database. 288 ** 289 ** Returns: None. 290 ** 291 *******************************************************************************/ 292 void importProtocolRoute (xmlNodePtr& element, Database& database); 293 294 295 /******************************************************************************* 296 ** 297 ** Function: importTechnologyRoute 298 ** 299 ** Description: Parse data for technology routes. 300 ** element: XML node for one technology route. 301 ** database: store data in this database. 302 ** 303 ** Returns: None. 304 ** 305 *******************************************************************************/ 306 void importTechnologyRoute (xmlNodePtr& element, Database& database); 307 }; 308 309