summaryrefslogtreecommitdiff
path: root/applications/jpip/libopenjpip/dec_clientmsg_handler.c
diff options
context:
space:
mode:
authorKaori Hagihara <khagihara@users.noreply.github.com>2011-10-19 23:29:57 +0000
committerKaori Hagihara <khagihara@users.noreply.github.com>2011-10-19 23:29:57 +0000
commit255fcbc3a5fc991316e9fda1a3398c55e82d0f21 (patch)
tree108619e23e356373adaa35118f9290ff34be71ac /applications/jpip/libopenjpip/dec_clientmsg_handler.c
parent47d93279ff813e0d22bfe83b881d1cd5045835db (diff)
start using API style in openJPIP library
Diffstat (limited to 'applications/jpip/libopenjpip/dec_clientmsg_handler.c')
-rw-r--r--applications/jpip/libopenjpip/dec_clientmsg_handler.c189
1 files changed, 189 insertions, 0 deletions
diff --git a/applications/jpip/libopenjpip/dec_clientmsg_handler.c b/applications/jpip/libopenjpip/dec_clientmsg_handler.c
new file mode 100644
index 00000000..875e297d
--- /dev/null
+++ b/applications/jpip/libopenjpip/dec_clientmsg_handler.c
@@ -0,0 +1,189 @@
+/*
+ * $Id$
+ *
+ * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2011, Professor Benoit Macq
+ * Copyright (c) 2010-2011, Kaori Hagihara
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "dec_clientmsg_handler.h"
+#include "ihdrbox_manager.h"
+#include "jpipstream_manager.h"
+#include "jp2k_encoder.h"
+
+
+//! maximum length of channel identifier
+#define MAX_LENOFCID 30
+
+void handle_JPIPstreamMSG( SOCKET connected_socket, cachelist_param_t *cachelist,
+ Byte_t **jpipstream, int *streamlen, msgqueue_param_t *msgqueue)
+{
+ Byte_t *newjpipstream;
+ int newstreamlen = 0;
+ cache_param_t *cache;
+ char target[MAX_LENOFTARGET], tid[MAX_LENOFTID], cid[MAX_LENOFCID];
+ metadatalist_param_t *metadatalist;
+
+ newjpipstream = receive_JPIPstream( connected_socket, target, tid, cid, &newstreamlen);
+
+ parse_JPIPstream( newjpipstream, newstreamlen, *streamlen, msgqueue);
+
+ *jpipstream = update_JPIPstream( newjpipstream, newstreamlen, *jpipstream, streamlen);
+ free( newjpipstream);
+
+ metadatalist = gene_metadatalist();
+ parse_metamsg( msgqueue, *jpipstream, *streamlen, metadatalist);
+
+ // cid registration
+ if( target[0] != 0){
+ if((cache = search_cache( target, cachelist))){
+ if( tid[0] != 0)
+ update_cachetid( tid, cache);
+ if( cid[0] != 0)
+ add_cachecid( cid, cache);
+ }
+ else{
+ cache = gene_cache( target, msgqueue->last->csn, tid, cid);
+ insert_cache_into_list( cache, cachelist);
+ }
+ }
+ else
+ cache = search_cacheBycsn( msgqueue->last->csn, cachelist);
+
+ if( cache->metadatalist)
+ delete_metadatalist( &cache->metadatalist);
+ cache->metadatalist = metadatalist;
+
+ response_signal( connected_socket, true);
+}
+
+void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_param_t *msgqueue, cachelist_param_t *cachelist)
+{
+ Byte_t *pnmstream;
+ ihdrbox_param_t *ihdrbox;
+ char cid[MAX_LENOFCID], tmp[10];
+ cache_param_t *cache;
+ int fw, fh;
+
+ receive_line( connected_socket, cid);
+ if(!(cache = search_cacheBycid( cid, cachelist)))
+ if(!(cache = search_cacheBytid( cid, cachelist)))
+ return;
+
+ receive_line( connected_socket, tmp);
+ fw = atoi( tmp);
+
+ receive_line( connected_socket, tmp);
+ fh = atoi( tmp);
+
+ pnmstream = jpipstream_to_pnm( jpipstream, msgqueue, cache->csn, fw, fh, &cache->ihdrbox);
+ ihdrbox = cache->ihdrbox;
+
+ send_PNMstream( connected_socket, pnmstream, ihdrbox->width, ihdrbox->height, ihdrbox->nc, ihdrbox->bpc > 8 ? 255 : (1 << ihdrbox->bpc) - 1);
+
+ free( pnmstream);
+}
+
+void handle_XMLreqMSG( SOCKET connected_socket, Byte_t *jpipstream, cachelist_param_t *cachelist)
+{
+ char cid[MAX_LENOFCID];
+ cache_param_t *cache;
+
+ receive_line( connected_socket, cid);
+ if(!(cache = search_cacheBycid( cid, cachelist)))
+ return;
+
+ boxcontents_param_t *boxcontents = cache->metadatalist->last->boxcontents;
+ Byte_t *xmlstream = (Byte_t *)malloc( boxcontents->length);
+ memcpy( xmlstream, jpipstream+boxcontents->offset, boxcontents->length);
+ send_XMLstream( connected_socket, xmlstream, boxcontents->length);
+ free( xmlstream);
+}
+
+void handle_TIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist)
+{
+ char target[MAX_LENOFTARGET], *tid = NULL;
+ cache_param_t *cache;
+ int tidlen = 0;
+
+ receive_line( connected_socket, target);
+ cache = search_cache( target, cachelist);
+
+ if( cache){
+ tid = cache->tid;
+ tidlen = strlen(tid);
+ }
+ send_TIDstream( connected_socket, tid, tidlen);
+}
+
+void handle_CIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist)
+{
+ char target[MAX_LENOFTARGET], *cid = NULL;
+ cache_param_t *cache;
+ int cidlen = 0;
+
+ receive_line( connected_socket, target);
+ cache = search_cache( target, cachelist);
+
+ if( cache){
+ if( cache->numOfcid > 0){
+ cid = cache->cid[ cache->numOfcid-1];
+ cidlen = strlen(cid);
+ }
+ }
+ send_CIDstream( connected_socket, cid, cidlen);
+}
+
+void handle_dstCIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist)
+{
+ char cid[MAX_LENOFCID];
+
+ receive_line( connected_socket, cid);
+ remove_cachecid( cid, cachelist);
+ response_signal( connected_socket, true);
+}
+
+void handle_JP2saveMSG( SOCKET connected_socket, cachelist_param_t *cachelist, msgqueue_param_t *msgqueue, Byte_t *jpipstream)
+{
+ char cid[MAX_LENOFCID];
+ cache_param_t *cache;
+ Byte_t *jp2stream;
+ Byte8_t jp2len;
+
+ receive_line( connected_socket, cid);
+ if(!(cache = search_cacheBycid( cid, cachelist)))
+ return;
+
+ jp2stream = recons_jp2( msgqueue, jpipstream, cache->csn, &jp2len);
+
+ if( jp2stream){
+ save_codestream( jp2stream, jp2len, "jp2");
+ free( jp2stream);
+ }
+}