1*5e7646d2SAndroid Build Coastguard Worker /* 2*5e7646d2SAndroid Build Coastguard Worker * MIME type/conversion database definitions for CUPS. 3*5e7646d2SAndroid Build Coastguard Worker * 4*5e7646d2SAndroid Build Coastguard Worker * Copyright 2007-2013 by Apple Inc. 5*5e7646d2SAndroid Build Coastguard Worker * Copyright 1997-2007 by Easy Software Products, all rights reserved. 6*5e7646d2SAndroid Build Coastguard Worker * 7*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more information. 8*5e7646d2SAndroid Build Coastguard Worker */ 9*5e7646d2SAndroid Build Coastguard Worker 10*5e7646d2SAndroid Build Coastguard Worker #ifndef _CUPS_MIME_H_ 11*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_MIME_H_ 12*5e7646d2SAndroid Build Coastguard Worker 13*5e7646d2SAndroid Build Coastguard Worker # include <cups/array.h> 14*5e7646d2SAndroid Build Coastguard Worker # include <cups/ipp.h> 15*5e7646d2SAndroid Build Coastguard Worker # include <cups/file.h> 16*5e7646d2SAndroid Build Coastguard Worker # include <regex.h> 17*5e7646d2SAndroid Build Coastguard Worker 18*5e7646d2SAndroid Build Coastguard Worker 19*5e7646d2SAndroid Build Coastguard Worker /* 20*5e7646d2SAndroid Build Coastguard Worker * C++ magic... 21*5e7646d2SAndroid Build Coastguard Worker */ 22*5e7646d2SAndroid Build Coastguard Worker 23*5e7646d2SAndroid Build Coastguard Worker # ifdef __cplusplus 24*5e7646d2SAndroid Build Coastguard Worker extern "C" { 25*5e7646d2SAndroid Build Coastguard Worker # endif /* __cplusplus */ 26*5e7646d2SAndroid Build Coastguard Worker 27*5e7646d2SAndroid Build Coastguard Worker 28*5e7646d2SAndroid Build Coastguard Worker /* 29*5e7646d2SAndroid Build Coastguard Worker * Constants... 30*5e7646d2SAndroid Build Coastguard Worker */ 31*5e7646d2SAndroid Build Coastguard Worker 32*5e7646d2SAndroid Build Coastguard Worker # define MIME_MAX_SUPER 16 /* Maximum size of supertype name */ 33*5e7646d2SAndroid Build Coastguard Worker # define MIME_MAX_TYPE IPP_MAX_NAME /* Maximum size of type name */ 34*5e7646d2SAndroid Build Coastguard Worker # define MIME_MAX_FILTER 256 /* Maximum size of filter pathname */ 35*5e7646d2SAndroid Build Coastguard Worker # define MIME_MAX_BUFFER 4096 /* Maximum size of file buffer */ 36*5e7646d2SAndroid Build Coastguard Worker 37*5e7646d2SAndroid Build Coastguard Worker 38*5e7646d2SAndroid Build Coastguard Worker /* 39*5e7646d2SAndroid Build Coastguard Worker * Types/structures... 40*5e7646d2SAndroid Build Coastguard Worker */ 41*5e7646d2SAndroid Build Coastguard Worker 42*5e7646d2SAndroid Build Coastguard Worker typedef enum 43*5e7646d2SAndroid Build Coastguard Worker { 44*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_NOP, /* No operation */ 45*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_AND, /* Logical AND of all children */ 46*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_OR, /* Logical OR of all children */ 47*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_MATCH, /* Filename match */ 48*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_ASCII, /* ASCII characters in range */ 49*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_PRINTABLE, /* Printable characters (32-255) in range */ 50*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_STRING, /* String matches */ 51*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_CHAR, /* Character/byte matches */ 52*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_SHORT, /* Short/16-bit word matches */ 53*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_INT, /* Integer/32-bit word matches */ 54*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_LOCALE, /* Current locale matches string */ 55*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_CONTAINS, /* File contains a string */ 56*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_ISTRING, /* Case-insensitive string matches */ 57*5e7646d2SAndroid Build Coastguard Worker MIME_MAGIC_REGEX /* Regular expression matches */ 58*5e7646d2SAndroid Build Coastguard Worker } mime_op_t; 59*5e7646d2SAndroid Build Coastguard Worker 60*5e7646d2SAndroid Build Coastguard Worker typedef struct _mime_magic_s /**** MIME Magic Data ****/ 61*5e7646d2SAndroid Build Coastguard Worker { 62*5e7646d2SAndroid Build Coastguard Worker struct _mime_magic_s *prev, /* Previous rule */ 63*5e7646d2SAndroid Build Coastguard Worker *next, /* Next rule */ 64*5e7646d2SAndroid Build Coastguard Worker *parent, /* Parent rules */ 65*5e7646d2SAndroid Build Coastguard Worker *child; /* Child rules */ 66*5e7646d2SAndroid Build Coastguard Worker short op, /* Operation code (see above) */ 67*5e7646d2SAndroid Build Coastguard Worker invert; /* Invert the result */ 68*5e7646d2SAndroid Build Coastguard Worker int offset, /* Offset in file */ 69*5e7646d2SAndroid Build Coastguard Worker region, /* Region length */ 70*5e7646d2SAndroid Build Coastguard Worker length; /* Length of data */ 71*5e7646d2SAndroid Build Coastguard Worker union 72*5e7646d2SAndroid Build Coastguard Worker { 73*5e7646d2SAndroid Build Coastguard Worker char matchv[64]; /* Match value */ 74*5e7646d2SAndroid Build Coastguard Worker char localev[64]; /* Locale value */ 75*5e7646d2SAndroid Build Coastguard Worker char stringv[64]; /* String value */ 76*5e7646d2SAndroid Build Coastguard Worker unsigned char charv; /* Byte value */ 77*5e7646d2SAndroid Build Coastguard Worker unsigned short shortv; /* Short value */ 78*5e7646d2SAndroid Build Coastguard Worker unsigned intv; /* Integer value */ 79*5e7646d2SAndroid Build Coastguard Worker regex_t rev; /* Regular expression value */ 80*5e7646d2SAndroid Build Coastguard Worker } value; 81*5e7646d2SAndroid Build Coastguard Worker } mime_magic_t; 82*5e7646d2SAndroid Build Coastguard Worker 83*5e7646d2SAndroid Build Coastguard Worker typedef struct _mime_type_s /**** MIME Type Data ****/ 84*5e7646d2SAndroid Build Coastguard Worker { 85*5e7646d2SAndroid Build Coastguard Worker mime_magic_t *rules; /* Rules used to detect this type */ 86*5e7646d2SAndroid Build Coastguard Worker int priority; /* Priority of this type */ 87*5e7646d2SAndroid Build Coastguard Worker char super[MIME_MAX_SUPER], /* Super-type name ("image", "application", etc.) */ 88*5e7646d2SAndroid Build Coastguard Worker type[MIME_MAX_TYPE]; /* Type name ("png", "postscript", etc.) */ 89*5e7646d2SAndroid Build Coastguard Worker } mime_type_t; 90*5e7646d2SAndroid Build Coastguard Worker 91*5e7646d2SAndroid Build Coastguard Worker typedef struct _mime_filter_s /**** MIME Conversion Filter Data ****/ 92*5e7646d2SAndroid Build Coastguard Worker { 93*5e7646d2SAndroid Build Coastguard Worker mime_type_t *src, /* Source type */ 94*5e7646d2SAndroid Build Coastguard Worker *dst; /* Destination type */ 95*5e7646d2SAndroid Build Coastguard Worker int cost; /* Relative cost */ 96*5e7646d2SAndroid Build Coastguard Worker char filter[MIME_MAX_FILTER];/* Filter program to use */ 97*5e7646d2SAndroid Build Coastguard Worker size_t maxsize; /* Maximum file size for this filter */ 98*5e7646d2SAndroid Build Coastguard Worker } mime_filter_t; 99*5e7646d2SAndroid Build Coastguard Worker 100*5e7646d2SAndroid Build Coastguard Worker typedef void (*mime_error_cb_t)(void *ctx, const char *message); 101*5e7646d2SAndroid Build Coastguard Worker 102*5e7646d2SAndroid Build Coastguard Worker typedef struct _mime_s /**** MIME Database ****/ 103*5e7646d2SAndroid Build Coastguard Worker { 104*5e7646d2SAndroid Build Coastguard Worker cups_array_t *types; /* File types */ 105*5e7646d2SAndroid Build Coastguard Worker cups_array_t *filters; /* Type conversion filters */ 106*5e7646d2SAndroid Build Coastguard Worker cups_array_t *srcs; /* Filters sorted by source type */ 107*5e7646d2SAndroid Build Coastguard Worker mime_error_cb_t error_cb; /* Error message callback */ 108*5e7646d2SAndroid Build Coastguard Worker void *error_ctx; /* Pointer for callback */ 109*5e7646d2SAndroid Build Coastguard Worker } mime_t; 110*5e7646d2SAndroid Build Coastguard Worker 111*5e7646d2SAndroid Build Coastguard Worker 112*5e7646d2SAndroid Build Coastguard Worker /* 113*5e7646d2SAndroid Build Coastguard Worker * Functions... 114*5e7646d2SAndroid Build Coastguard Worker */ 115*5e7646d2SAndroid Build Coastguard Worker 116*5e7646d2SAndroid Build Coastguard Worker extern void mimeDelete(mime_t *mime); 117*5e7646d2SAndroid Build Coastguard Worker extern mime_t *mimeNew(void) _CUPS_API_1_5; 118*5e7646d2SAndroid Build Coastguard Worker extern mime_t *mimeLoad(const char *pathname, const char *filterpath); 119*5e7646d2SAndroid Build Coastguard Worker extern mime_t *mimeLoadFilters(mime_t *mime, const char *pathname, 120*5e7646d2SAndroid Build Coastguard Worker const char *filterpath); 121*5e7646d2SAndroid Build Coastguard Worker extern mime_t *mimeLoadTypes(mime_t *mime, const char *pathname); 122*5e7646d2SAndroid Build Coastguard Worker 123*5e7646d2SAndroid Build Coastguard Worker extern mime_type_t *mimeAddType(mime_t *mime, const char *super, 124*5e7646d2SAndroid Build Coastguard Worker const char *type); 125*5e7646d2SAndroid Build Coastguard Worker extern int mimeAddTypeRule(mime_type_t *mt, const char *rule); 126*5e7646d2SAndroid Build Coastguard Worker extern void mimeDeleteType(mime_t *mime, mime_type_t *mt); 127*5e7646d2SAndroid Build Coastguard Worker extern mime_type_t *mimeFileType(mime_t *mime, const char *pathname, 128*5e7646d2SAndroid Build Coastguard Worker const char *filename, int *compression); 129*5e7646d2SAndroid Build Coastguard Worker extern mime_type_t *mimeFirstType(mime_t *mime); 130*5e7646d2SAndroid Build Coastguard Worker extern mime_type_t *mimeNextType(mime_t *mime); 131*5e7646d2SAndroid Build Coastguard Worker extern int mimeNumTypes(mime_t *mime); 132*5e7646d2SAndroid Build Coastguard Worker extern mime_type_t *mimeType(mime_t *mime, const char *super, 133*5e7646d2SAndroid Build Coastguard Worker const char *type); 134*5e7646d2SAndroid Build Coastguard Worker 135*5e7646d2SAndroid Build Coastguard Worker extern mime_filter_t *mimeAddFilter(mime_t *mime, mime_type_t *src, 136*5e7646d2SAndroid Build Coastguard Worker mime_type_t *dst, int cost, 137*5e7646d2SAndroid Build Coastguard Worker const char *filter); 138*5e7646d2SAndroid Build Coastguard Worker extern void mimeDeleteFilter(mime_t *mime, mime_filter_t *filter); 139*5e7646d2SAndroid Build Coastguard Worker extern cups_array_t *mimeFilter(mime_t *mime, mime_type_t *src, 140*5e7646d2SAndroid Build Coastguard Worker mime_type_t *dst, int *cost); 141*5e7646d2SAndroid Build Coastguard Worker extern cups_array_t *mimeFilter2(mime_t *mime, mime_type_t *src, 142*5e7646d2SAndroid Build Coastguard Worker size_t srcsize, mime_type_t *dst, 143*5e7646d2SAndroid Build Coastguard Worker int *cost); 144*5e7646d2SAndroid Build Coastguard Worker extern mime_filter_t *mimeFilterLookup(mime_t *mime, mime_type_t *src, 145*5e7646d2SAndroid Build Coastguard Worker mime_type_t *dst); 146*5e7646d2SAndroid Build Coastguard Worker extern mime_filter_t *mimeFirstFilter(mime_t *mime); 147*5e7646d2SAndroid Build Coastguard Worker extern mime_filter_t *mimeNextFilter(mime_t *mime); 148*5e7646d2SAndroid Build Coastguard Worker extern int mimeNumFilters(mime_t *mime); 149*5e7646d2SAndroid Build Coastguard Worker extern void mimeSetErrorCallback(mime_t *mime, mime_error_cb_t cb, 150*5e7646d2SAndroid Build Coastguard Worker void *context) _CUPS_API_1_5; 151*5e7646d2SAndroid Build Coastguard Worker 152*5e7646d2SAndroid Build Coastguard Worker # ifdef __cplusplus 153*5e7646d2SAndroid Build Coastguard Worker } 154*5e7646d2SAndroid Build Coastguard Worker # endif /* __cplusplus */ 155*5e7646d2SAndroid Build Coastguard Worker #endif /* !_CUPS_MIME_H_ */ 156