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
|
#ifndef L2SU_VERSION_H_INCLUDED
#define L2SU_VERSION_H_INCLUDED
#include "digest/digest.h"
#include <time.h>
#include <jansson.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
};
#define FEATURE_DEMO (1u << 0)
#define FEATURE_CUSTOM_RES (1u << 1)
#define FEATURE_QUICK_PLAY_SUPPORTED (1u << 2)
#define FEATURE_QUICK_PLAY_SINGLEPLAYER (1u << 3)
#define FEATURE_QUICK_PLAY_MULTIPLAYER (1u << 4)
#define FEATURE_QUICK_PLAY_REALMS (1u << 5)
struct l2_version_download {
char *url;
l2_sha1_digest_t sha1;
size_t size;
};
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);
int l2_version_check_integrity(FILE *fp, l2_sha1_digest_t *digest, size_t sz);
#endif /* include guard */
|