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
|
#ifndef L2SU_VERSION_H_INCLUDED
#define L2SU_VERSION_H_INCLUDED
#include "digest/digest.h"
#include <time.h>
#include <jansson.h>
#include <stdbool.h>
enum {
VERSION_SUCCESS,
VERSION_EFORMAT,
VERSION_EJSON,
VERSION_EALLOC,
VERSION_ERRNO,
VERSION_EDOWNLOAD,
VERSION_ENOTFOUND,
VERSION_ERECURSE
};
struct l2_version_remote {
struct l2_version_remote *next;
struct l2_version_remote *prev;
char *id;
char *type;
char *url;
l2_sha1_digest_t sha1;
json_int_t compliance_level;
time_t update_time;
time_t release_time;
};
enum {
VERSION_ARG_ACTION_ALLOW,
VERSION_ARG_ACTION_DISALLOW
};
enum {
VERSION_DOWNLOAD_CLIENT,
VERSION_DOWNLOAD_SERVER,
VERSION_DOWNLOAD_WINDOWS_SERVER,
VERSION_DOWNLOAD_CLIENT_MAPPINGS,
VERSION_DOWNLOAD_SERVER_MAPPINGS,
VERSION_DOWNLOAD_MAX
};
typedef bool (l2_version_feature_match_proc_t)(const char *name, json_t *val);
struct l2_version_download {
char *url;
l2_sha1_digest_t sha1;
size_t size;
};
struct l2_version_library {
char *url;
char *artifactpath;
char *fullpath;
l2_sha1_digest_t digest;
bool has_digest;
size_t size;
struct {
enum {
EXTRACT_NONE, /* do not extract anything */
EXTRACT_OLD, /* extract whole jar, preserving entries that are not excluded */
EXTRACT_NEW /* extract only .dll, .so, .dylib from jar */
} extracttype;
char **exclude;
} extract;
struct l2_version_library *next;
};
struct l2_version {
json_t *data;
struct l2_version *inherit;
};
extern const char *const l2_version__messages[];
#define l2_version_strerror(_en) l2_version__messages[(_en)]
unsigned l2_version_load_remote(void);
unsigned l2_version_load_local(const char *name, json_t **ojs);
enum l2_version_check_result {
RULE_CHECK_ERROR = -1,
RULE_CHECK_DEFAULT,
RULE_CHECK_ALLOW,
RULE_CHECK_DISALLOW,
} l2_version_check_rules(json_t *rules, l2_version_feature_match_proc_t *matcher);
unsigned l2_version_collect_libraries(json_t *version, struct l2_version_library **libs, l2_version_feature_match_proc_t *feature_matcher);
unsigned l2_version_download_libraries(struct l2_version_library *libs);
void l2_version_free_libraries(struct l2_version_library *libs);
unsigned l2_version_download_jar(json_t *version, const char *specifier, char **path);
#endif /* include guard */
|