From 40fe9e6d6767c759b5d7959ba99f501a8ad23124 Mon Sep 17 00:00:00 2001 From: Kaori Hagihara Date: Thu, 25 Aug 2011 17:13:04 +0000 Subject: [PATCH] added tid request support to JPIP client and JPIP server quit request --- applications/jpip/CHANGES | 6 +- applications/jpip/README | 5 ++ .../jpip/libopenjpip/target_manager.c | 5 -- .../opj_client/opj_dec_server/cache_manager.c | 12 +++- .../opj_client/opj_dec_server/cache_manager.h | 17 +++++- .../opj_dec_server/imgsock_manager.c | 38 ++++++++---- .../opj_dec_server/imgsock_manager.h | 32 ++++++++--- .../opj_dec_server/opj_dec_server.c | 42 ++++++++++++-- ...r-20110824.jar => opj_viewer-20110825.jar} | Bin 14893 -> 15278 bytes .../opj_client/opj_viewer/dist/opj_viewer.jar | 2 +- .../opj_viewer/src/ImageManager.java | 13 +++-- .../opj_viewer/src/ImgdecClient.java | 50 +++++++++++----- .../opj_viewer/src/JPIPHttpClient.java | 53 ++++++++++++----- ...824.jar => opj_viewer_xerces-20110825.jar} | Bin 19403 -> 19788 bytes .../dist/opj_viewer_xerces.jar | 2 +- applications/jpip/opj_server/Makefile.am | 3 +- applications/jpip/opj_server/Makefile.nix | 2 +- applications/jpip/opj_server/opj_server.c | 54 ++++++++++-------- 18 files changed, 243 insertions(+), 93 deletions(-) rename applications/jpip/opj_client/opj_viewer/dist/{opj_viewer-20110824.jar => opj_viewer-20110825.jar} (54%) rename applications/jpip/opj_client/opj_viewer_xerces/dist/{opj_viewer_xerces-20110824.jar => opj_viewer_xerces-20110825.jar} (63%) diff --git a/applications/jpip/CHANGES b/applications/jpip/CHANGES index 13dfe69b..0fc3fa2c 100644 --- a/applications/jpip/CHANGES +++ b/applications/jpip/CHANGES @@ -5,9 +5,13 @@ What's New for OpenJPIP ! : changed + : added +August 25, 2011 ++ [kaori] added tid request support to JPIP client ++ [kaori] added quit JPIP server request + August 24, 2011 + [kaori] added cachemodel_manager, which had been managed in target_manager previously -+ [kaori] added tid request support ++ [kaori] added tid request support to JPIP server August 16, 2011 * [antonin] fixed cmake support for openjpip diff --git a/applications/jpip/README b/applications/jpip/README index 363ce1d0..28410745 100644 --- a/applications/jpip/README +++ b/applications/jpip/README @@ -90,6 +90,11 @@ Server: 2. Launch opj_server from the server terminal: % spawn-fcgi -f ./opj_server -p 3000 -n + + For shutting down JPIP server: + %GET http://hostname/myFCGI?quitJPIP + Notice, http://hostname/myFCGI is the HTTP server URI (myFCGI refers to opj_server by the server setting) + Requst message "quitJPIP" can be changed in Makfile, modify -DQUIT_SIGNAL=\"quitJPIP\" Client: 1. Launch image decoding server, and keep it alive as long as image viewers are open diff --git a/applications/jpip/libopenjpip/target_manager.c b/applications/jpip/libopenjpip/target_manager.c index 1117551d..6aea9aec 100644 --- a/applications/jpip/libopenjpip/target_manager.c +++ b/applications/jpip/libopenjpip/target_manager.c @@ -101,8 +101,6 @@ target_param_t * gene_target( targetlist_param_t *targetlist, char *targetname) target->next=NULL; - fprintf( FCGI_stdout, "JPIP-tid: %s\r\n", target->tid); - if( targetlist->first) // there are one or more entries targetlist->last->next = target; else // first entry @@ -220,9 +218,6 @@ target_param_t * search_targetBytid( char tid[], targetlist_param_t *targetlist) foundtarget = foundtarget->next; } - fprintf( FCGI_stdout, "Status: 404\r\n"); - fprintf( FCGI_stdout, "Reason: tid %s not found\r\n", tid); - return NULL; } diff --git a/applications/jpip/opj_client/opj_dec_server/cache_manager.c b/applications/jpip/opj_client/opj_dec_server/cache_manager.c index 4d58f835..6a7b92c9 100644 --- a/applications/jpip/opj_client/opj_dec_server/cache_manager.c +++ b/applications/jpip/opj_client/opj_dec_server/cache_manager.c @@ -61,12 +61,13 @@ void delete_cachelist(cachelist_param_t **cachelist) free( *cachelist); } -cache_param_t * gene_cache( char *targetname, int csn, char *cid) +cache_param_t * gene_cache( char *targetname, int csn, char *tid, char *cid) { cache_param_t *cache; cache = (cache_param_t *)malloc( sizeof(cache_param_t)); strcpy( cache->filename, targetname); + strcpy( cache->tid, tid); cache->csn = csn; cache->cid = (char **)malloc( sizeof(char *)); *cache->cid = (char *)malloc( MAX_LENOFCID); @@ -175,6 +176,14 @@ void add_cachecid( char *cid, cache_param_t *cache) cache->numOfcid ++; } +void update_cachetid( char *tid, cache_param_t *cache) +{ + if( tid[0] != '0' && strcmp( tid, cache->tid) !=0){ + fprintf( stderr, "tid is updated to %s for %s\n", tid, cache->filename); + strcpy( cache->tid, tid); + } +} + void remove_cidInCache( char *cid, cache_param_t *cache); void remove_cachecid( char *cid, cachelist_param_t *cachelist) @@ -225,6 +234,7 @@ void print_cache( cache_param_t *cache) fprintf( stdout,"cache\n"); fprintf( stdout,"\t filename: %s\n", cache->filename); + fprintf( stdout,"\t tid: %s\n", cache->tid); fprintf( stdout,"\t csn: %d\n", cache->csn); fprintf( stdout,"\t cid:"); diff --git a/applications/jpip/opj_client/opj_dec_server/cache_manager.h b/applications/jpip/opj_client/opj_dec_server/cache_manager.h index 44450134..ad35de80 100644 --- a/applications/jpip/opj_client/opj_dec_server/cache_manager.h +++ b/applications/jpip/opj_client/opj_dec_server/cache_manager.h @@ -37,9 +37,13 @@ //! maximum length of target name #define MAX_LENOFTARGET 128 +//! maximum length of target identifier +#define MAX_LENOFTID 30 + //! cache parameters typedef struct cache_param{ char filename[MAX_LENOFTARGET]; //!< file name + char tid[MAX_LENOFTID]; //!< taregt identifier int csn; //!< codestream number char **cid; //!< dynamic array of channel identifiers int numOfcid; //!< number of cids @@ -74,10 +78,11 @@ void delete_cachelist(cachelist_param_t **cachelist); * * @param[in] targetname target file name * @param[in] csn codestream number + * @param[in] tid target identifier * @param[in] cid channel identifier * @return pointer to the generated cache */ -cache_param_t * gene_cache( char *targetname, int csn, char *cid); +cache_param_t * gene_cache( char *targetname, int csn, char *tid, char *cid); /** * delete a cache @@ -132,6 +137,16 @@ cache_param_t * search_cacheBycid( char cid[], cachelist_param_t *cachelist); */ void add_cachecid( char *cid, cache_param_t *cache); + +/** + * update tid of a cache + * + * @param[in] tid target identifier + * @param[in] cache cache pointer + */ +void update_cachetid( char *tid, cache_param_t *cache); + + /** * remove cid in cache * diff --git a/applications/jpip/opj_client/opj_dec_server/imgsock_manager.c b/applications/jpip/opj_client/opj_dec_server/imgsock_manager.c index 567b81ca..19599a9a 100644 --- a/applications/jpip/opj_client/opj_dec_server/imgsock_manager.c +++ b/applications/jpip/opj_client/opj_dec_server/imgsock_manager.c @@ -94,7 +94,7 @@ msgtype_t identify_clientmsg( SOCKET connected_socket) { int receive_size; char buf[BUF_LEN]; - char *magicid[] = { "JPIP-stream", "PNM request", "XML request", "CID request", "CID destroy", "JP2 save", "QUIT"}; + char *magicid[] = { "JPIP-stream", "PNM request", "XML request", "TID request", "CID request", "CID destroy", "JP2 save", "QUIT"}; int i; receive_size = receive_line( connected_socket, buf); @@ -106,7 +106,7 @@ msgtype_t identify_clientmsg( SOCKET connected_socket) for( i=0; i server: JPIP-stream\\n version 1.1\\n (optional for cid registration: targetnamestring\\n cidstring\\n) bytelengthvalue\\n data \n + * client -> server: JPIP-stream\\n version 1.1\\n (optional for cid registration: targetnamestring\\n tidstring\\n cidstring\\n) bytelengthvalue\\n data \n * server -> client: 1 or 0 (of 1Byte response signal) * *\section sec2 PNM request @@ -140,25 +150,31 @@ int receive_line(SOCKET connected_socket, char *buf); * client -> server: XML request\\n \n * server -> client: XML (3Byte) length (2Byte Big endian) data * - *\section sec4 CID request + *\section sec4 TID request + * Get target ID of target image + * + * client -> server: TID request\\n targetname\\n \n + * server -> client: TID (3Byte) length (1Byte) tiddata + * + *\section sec5 CID request * Get Channel ID of identical target image * * client -> server: CID request\\n targetname\\n \n * server -> client: CID (3Byte) length (1Byte) ciddata * - *\section sec5 CID destroy + *\section sec6 CID destroy * Close Channel ID * * client -> server: CID destroy\\n ciddata \n * server -> client: 1 or 0 (of 1Byte response signal) * - *\section sec6 JP2 save + *\section sec7 JP2 save * Save in JP2 file format * * client -> server: JP2 save\\n ciddata \n * server -> client: 1 or 0 (of 1Byte response signal) * - *\section sec7 QUIT + *\section sec8 QUIT * Quit the opj_dec_server program * * client -> server: quit or QUIT diff --git a/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c b/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c index 9779d93b..c8c3c695 100644 --- a/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c +++ b/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c @@ -99,6 +99,14 @@ void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_par */ void handle_XMLreqMSG( SOCKET connected_socket, Byte_t *jpipstream, cachelist_param_t *cachelist); +/** + * handle TargetID request message + * + * @param[in] connected_socket socket descriptor + * @param[in] cachelist cache list pointer + */ +void handle_TIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist); + /** * handle ChannelID request message * @@ -163,6 +171,10 @@ int main(int argc, char *argv[]){ case XMLREQ: handle_XMLreqMSG( connected_socket, jpipstream, cachelist); break; + + case TIDREQ: + handle_TIDreqMSG( connected_socket, cachelist); + break; case CIDREQ: handle_CIDreqMSG( connected_socket, cachelist); @@ -183,7 +195,7 @@ int main(int argc, char *argv[]){ break; } - printf("cut the connection. listening to port\n"); + printf("\t end of the connection\n\n"); if( closesocket(connected_socket) != 0){ perror("close"); return -1; @@ -221,10 +233,10 @@ void handle_JPIPstreamMSG( SOCKET connected_socket, cachelist_param_t *cachelist Byte_t *newjpipstream; int newstreamlen = 0; cache_param_t *cache; - char target[MAX_LENOFTARGET], cid[MAX_LENOFCID]; + char target[MAX_LENOFTARGET], tid[MAX_LENOFTID], cid[MAX_LENOFCID]; metadatalist_param_t *metadatalist; - newjpipstream = receive_JPIPstream( connected_socket, target, cid, &newstreamlen); + newjpipstream = receive_JPIPstream( connected_socket, target, tid, cid, &newstreamlen); parse_JPIPstream( newjpipstream, newstreamlen, *streamlen, msgqueue); @@ -235,11 +247,13 @@ void handle_JPIPstreamMSG( SOCKET connected_socket, cachelist_param_t *cachelist parse_metamsg( msgqueue, *jpipstream, *streamlen, metadatalist); // cid registration - if( target[0] != 0 && cid[0] != 0){ - if((cache = search_cache( target, cachelist))) + if( target[0] != 0 && tid[0] != 0 && cid[0] != 0){ + if((cache = search_cache( target, cachelist))){ add_cachecid( cid, cache); + update_cachetid( tid, cache); + } else{ - cache = gene_cache( target, msgqueue->last->csn, cid); + cache = gene_cache( target, msgqueue->last->csn, tid, cid); insert_cache_into_list( cache, cachelist); } } @@ -294,6 +308,22 @@ void handle_XMLreqMSG( SOCKET connected_socket, Byte_t *jpipstream, cachelist_pa 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; diff --git a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110824.jar b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110825.jar similarity index 54% rename from applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110824.jar rename to applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110825.jar index b821db33f7b8a78b543fcf92d5f05e45485ce7f1..67b68b672c4da658c166efb875395745650e8e46 100644 GIT binary patch delta 6236 zcmY+IRZtv^&W6$AUR(={7k77ecP+Xs?z-6GzPP)$xO<_v7AVE7xNC9Fcm99Q#g~g@ zCX-y|oxIOik8j=>>Pqkks4)KxMJRDH1_QjpKZQRDC)tZw3?(;(a|Rv;Mg<851{d1L zhYya|ad5}8{us2e#+z}5uSsGLD7I{5l*Mtjm$AnuRki~)$W+HGc`394x-6Qok4Mh-4h(-sG?MQM}v>1>-$%L?2xG!3lIH z_viS;Zl58HXDV4zTmW2AFF3nL+$x9(h`2e)tO%qV(s7|X4{e>mb>Z>pRo!^P$9+uDLzO>#3W4;xH*@8DB`!+d1Z0-*Do_V0j?`4Q(%T8gfOk~n?T zw_ICH-QnGA9!WM5?#3Nqv*h8<&$y6R0JRhfqKw%NmfPpKfEz+-Z)`C0xdf9OXL6Ui z9WmPoXG0f}UJTdrC@b#XAxj+N59P^qI$xpcNh>a#m9lXSP7cNkbLlbZ*gr0*!$k3} zBzXRrr9}EWFiP0uBuMt9_R4eo&0$9c#%@jFsMJ{MNiMmg<}cIhZ(*|=?nryl zokv_9Yr;r}Ca@*Q3ybU29BUbPWueX()t5{=PT}xW_?TY)$~l(*v&rf(O3 t;rW5 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 o)7sYFQPAUROwxM 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 z zMpJpEjLPF_B@Adzq>Ti_GA$zHOc=@ei3-3(PhHBt7{q%FUg_|Xki5xeh3TM3VZNpb z5v2v-uUK~|cg0CpVYvhXoGIl?*mRHA-Qg{Nf&Sz(dAIZ#mzarXL)$)2S5x(3`&%db zv=;KbPmjgH6lyp0L5H_*ceMt&D=h1E=H? zzkj13FLtOmZ43!^k*d!4P|9l_jq>*3c*{Ebr4@>L`sW-}?0^+C3B5CN7y1eE~>M z0@a8x&V27n68*7&Xw1Dr_qEEKmxQ8XVc{wGHu9EkF0PO)opEco(JalHF-ahSJ9o&T zdreiv+MB#T0&D;iIiXvzseKo=H~3VnNf@Ql`@$!%F_Kkqe!%g*3o-ogHcC~D9}@dc z>5H9&pp$mgySIp8p&F}N*8!>IZt%pZ3-B%FGLw!WqtF`!eZD;irTH5dZy_wPP;jn^ zE_}BE==@M=%;Ug}jZ_C#XX~frEV0Zu-f$ado~GkK%|0p9<=l*OpTHX+Mbngu@!qmz zf1o$(!;W^P(%&5iudCj8eOKcV$S!`p3%U2h6u1SE!_3Z44(^nex1g7b9G4eHuQkdwu=fX1PI6zy(6?@a<|^8neD#l@_eSvE3rL>dneC{RVYU#P zNu;I_-)bN)YOZOuuLVi!q3HJgp_LeP<27~ITbd-qgt_cQBAMNaH*5YncS68}xB>~H zk}-7-qI3Gx*x3AKlN6I<3n71UTUZeo+oY<8jp=H0TvLv;?}6_Z#q4Rsl&!M`p%xCF zsWuGPXp+~ozc>RD&qFcU!ULkCH73OKmKZn(ymntejB=E*T33IHM5rt%t?OD_!hMj9 zdlwOL{2p4+umIKKj}a1)RxUOBlO3ME3U^N*outfIaBK)5HhoE<@9Jzub0hs&@)*1w z1!~-aYU$ISRcFDK^M+HE{BlP6K0zA2&mP$Bgc4mCN?63m7>YpMQfTrc@*PF7$ebS zu|nk-#0(>PLg-!{u>TcO|C1Ib;tuasxBX^aXa1Abc1E!>-7=>w*mfqYQmoCbve!3g z=2u(Cz%SFR9kZeHmVnrABDL-BE)mbCuImC>V8Lg0iegW zCVKPv9nr{1-ymw^F4*2NfVk4+IE2{C@K}S`i*S?!e!H&}eYRs*vNl4#qIO-&&%iUb zX1v9Uv^)2JkN?6wB=#ymtS;`IQ(m>B!+*Y zg?jhn#@+m-feCpmhP9Um1z|GVyxN91!4@LWCxCT;YJGM9^RNtVbT<0gwf^MtW+07q zpen_;6wYMuP|RwYS2ujYFy~vJ=&aw42Y;{(;V&uC<~+${BTo!sY4#?^s;Vh3!K<-7 zgRO!hFI!#OjNh=n&Lw!{S51OsW@C^T<)X>8XiN3QsDcyFdq*OtropQMsBCaHESD@5 zxp<;*<6KJxE0B(PoH 0){ - byte []ciddata = new byte[ length]; - read_stream( is, ciddata, length); - cid = new String( ciddata); + byte []iddata = new byte[ length]; + read_stream( is, iddata, length); + id = new String( iddata); } } else - System.err.println("Error in query_cid(), not starting with CID"); + System.err.println("Error in query_id("+ reqmsghead + "), wrong to start with " + header); } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); @@ -221,7 +245,7 @@ public class ImgdecClient{ System.err.println("IOException: " + e); } - return cid; + return id; } public static void read_stream( DataInputStream is, byte []stream, int length) diff --git a/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java b/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java index 466370b6..cfd3db4c 100644 --- a/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java +++ b/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java @@ -77,45 +77,57 @@ public class JPIPHttpClient public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid) { - return requestViewWindow( null, reqfw, reqfh, -1, -1, -1, -1, reqcid, false); + return requestViewWindow( null, null, reqfw, reqfh, -1, -1, -1, -1, reqcid, false); } public byte[] requestViewWindow( int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh, String reqcid) { - return requestViewWindow( null, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, reqcid, false); + return requestViewWindow( null, null, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, reqcid, false); } public byte[] requestViewWindow( String target, int reqfw, int reqfh) { - return requestViewWindow( target, reqfw, reqfh, -1, -1, -1, -1, null, false); + return requestViewWindow( target, null, reqfw, reqfh, -1, -1, -1, -1, null, false); } public byte[] requestViewWindow( String target, int reqfw, int reqfh, boolean reqcnew) { if( cid == null) // 1 channel allocation only - return requestViewWindow( target, reqfw, reqfh, -1, -1, -1, -1, null, reqcnew); + return requestViewWindow( target, null, reqfw, reqfh, -1, -1, -1, -1, null, reqcnew); + else + return null; + } + + public byte[] requestViewWindow( String target, String reqtid, int reqfw, int reqfh, boolean reqcnew) + { + if( cid == null) // 1 channel allocation only + return requestViewWindow( target, reqtid, reqfw, reqfh, -1, -1, -1, -1, null, reqcnew); else return null; } public byte[] requestViewWindow( String target, int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh) { - return requestViewWindow( target, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, null, false); + return requestViewWindow( target, null, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, null, false); } public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid, boolean reqcnew) { - return requestViewWindow( null, reqfw, reqfh, -1, -1, -1, -1, reqcid, reqcnew); + return requestViewWindow( null, null, reqfw, reqfh, -1, -1, -1, -1, reqcid, reqcnew); } - public byte[] requestViewWindow( String target, - int reqfw, int reqfh, - int reqrx, int reqry, - int reqrw, int reqrh, - String reqcid, boolean reqcnew) + public byte[] requestViewWindow( String target, + String reqtid, + int reqfw, int reqfh, + int reqrx, int reqry, + int reqrw, int reqrh, + String reqcid, boolean reqcnew) { - String urlstring = const_urlstring( target, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, reqcid, reqcnew); + if( reqtid != null) + tid = reqtid; + + String urlstring = const_urlstring( target, reqtid, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, reqcid, reqcnew); return GETrequest( urlstring); } @@ -151,7 +163,14 @@ public class JPIPHttpClient Map> headers = urlconn.getHeaderFields(); java.util.List hvaluelist; - + + String status = headers.get(null).get(0); + + System.err.println( status); + if( !status.contains("OK")) + System.err.println( headers.get("Reason")); + System.err.println( headers.get("Content-type")); + if(( hvaluelist = headers.get("JPIP-fsiz")) != null){ String hvalueline = hvaluelist.get(0); fw = Integer.valueOf( hvalueline.substring( 0, hvalueline.indexOf(','))).intValue(); @@ -242,7 +261,8 @@ public class JPIPHttpClient return jpipstream; } - private String const_urlstring( String target, + private String const_urlstring( String target, + String reqtid, int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh, @@ -258,6 +278,11 @@ public class JPIPHttpClient urlstring = urlstring.concat( "&"); urlstring = urlstring.concat( "target=" + target); } + if( reqtid != null){ + if( !urlstring.endsWith("?")) + urlstring = urlstring.concat( "&"); + urlstring = urlstring.concat( "tid=" + reqtid); + } if( reqfw != -1 && reqfh != -1){ if( !urlstring.endsWith("?")) urlstring = urlstring.concat( "&"); diff --git a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110824.jar b/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110825.jar similarity index 63% rename from applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110824.jar rename to applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110825.jar index b5ad639d7fdb00d41e47b9b8f71e2a1439b137c3..4028b66446449b158c49ef1604bb3cfcf518b29a 100644 GIT binary patch delta 6317 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 - else{ - fprintf( FCGI_stdout, "Reason: target not specified\r\n"); - fprintf( FCGI_stdout, "Status: 400\r\n"); - return false; - } - } + if( *target){ + fprintf( FCGI_stdout, "JPIP-tid: %s\r\n", (*target)->tid); + return true; + } + else{ + fprintf( FCGI_stdout, "Reason: target not found\r\n"); + fprintf( FCGI_stdout, "Status: 400\r\n"); + return false; } - return true; } bool associate_channel( query_param_t query_param,