bcfa8c885467fe17f2daf1d24e4547640db39f6d
[strongswan.git] / src / libimcv / tcg / pts / pts_database.c
1 /*
2 * Copyright (C) 2011 Sansar Choinyambuu
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 "pts_database.h"
17
18 #include <debug.h>
19 #include <crypto/hashers/hasher.h>
20
21
22 typedef struct private_pts_database_t private_pts_database_t;
23
24 /**
25 * Private data of a pts_database_t object.
26 *
27 */
28 struct private_pts_database_t {
29
30 /**
31 * Public pts_database_t interface.
32 */
33 pts_database_t public;
34
35 /**
36 * database instance
37 */
38 database_t *db;
39
40 };
41
42 METHOD(pts_database_t, create_file_enumerator, enumerator_t*,
43 private_pts_database_t *this, char *product)
44 {
45 enumerator_t *e;
46
47 /* look for all entries belonging to a product in the files table */
48 e = this->db->query(this->db,
49 "SELECT f.id, f.type, f.path FROM files AS f "
50 "JOIN product_file AS pf ON f.id = pf.file "
51 "JOIN products AS p ON p.id = pf.product "
52 "WHERE p.name = ?",
53 DB_TEXT, product, DB_INT, DB_INT, DB_TEXT);
54 return e;
55 }
56
57 METHOD(pts_database_t, destroy, void,
58 private_pts_database_t *this)
59 {
60 this->db->destroy(this->db);
61 free(this);
62 }
63
64 /**
65 * See header
66 */
67 pts_database_t *pts_database_create(char *uri)
68 {
69 private_pts_database_t *this;
70
71 INIT(this,
72 .public = {
73 .create_file_enumerator = _create_file_enumerator,
74 .destroy = _destroy,
75 },
76 .db = lib->db->create(lib->db, uri),
77 );
78
79 if (!this->db)
80 {
81 DBG1(DBG_TNC, "failed to connect to PTS file measurement database '%s'",
82 uri);
83 free(this);
84 return NULL;
85 }
86
87 return &this->public;
88 }
89