#ifndef L2SU_VERSION_H_INCLUDED #define L2SU_VERSION_H_INCLUDED #include "digest/digest.h" #include #include 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 */