[trunk] Remove bool.h, use opj_bool instead
[openjpeg.git] / src / lib / openjpip / openjpip.h
1 /*
2  * $Id$
3  *
4  * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
5  * Copyright (c) 2002-2011, Professor Benoit Macq
6  * Copyright (c) 2010-2011, Kaori Hagihara
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef         OPENJPIP_H_
32 # define        OPENJPIP_H_
33
34 #include "session_manager.h"
35 #include "target_manager.h"
36 #include "query_parser.h"
37 #include "msgqueue_manager.h"
38 #include "sock_manager.h"
39 #include "auxtrans_manager.h"
40
41 #ifdef SERVER
42
43 #include "fcgi_stdio.h"
44 #define logstream FCGI_stdout
45
46 #else
47
48 #define FCGI_stdout stdout
49 #define FCGI_stderr stderr
50 #define logstream stderr
51
52 #include "cache_manager.h"
53 #include "byte_manager.h"
54 #include "imgsock_manager.h"
55
56 #include "metadata_manager.h"
57 #include "ihdrbox_manager.h"
58 #include "index_manager.h"
59
60 #endif /*SERVER*/
61
62 /* 
63  *==========================================================
64  * JPIP server API
65  *==========================================================
66  */
67  
68  #ifdef SERVER
69
70 /** Server static records*/
71 typedef struct server_record{
72   sessionlist_param_t *sessionlist; /**< list of session records*/
73   targetlist_param_t *targetlist;   /**< list of target records*/
74   auxtrans_param_t auxtrans;
75 } server_record_t;
76
77 /** Query/response data for each client*/
78 typedef struct QR{
79   query_param_t *query;             /**< query parameters*/
80   msgqueue_param_t *msgqueue;       /**< message queue*/
81   channel_param_t *channel;         /**< channel, (NULL if stateless)*/
82 } QR_t;
83
84 /**
85  * Initialize the JPIP server
86  *
87  * @param[in] tcp_auxport opening tcp auxiliary port ( 0 not to open, valid No. 49152-65535)
88  * @param[in] udp_auxport opening udp auxiliary port ( 0 not to open, valid No. 49152-65535)
89  * @return                intialized server record pointer
90  */
91 server_record_t * init_JPIPserver( int tcp_auxport, int udp_auxport);
92
93 /**
94  * Terminate the JPIP server
95  *
96  * @param[in] rec address of deleting server static record pointer
97  */
98 void terminate_JPIPserver( server_record_t **rec);
99
100 /**
101  * 1st process per client request; parse query string
102  *
103  * @param[in]  query_string request query string
104  * @return     initialized query/response data pointer
105  */
106 QR_t * parse_querystring( const char *query_string);
107
108 /**
109  * 2nd process; process JPIP request and construct message queue
110  *
111  * @param[in]  rec server static record pointer
112  * @param[in]  qr  query/response data pointer
113  * @return     true if succeed, otherwise false 
114  */
115 opj_bool process_JPIPrequest( server_record_t *rec, QR_t *qr);
116
117 /**
118  * 3rd process; send response data JPT/JPP-stream
119  *
120  * @param[in]  rec server static record pointer
121  * @param[in]  qr  query/response data pointer
122  */
123 void send_responsedata( server_record_t *rec, QR_t *qr);
124
125 /**
126  * 4th (last) process; 
127  *
128  * @param[in]  rec server static record pinter
129  * @param[in]  qr  address of query/response data pointer
130  */
131 void end_QRprocess( server_record_t *rec, QR_t **qr);
132
133 /**
134  * Option for local tests; print out parameter values to logstream (stderr)
135  *
136  * @param[in]  query    true if query parameters are to be printed out
137  * @param[in]  messages true if queue of messages is to be printed out
138  * @param[in]  sessions true if session list      is to be printed out
139  * @param[in]  targets  true if target list       is  to be printed out
140  * @param[in]  qr       query/response data pointer
141  * @param[in]  rec      server static record pinter
142  */
143 void local_log( opj_bool query, opj_bool messages, opj_bool sessions, opj_bool targets, QR_t *qr, server_record_t *rec);
144
145 #endif /*SERVER*/
146
147 /* 
148  *==========================================================
149  *      JPIP decoding server API
150  *==========================================================
151  */
152
153 #ifndef SERVER
154
155 /** Decoding server static records*/
156 typedef struct dec_server_record{
157   cachelist_param_t *cachelist; /**< cache list*/
158   Byte_t *jpipstream;           /**< JPT/JPP stream*/
159   OPJ_SIZE_T jpipstreamlen;            /**< length of jpipstream*/
160   msgqueue_param_t *msgqueue;   /**< parsed message queue of jpipstream*/
161   SOCKET listening_socket;      /**< listenning socket*/
162 } dec_server_record_t;
163
164
165 /** Client socket identifier*/
166 typedef SOCKET client_t;
167
168 /**
169  * Initialize the image decoding server
170  *
171  * @param[in] port opening tcp port (valid No. 49152-65535)
172  * @return         intialized decoding server record pointer
173  */
174 OPJ_API dec_server_record_t * OPJ_CALLCONV init_dec_server( int port);
175
176 /**
177  * Terminate the  image decoding server
178  *
179  * @param[in] rec address of deleting decoding server static record pointer
180  */
181 OPJ_API void OPJ_CALLCONV terminate_dec_server( dec_server_record_t **rec);
182
183 /**
184  * Accept client connection
185  *
186  * @param[in] rec decoding server static record pointer
187  * @return        client socket ID, -1 if failed
188  */
189 OPJ_API client_t OPJ_CALLCONV accept_connection( dec_server_record_t *rec);
190
191  /**
192   * Handle client request
193   *
194   * @param[in] client client socket ID
195   * @param[in] rec    decoding server static record pointer
196   * @return           true if succeed
197   */
198 OPJ_API opj_bool OPJ_CALLCONV handle_clientreq( client_t client, dec_server_record_t *rec);
199
200 #endif /*SERVER*/
201
202 /* 
203  *==========================================================
204  *     JPIP tool API
205  *==========================================================
206  */
207
208 #ifndef SERVER
209
210 /*
211  * jpip to JP2 or J2K
212  */
213
214 /** JPIP decoding parameters*/
215 typedef struct jpip_dec_param{
216   Byte_t *jpipstream;                 /**< JPT/JPP-stream*/
217   Byte8_t jpiplen;                    /**< length of jpipstream*/
218   msgqueue_param_t *msgqueue;         /**< message queue*/
219   metadatalist_param_t *metadatalist; /**< metadata list going into JP2 file*/
220   ihdrbox_param_t *ihdrbox;           /**< ihdr box going into JP2 file*/
221   Byte_t *jp2kstream;                 /**< J2K codestream or JP2 file codestream*/
222   Byte8_t jp2klen;                    /**< length of j2kstream or JP2 file*/
223 } jpip_dec_param_t;
224
225 /**
226  * Initialize jpip decoder
227  *
228  * @param[in] jp2 true in case of jp2 file encoding, else j2k file encoding
229  * @return        JPIP decoding parameters pointer
230  */
231 OPJ_API jpip_dec_param_t * OPJ_CALLCONV init_jpipdecoder( opj_bool jp2);
232
233 /**
234  * Destroy jpip decoding parameters
235  *
236  * @param[in]  dec  address of JPIP decoding parameters pointer
237  */
238 OPJ_API void OPJ_CALLCONV destroy_jpipdecoder( jpip_dec_param_t **dec);
239
240 /**
241  * Read jpip codestream from a file
242  *
243  * @param[in]  fname file name
244  * @param[in]  dec   JPIP decoding parameters pointer
245  * @return           true if succeed
246  */
247 OPJ_API opj_bool OPJ_CALLCONV fread_jpip( const char fname[], jpip_dec_param_t *dec);
248
249 /**
250  * Decode jpip codestream
251  *
252  * @param[in]  dec   JPIP decoding parameters pointer
253  */
254 OPJ_API void OPJ_CALLCONV decode_jpip( jpip_dec_param_t *dec);
255
256 /**
257  * Write J2K/JP2 codestream to a file
258  *
259  * @param[in]  fname file name
260  * @param[in]  dec   JPIP decoding parameters pointer
261  * @return           true if succeed
262  */
263 OPJ_API opj_bool OPJ_CALLCONV fwrite_jp2k( const char fname[], jpip_dec_param_t *dec);
264
265 /**
266  * Option; print out parameter values to stderr
267  *
268  * @param[in]  messages true if queue of messages is to be printed out
269  * @param[in]  metadata true if metadata          is to be printed out
270  * @param[in]  ihdrbox  true if image header data is to be printed out
271  * @param[in]  dec   JPIP decoding parameters pointer
272  */
273 OPJ_API void OPJ_CALLCONV output_log( opj_bool messages, opj_bool metadata, opj_bool ihdrbox, jpip_dec_param_t *dec);
274
275 /*
276  *  test the format of index (cidx) box in JP2 file
277  */
278
279 /** Redefinition of index parameters*/
280 typedef index_param_t index_t;
281
282 /**
283  * Parse JP2 file and get index information from cidx box inside
284  * 
285  * @param[in] fd file descriptor of the JP2 file
286  * @return       pointer to the generated structure of index parameters
287  */
288 OPJ_API index_t * OPJ_CALLCONV get_index_from_JP2file( int fd);
289
290 /**
291  * Destroy index parameters
292  *
293  * @param[in,out] idx addressof the index pointer
294  */
295 OPJ_API void OPJ_CALLCONV destroy_index( index_t **idx);
296
297
298 /**
299  * print index parameters
300  *
301  * @param[in] index index parameters
302  */
303 OPJ_API void OPJ_CALLCONV output_index( index_t *index);
304
305 #endif /*SERVER*/
306
307 #endif /* !OPENJPIP_H_ */