summaryrefslogtreecommitdiffstats
path: root/src/dbi.h
blob: f7aaea308b5fd29a1901aea569bdb7574011508a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#ifndef __OG_DBI
#define __OG_DBI

#include <dbi/dbi.h>
#include <stdbool.h>
#include <sys/stat.h>

struct og_dbi_config {
	const char	*user;
	const char	*pass;
	const char	*ip;
	const char	*port;
	const char	*name;
};

struct og_dbi {
	dbi_conn	conn;
	dbi_inst	inst;
};

struct og_dbi *og_dbi_open(struct og_dbi_config *config);
void og_dbi_close(struct og_dbi *db);

#define OG_DB_COMPUTER_NAME_MAXLEN	100
#define OG_DB_CENTER_NAME_MAXLEN	100
#define OG_DB_ROOM_NAME_MAXLEN		100
#define OG_DB_FOLDER_NAME_MAXLEN	100
#define OG_DB_ROOM_LOC_MAXLEN		255
#define OG_DB_SERIAL_NUMBER_MAXLEN	25
#define OG_DB_IMAGE_DESCRIPTION_MAXLEN 	250
#define OG_DB_REPO_NAME_MAXLEN 	250
#define OG_DB_PART_NAME_MAXLEN 	250
#define OG_DB_IMAGE_NAME_MAXLEN 50
#define OG_DB_FILESYSTEM_MAXLEN 16
#define OG_DB_NETDRIVER_MAXLEN	30
#define OG_DB_NETIFACE_MAXLEN	4
#define OG_DB_LIVEDIR_MAXLEN	50
#define OG_DB_INT8_MAXLEN	8
#define OG_DB_BOOT_MAXLEN	30
#define OG_DB_INT_MAXLEN	11
#define OG_DB_MAC_MAXLEN	15
#define OG_DB_IP_MAXLEN		15
#define OG_DB_SMALLINT_MAXLEN	6
#define OG_DB_COMMENT_MAXLEN	250

struct og_image_legacy {
	char software_id[OG_DB_INT_MAXLEN + 1];
	char image_id[OG_DB_INT_MAXLEN + 1];
	char name[OG_DB_IMAGE_NAME_MAXLEN + 1];
	char repo[OG_DB_IP_MAXLEN + 1];
	char part[OG_DB_SMALLINT_MAXLEN + 1];
	char disk[OG_DB_SMALLINT_MAXLEN + 1];
	char code[OG_DB_INT8_MAXLEN + 1];
};

#define OG_DB_CHECKSUM		128

struct og_image {
	char name[OG_DB_IMAGE_NAME_MAXLEN + 1];
	char description[OG_DB_IMAGE_DESCRIPTION_MAXLEN + 1];
	char checksum[OG_DB_CHECKSUM + 1];
	uint64_t software_id;
	uint64_t center_id;
	uint64_t datasize;
	uint64_t size;
	long int lastupdate;
	uint64_t group_id;
	uint64_t repo_id;
	uint64_t type;
	uint64_t id;
	uint32_t perms;
};

struct og_legacy_partition {
	char partition[OG_DB_SMALLINT_MAXLEN + 1];
	char code[OG_DB_PART_NAME_MAXLEN + 1];
	char size[OG_DB_INT_MAXLEN + 1];
	char filesystem[OG_DB_FILESYSTEM_MAXLEN + 1];
	char format[2]; /* Format is a boolean 0 or 1 => length is 2 */
};

struct og_computer {
	unsigned int	procedure_id;
	unsigned int	hardware_id;
	unsigned int	server_id;
	unsigned int	repo_id;
	unsigned int	center;
	unsigned int	room;
	unsigned int	folder_id;
	unsigned int	id;
	bool		maintenance;
	bool		remote;
	char		serial_number[OG_DB_SERIAL_NUMBER_MAXLEN + 1];
	char		netdriver[OG_DB_NETDRIVER_MAXLEN + 1];
	char		name[OG_DB_COMPUTER_NAME_MAXLEN + 1];
	char		netiface[OG_DB_NETIFACE_MAXLEN + 1];
	char		livedir[OG_DB_LIVEDIR_MAXLEN + 1];
	char		netmask[OG_DB_IP_MAXLEN + 1];
	char		boot[OG_DB_BOOT_MAXLEN + 1];
	char		mac[OG_DB_MAC_MAXLEN + 1];
	char		ip[OG_DB_IP_MAXLEN + 1];
};

struct og_room {
	uint32_t	id;
	uint32_t	center;
	uint32_t	folder_id;
	char		location[OG_DB_ROOM_LOC_MAXLEN + 1];
	char		name[OG_DB_ROOM_NAME_MAXLEN + 1];
	char		gateway[OG_DB_IP_MAXLEN + 1];
	char		netmask[OG_DB_IP_MAXLEN + 1];
	char		ntp[OG_DB_IP_MAXLEN + 1];
	char		dns[OG_DB_IP_MAXLEN + 1];
	bool		remote;
};

struct og_center {
	uint32_t	id;
	char		name[OG_DB_CENTER_NAME_MAXLEN + 1];
	char		comment[OG_DB_COMMENT_MAXLEN + 1];
};

struct og_folder {
	unsigned int	id;
	unsigned int	room;
	unsigned int	center;
	char		name[OG_DB_FOLDER_NAME_MAXLEN + 1];
};

struct og_repository {
	unsigned int	center;
	char	name[OG_DB_REPO_NAME_MAXLEN];
	char	ip[OG_DB_IP_MAXLEN];
};

struct in_addr;
int og_dbi_get_computer_info(struct og_dbi *dbi, struct og_computer *computer,
			     struct in_addr addr);
int og_dbi_get_room_info(struct og_dbi *dbi, struct og_room *room,
			 uint32_t room_id);
int og_dbi_get_center_info(struct og_dbi *dbi, struct og_center *center);
bool og_dbi_get_image(struct og_dbi *dbi, struct og_image *image);
int og_dbi_add_image(struct og_dbi *dbi, struct og_image *image);

int og_dbi_schema_update(void);

int og_dbi_get_repository_ip(const struct og_dbi *dbi, const uint64_t image_id,
			     char *repository_ip);

#endif