#ifndef _CUPS_MIME_H_
# define _CUPS_MIME_H_
# include <cups/array.h>
# include <cups/ipp.h>
# include <cups/file.h>
# ifdef __cplusplus
extern "C" {
# endif
# define MIME_MAX_SUPER 16
# define MIME_MAX_TYPE IPP_MAX_NAME
# define MIME_MAX_FILTER 256
# define MIME_MAX_BUFFER 4096
typedef enum
{
MIME_MAGIC_NOP,
MIME_MAGIC_AND,
MIME_MAGIC_OR,
MIME_MAGIC_MATCH,
MIME_MAGIC_ASCII,
MIME_MAGIC_PRINTABLE,
MIME_MAGIC_STRING,
MIME_MAGIC_CHAR,
MIME_MAGIC_SHORT,
MIME_MAGIC_INT,
MIME_MAGIC_LOCALE,
MIME_MAGIC_CONTAINS,
MIME_MAGIC_ISTRING
} mime_op_t;
typedef struct _mime_magic_s
{
struct _mime_magic_s *prev,
*next,
*parent,
*child;
short op,
invert;
int offset,
region,
length;
union
{
char matchv[64];
char localev[64];
char stringv[64];
unsigned char charv;
unsigned short shortv;
unsigned intv;
} value;
} mime_magic_t;
typedef struct _mime_type_s
{
mime_magic_t *rules;
int priority;
char super[MIME_MAX_SUPER],
type[MIME_MAX_TYPE];
} mime_type_t;
typedef struct _mime_filter_s
{
mime_type_t *src,
*dst;
int cost;
char filter[MIME_MAX_FILTER];
} mime_filter_t;
typedef struct _mime_s
{
cups_array_t *types;
cups_array_t *filters;
cups_array_t *srcs;
} mime_t;
extern void mimeDelete(mime_t *mime);
extern mime_t *mimeLoad(const char *pathname, const char *filterpath);
extern mime_t *mimeLoadFilters(mime_t *mime, const char *pathname,
const char *filterpath);
extern mime_t *mimeLoadTypes(mime_t *mime, const char *pathname);
extern mime_type_t *mimeAddType(mime_t *mime, const char *super,
const char *type);
extern int mimeAddTypeRule(mime_type_t *mt, const char *rule);
extern void mimeDeleteType(mime_t *mime, mime_type_t *mt);
extern mime_type_t *mimeFileType(mime_t *mime, const char *pathname,
const char *filename, int *compression);
extern mime_type_t *mimeFirstType(mime_t *mime);
extern mime_type_t *mimeNextType(mime_t *mime);
extern int mimeNumTypes(mime_t *mime);
extern mime_type_t *mimeType(mime_t *mime, const char *super,
const char *type);
extern mime_filter_t *mimeAddFilter(mime_t *mime, mime_type_t *src,
mime_type_t *dst, int cost,
const char *filter);
extern void mimeDeleteFilter(mime_t *mime, mime_filter_t *filter);
extern cups_array_t *mimeFilter(mime_t *mime, mime_type_t *src,
mime_type_t *dst, int *cost);
extern mime_filter_t *mimeFilterLookup(mime_t *mime, mime_type_t *src,
mime_type_t *dst);
extern mime_filter_t *mimeFirstFilter(mime_t *mime);
extern mime_filter_t *mimeNextFilter(mime_t *mime);
extern int mimeNumFilters(mime_t *mime);
# ifdef __cplusplus
}
# endif
#endif