Annotation of embedaddon/strongswan/src/libimcv/pts/components/pts_comp_func_name.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2011-2014 Andreas Steffen
! 3: *
! 4: * HSR Hochschule fuer Technik Rapperswil
! 5: *
! 6: * This program is free software; you can redistribute it and/or modify it
! 7: * under the terms of the GNU General Public License as published by the
! 8: * Free Software Foundation; either version 2 of the License, or (at your
! 9: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 10: *
! 11: * This program is distributed in the hope that it will be useful, but
! 12: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 13: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 14: * for more details.
! 15: */
! 16:
! 17: #include "imcv.h"
! 18: #include "pts/components/pts_comp_func_name.h"
! 19:
! 20: #include <utils/debug.h>
! 21:
! 22: typedef struct private_pts_comp_func_name_t private_pts_comp_func_name_t;
! 23:
! 24: /**
! 25: * Private data of a pts_comp_func_name_t object.
! 26: *
! 27: */
! 28: struct private_pts_comp_func_name_t {
! 29:
! 30: /**
! 31: * Public pts_comp_func_name_t interface.
! 32: */
! 33: pts_comp_func_name_t public;
! 34:
! 35: /**
! 36: * PTS Component Functional Name Vendor ID
! 37: */
! 38: uint32_t vid;
! 39:
! 40: /**
! 41: * PTS Component Functional Name
! 42: */
! 43: uint32_t name;
! 44:
! 45: /**
! 46: * PTS Component Functional Name Qualifier
! 47: */
! 48: uint8_t qualifier;
! 49:
! 50: };
! 51:
! 52: METHOD(pts_comp_func_name_t, get_vendor_id, uint32_t,
! 53: private_pts_comp_func_name_t *this)
! 54: {
! 55: return this->vid;
! 56: }
! 57:
! 58: METHOD(pts_comp_func_name_t, get_name, uint32_t,
! 59: private_pts_comp_func_name_t *this)
! 60: {
! 61: return this->name;
! 62: }
! 63:
! 64: METHOD(pts_comp_func_name_t, get_qualifier, uint8_t,
! 65: private_pts_comp_func_name_t *this)
! 66: {
! 67: return this->qualifier;
! 68: }
! 69:
! 70: METHOD(pts_comp_func_name_t, set_qualifier, void,
! 71: private_pts_comp_func_name_t *this, uint8_t qualifier)
! 72: {
! 73: this->qualifier = qualifier;
! 74: }
! 75:
! 76: static bool equals(private_pts_comp_func_name_t *this,
! 77: private_pts_comp_func_name_t *other)
! 78: {
! 79: if (this->vid != other->vid || this->name != other->name)
! 80: {
! 81: return FALSE;
! 82: }
! 83: if (this->qualifier == PTS_QUALIFIER_UNKNOWN ||
! 84: other->qualifier == PTS_QUALIFIER_UNKNOWN)
! 85: {
! 86: return TRUE;
! 87: }
! 88: /* TODO handle qualifier wildcards */
! 89:
! 90: return this->qualifier == other->qualifier;
! 91: }
! 92:
! 93: METHOD(pts_comp_func_name_t, clone_, pts_comp_func_name_t*,
! 94: private_pts_comp_func_name_t *this)
! 95: {
! 96: private_pts_comp_func_name_t *clone;
! 97:
! 98: clone = malloc_thing(private_pts_comp_func_name_t);
! 99: memcpy(clone, this, sizeof(private_pts_comp_func_name_t));
! 100:
! 101: return &clone->public;
! 102: }
! 103:
! 104: METHOD(pts_comp_func_name_t, log_, void,
! 105: private_pts_comp_func_name_t *this, char *label)
! 106: {
! 107: enum_name_t *names, *types;
! 108: char flags[8];
! 109: int type;
! 110:
! 111: names = imcv_pts_components->get_comp_func_names(imcv_pts_components,
! 112: this->vid);
! 113: types = imcv_pts_components->get_qualifier_type_names(imcv_pts_components,
! 114: this->vid);
! 115: type = imcv_pts_components->get_qualifier(imcv_pts_components,
! 116: &this->public, flags);
! 117:
! 118: if (names && types)
! 119: {
! 120: DBG3(DBG_PTS, "%s%N functional component '%N' [%s] '%N'",
! 121: label, pen_names, this->vid, names, this->name, flags, types, type);
! 122: }
! 123: else
! 124: {
! 125: DBG3(DBG_PTS, "%s0x%06x functional component 0x%08x 0x%02x",
! 126: label, this->vid, this->name, this->qualifier);
! 127: }
! 128: }
! 129:
! 130: METHOD(pts_comp_func_name_t, destroy, void,
! 131: private_pts_comp_func_name_t *this)
! 132: {
! 133: free(this);
! 134: }
! 135:
! 136: /**
! 137: * See header
! 138: */
! 139: pts_comp_func_name_t* pts_comp_func_name_create(uint32_t vid, uint32_t name,
! 140: uint8_t qualifier)
! 141: {
! 142: private_pts_comp_func_name_t *this;
! 143:
! 144: INIT(this,
! 145: .public = {
! 146: .get_vendor_id = _get_vendor_id,
! 147: .get_name = _get_name,
! 148: .get_qualifier = _get_qualifier,
! 149: .set_qualifier = _set_qualifier,
! 150: .equals = (bool(*)(pts_comp_func_name_t*,pts_comp_func_name_t*))equals,
! 151: .clone = _clone_,
! 152: .log = _log_,
! 153: .destroy = _destroy,
! 154: },
! 155: .vid = vid,
! 156: .name = name,
! 157: .qualifier = qualifier,
! 158: );
! 159:
! 160: return &this->public;
! 161: }
! 162:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>