caniadd/src/api.h

92 lines
2.2 KiB
C

#ifndef _API_H
#define _API_H
#include <stdint.h>
#include <time.h>
#include "error.h"
/* Maximum length of one response/request */
#define API_BUFSIZE 1400
/* Session key maximum size, including '\0' */
#define API_SMAXSIZE 16
/* The session timeout in miliseconds */
#define API_TIMEOUT 30 * 60 * 1000
/* How many miliseconds to wait between sends */
#define API_SENDWAIT 2 * 1000
/* The number of packets that are exccempt from the ratelimit */
#define API_FREESEND 5
/* Long term wait between sends */
#define API_SENDWAIT_LONG 4 * 1000
/* After this many packets has been sent, use the longterm ratelimit */
#define API_LONGTERM_PACKETS 100
enum mylist_state {
MYLIST_STATE_UNKNOWN = 0,
MYLIST_STATE_INTERNAL,
MYLIST_STATE_EXTERNAL,
MYLIST_STATE_DELETED,
MYLIST_STATE_REMOTE,
};
enum file_state {
FILE_STATE_NORMAL = 0,
FILE_STATE_CORRUPT,
FILE_STATE_SELF_EDIT,
FILE_STATE_SELF_RIP = 10,
FILE_STATE_ON_DVD,
FILE_STATE_ON_VHS,
FILE_STATE_ON_TV,
FILE_STATE_IN_THEATERS,
FILE_STATE_STREAMED,
FILE_STATE_OTHER = 100,
};
struct api_version_result {
char version_str[40];
};
struct api_auth_result {
union {
char session_key[API_SMAXSIZE];
/* free() */
char *banned_reason;
};
};
struct api_uptime_result {
int32_t ms;
};
struct api_mylistadd_result {
union {
uint64_t new_id;
struct {
uint64_t lid, fid, eid, aid, gid, date, viewdate;
/* free() if != NULL ofc */
char *storage, *source, *other;
enum mylist_state state;
enum file_state filestate;
};
};
};
#define e(n) struct api_##n##_result n
struct api_result {
uint16_t code;
union {
struct api_version_result version;
struct api_auth_result auth;
struct api_uptime_result uptime;
e(mylistadd);
};
};
#undef e
enum error api_init(bool auth);
void api_free();
enum error api_cmd_version(struct api_result *res);
enum error api_cmd_uptime(struct api_result *res);
enum error api_cmd_mylistadd(int64_t size, const uint8_t *hash,
enum mylist_state fstate, bool watched, struct api_result *res);
#endif /* _API_H */