Annotation of embedaddon/strongswan/src/libimcv/swima/swima_record.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2017 Andreas Steffen
! 3: * HSR Hochschule fuer Technik Rapperswil
! 4: *
! 5: * This program is free software; you can redistribute it and/or modify it
! 6: * under the terms of the GNU General Public License as published by the
! 7: * Free Software Foundation; either version 2 of the License, or (at your
! 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 9: *
! 10: * This program is distributed in the hope that it will be useful, but
! 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 13: * for more details.
! 14: */
! 15:
! 16: #include "swima_record.h"
! 17: #include "swima_data_model.h"
! 18:
! 19: typedef struct private_swima_record_t private_swima_record_t;
! 20:
! 21: /**
! 22: * Private data of a swima_record_t object.
! 23: *
! 24: */
! 25: struct private_swima_record_t {
! 26:
! 27: /**
! 28: * Public swima_record_t interface.
! 29: */
! 30: swima_record_t public;
! 31:
! 32: /**
! 33: * Record ID
! 34: */
! 35: uint32_t record_id;
! 36:
! 37: /**
! 38: * Software Identity
! 39: */
! 40: chunk_t sw_id;
! 41:
! 42: /**
! 43: * Optional Software Locator
! 44: */
! 45: chunk_t sw_locator;
! 46:
! 47: /**
! 48: * Data Model
! 49: */
! 50: pen_type_t data_model;
! 51:
! 52: /**
! 53: * Source ID
! 54: */
! 55: uint8_t source_id;
! 56:
! 57: /**g
! 58: * Optional Software Inventory Evidence Record
! 59: */
! 60: chunk_t record;
! 61:
! 62: /**
! 63: * Reference count
! 64: */
! 65: refcount_t ref;
! 66: };
! 67:
! 68: METHOD(swima_record_t, get_record_id, uint32_t,
! 69: private_swima_record_t *this)
! 70: {
! 71: return this->record_id;
! 72: }
! 73:
! 74: METHOD(swima_record_t, get_sw_id, chunk_t,
! 75: private_swima_record_t *this, chunk_t *sw_locator)
! 76: {
! 77: if (sw_locator)
! 78: {
! 79: *sw_locator = this->sw_locator;
! 80: }
! 81: return this->sw_id;
! 82: }
! 83:
! 84: METHOD(swima_record_t, set_data_model, void,
! 85: private_swima_record_t *this, pen_type_t data_model)
! 86: {
! 87: this->data_model = data_model;
! 88: }
! 89:
! 90: METHOD(swima_record_t, get_data_model, pen_type_t,
! 91: private_swima_record_t *this)
! 92: {
! 93: return this->data_model;
! 94: }
! 95:
! 96: METHOD(swima_record_t, set_source_id, void,
! 97: private_swima_record_t *this, uint8_t source_id)
! 98: {
! 99: this->source_id = source_id;
! 100: }
! 101:
! 102: METHOD(swima_record_t, get_source_id, uint8_t,
! 103: private_swima_record_t *this)
! 104: {
! 105: return this->source_id;
! 106: }
! 107:
! 108: METHOD(swima_record_t, set_record, void,
! 109: private_swima_record_t *this, chunk_t record)
! 110: {
! 111: chunk_free(&this->record);
! 112: this->record = chunk_clone(record);
! 113: }
! 114:
! 115: METHOD(swima_record_t, get_record, chunk_t,
! 116: private_swima_record_t *this)
! 117: {
! 118: return this->record;
! 119: }
! 120:
! 121: METHOD(swima_record_t, get_ref, swima_record_t*,
! 122: private_swima_record_t *this)
! 123: {
! 124: ref_get(&this->ref);
! 125: return &this->public;
! 126: }
! 127:
! 128: METHOD(swima_record_t, destroy, void,
! 129: private_swima_record_t *this)
! 130: {
! 131: if (ref_put(&this->ref))
! 132: {
! 133: free(this->sw_id.ptr);
! 134: free(this->sw_locator.ptr);
! 135: free(this->record.ptr);
! 136: free(this);
! 137: }
! 138: }
! 139:
! 140: /**
! 141: * See header
! 142: */
! 143: swima_record_t *swima_record_create(uint32_t record_id, chunk_t sw_id,
! 144: chunk_t sw_locator)
! 145: {
! 146: private_swima_record_t *this;
! 147:
! 148: INIT(this,
! 149: .public = {
! 150: .get_record_id = _get_record_id,
! 151: .get_sw_id = _get_sw_id,
! 152: .set_data_model = _set_data_model,
! 153: .get_data_model = _get_data_model,
! 154: .set_source_id = _set_source_id,
! 155: .get_source_id = _get_source_id,
! 156: .set_record = _set_record,
! 157: .get_record = _get_record,
! 158: .get_ref = _get_ref,
! 159: .destroy = _destroy,
! 160: },
! 161: .record_id = record_id,
! 162: .data_model = swima_data_model_iso_2015_swid_xml,
! 163: .sw_id = chunk_clone(sw_id),
! 164: .ref = 1,
! 165: );
! 166:
! 167: if (sw_locator.len > 0)
! 168: {
! 169: this->sw_locator = chunk_clone(sw_locator);
! 170: }
! 171:
! 172: return &this->public;
! 173: }
! 174:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>