aboutsummaryrefslogtreecommitdiffstats
path: root/src/version.h
blob: 7b02c2142b56fd3504d208cdfc2c663481324455 (plain) (blame)
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 */