xref: /aosp_15_r20/external/libcups/scheduler/mime.h (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
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