      1 /**
      2  *  ---------
      3  * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
      4  * |#       #|
      5  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
      6  * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
      7  *  ---------
      8  *
      9  *  This file is part of OpenSCDP.
     10  *
     11  *  OpenSCDP is free software; you can redistribute it and/or modify
     12  *  it under the terms of the GNU General Public License version 2 as
     13  *  published by the Free Software Foundation.
     14  *
     15  *  OpenSCDP is distributed in the hope that it will be useful,
     16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18  *  GNU General Public License for more details.
     19  *
     20  *  You should have received a copy of the GNU General Public License
     21  *  along with OpenSCDP; if not, write to the Free Software
     22  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     23  *
     24  * @fileoverview Implementation of a ISO 7816-4 file system simulation
     25  */
     26
     27
     28
     29 /**
     30  * Construct a file system node
     31  *
     32  * @class Abstract class for file system nodes
     33  * @constructor
     34  */
     35 function FSNode(fcp) {
     36 	this.parent = null;
     37 	this.fcp = fcp;
     38 }
     39
     40 exports.FSNode = FSNode;
     41
     42
     43
     44 /**
     45  * Sets the parent for this node
     46  *
     47  * @param {DF} the parent node
     48  */
     49 FSNode.prototype.setParent = function(parent) {
     50 	if ((typeof(parent) != "object") && !(parent.isDF())) {
     51 		throw new GPError("FSNode", GPError.INVALID_TYPE, 0, "Argument parent must be of type DF");
     52 	}
     53 	this.parent = parent;
     54 }
     55
     56
     57
     58 /**
     59  * Gets the parent node for this node
     60  *
     61  * @type DF
     62  * @returns the parent node
     63  */
     64 FSNode.prototype.getParent = function() {
     65 	return this.parent;
     66 }
     67
     68
     69
     70 /**
     71  * Gets the file control parameter for this node
     72  *
     73  * @type FCP
     74  * @returns the FCP
     75  */
     76 FSNode.prototype.getFCP = function() {
     77 	return this.fcp;
     78 }
     79
     80
     81
     82 /**
     83  * Returns true if this is a DF
     84  *
     85  * @type boolean
     86  * @return true if this is a DF
     87  */
     88 FSNode.prototype.isDF = function() {
     89 	return false;
     90 }
     91
     92
     93
     94 /**
     95  * Returns a human readible string
     96  *
     97  * @type String
     98  * @return a string
     99  */
    100 FSNode.prototype.toString = function() {
    101 	if (!this.fcp || !this.fcp.getFID()) {
    102 		return "FSNode";
    103 	}
    104 	return this.fcp.getFID().toString(HEX);
    105 }
    106
    107