1
2#ifndef __DMAP_HELPERS_H__
3#define __DMAP_HELPERS_H__
4
5#include <event.h>
6#include "evhttp/evhttp.h"
7
8#include "db.h"
9
10enum dmap_type
11  {
12    DMAP_TYPE_UBYTE   = 0x01,
13    DMAP_TYPE_BYTE    = 0x02,
14    DMAP_TYPE_USHORT  = 0x03,
15    DMAP_TYPE_SHORT   = 0x04,
16    DMAP_TYPE_UINT    = 0x05,
17    DMAP_TYPE_INT     = 0x06,
18    DMAP_TYPE_ULONG   = 0x07,
19    DMAP_TYPE_LONG    = 0x08,
20    DMAP_TYPE_STRING  = 0x09,
21    DMAP_TYPE_DATE    = 0x0a,
22    DMAP_TYPE_VERSION = 0x0b,
23    DMAP_TYPE_LIST    = 0x0c,
24  };
25
26struct dmap_field_map {
27  ssize_t mfi_offset;
28  ssize_t pli_offset;
29  ssize_t gri_offset;
30};
31
32struct dmap_field {
33  char *desc;
34  char *tag;
35  const struct dmap_field_map *dfm;
36  enum dmap_type type;
37};
38
39
40extern const struct dmap_field_map dfm_dmap_mimc;
41extern const struct dmap_field_map dfm_dmap_aeSP;
42
43
44const struct dmap_field *
45dmap_get_fields_table(int *nfields);
46
47/* From dmap_fields.gperf - keep in sync, don't alter */
48const struct dmap_field *
49dmap_find_field (register const char *str, register unsigned int len);
50
51
52void
53dmap_add_container(struct evbuffer *evbuf, char *tag, int len);
54
55void
56dmap_add_long(struct evbuffer *evbuf, char *tag, int64_t val);
57
58void
59dmap_add_int(struct evbuffer *evbuf, char *tag, int val);
60
61void
62dmap_add_short(struct evbuffer *evbuf, char *tag, short val);
63
64void
65dmap_add_char(struct evbuffer *evbuf, char *tag, char val);
66
67void
68dmap_add_literal(struct evbuffer *evbuf, char *tag, char *str, int len);
69
70void
71dmap_add_string(struct evbuffer *evbuf, char *tag, const char *str);
72
73void
74dmap_add_field(struct evbuffer *evbuf, const struct dmap_field *df, char *strval, int32_t intval);
75
76
77void
78dmap_send_error(struct evhttp_request *req, char *container, char *errmsg);
79
80
81int
82dmap_encode_file_metadata(struct evbuffer *songlist, struct evbuffer *song, struct db_media_file_info *dbmfi, const struct dmap_field **meta, int nmeta, int sort_tags, int force_wav);
83
84#endif /* !__DMAP_HELPERS_H__ */
85