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