From 4da816e4598995db099f22a017c3598c19a753ed Mon Sep 17 00:00:00 2001 From: Kaori Hagihara Date: Wed, 24 Aug 2011 17:07:28 +0000 Subject: [PATCH] support tid request --- applications/jpip/CHANGES | 1 + applications/jpip/libopenjpip/box_manager.c | 1 + applications/jpip/libopenjpip/box_manager.h | 1 - .../jpip/libopenjpip/boxheader_manager.c | 1 + applications/jpip/libopenjpip/byte_manager.c | 1 + applications/jpip/libopenjpip/byte_manager.h | 2 - .../jpip/libopenjpip/codestream_manager.h | 1 - applications/jpip/libopenjpip/index_manager.c | 1 + .../jpip/libopenjpip/metadata_manager.c | 1 + .../jpip/libopenjpip/msgqueue_manager.c | 29 +++++++-- .../jpip/libopenjpip/placeholder_manager.c | 1 + .../jpip/libopenjpip/target_manager.c | 25 +++++++ .../jpip/libopenjpip/target_manager.h | 14 ++++ .../opj_client/opj_dec_server/jp2k_decoder.c | 1 + .../opj_dec_server/opj_dec_server.c | 2 +- ...r-20110711.jar => opj_viewer-20110824.jar} | Bin 14848 -> 14893 bytes .../opj_client/opj_viewer/dist/opj_viewer.jar | 2 +- .../opj_viewer/src/JPIPHttpClient.java | 8 +++ ...711.jar => opj_viewer_xerces-20110824.jar} | Bin 19358 -> 19403 bytes .../dist/opj_viewer_xerces.jar | 2 +- .../jpip/opj_server/channel_manager.c | 2 +- applications/jpip/opj_server/opj_server.c | 61 ++++++++++++++---- applications/jpip/opj_server/query_parser.c | 5 ++ applications/jpip/opj_server/query_parser.h | 4 ++ 24 files changed, 140 insertions(+), 26 deletions(-) rename applications/jpip/opj_client/opj_viewer/dist/{opj_viewer-20110711.jar => opj_viewer-20110824.jar} (78%) rename applications/jpip/opj_client/opj_viewer_xerces/dist/{opj_viewer_xerces-20110711.jar => opj_viewer_xerces-20110824.jar} (83%) diff --git a/applications/jpip/CHANGES b/applications/jpip/CHANGES index 6c5334bd..13dfe69b 100644 --- a/applications/jpip/CHANGES +++ b/applications/jpip/CHANGES @@ -7,6 +7,7 @@ What's New for OpenJPIP August 24, 2011 + [kaori] added cachemodel_manager, which had been managed in target_manager previously ++ [kaori] added tid request support August 16, 2011 * [antonin] fixed cmake support for openjpip diff --git a/applications/jpip/libopenjpip/box_manager.c b/applications/jpip/libopenjpip/box_manager.c index 41f5043b..d3332576 100644 --- a/applications/jpip/libopenjpip/box_manager.c +++ b/applications/jpip/libopenjpip/box_manager.c @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include diff --git a/applications/jpip/libopenjpip/box_manager.h b/applications/jpip/libopenjpip/box_manager.h index 29d824e4..72f451bf 100644 --- a/applications/jpip/libopenjpip/box_manager.h +++ b/applications/jpip/libopenjpip/box_manager.h @@ -31,7 +31,6 @@ #ifndef BOX_MANAGER_H_ # define BOX_MANAGER_H_ -#include #include "byte_manager.h" //! box parameters diff --git a/applications/jpip/libopenjpip/boxheader_manager.c b/applications/jpip/libopenjpip/boxheader_manager.c index 09253e2a..2f465a3b 100644 --- a/applications/jpip/libopenjpip/boxheader_manager.c +++ b/applications/jpip/libopenjpip/boxheader_manager.c @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include diff --git a/applications/jpip/libopenjpip/byte_manager.c b/applications/jpip/libopenjpip/byte_manager.c index e2ce484b..288adb42 100644 --- a/applications/jpip/libopenjpip/byte_manager.c +++ b/applications/jpip/libopenjpip/byte_manager.c @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include diff --git a/applications/jpip/libopenjpip/byte_manager.h b/applications/jpip/libopenjpip/byte_manager.h index d5b8a0b6..8b90fa90 100644 --- a/applications/jpip/libopenjpip/byte_manager.h +++ b/applications/jpip/libopenjpip/byte_manager.h @@ -31,8 +31,6 @@ #ifndef BYTE_MANAGER_H_ # define BYTE_MANAGER_H_ -#include - //! 1Byte parameter type typedef unsigned char Byte_t; diff --git a/applications/jpip/libopenjpip/codestream_manager.h b/applications/jpip/libopenjpip/codestream_manager.h index eb6aba6a..fcefbeea 100644 --- a/applications/jpip/libopenjpip/codestream_manager.h +++ b/applications/jpip/libopenjpip/codestream_manager.h @@ -31,7 +31,6 @@ #ifndef CODESTREAM_MANAGER_H_ # define CODESTREAM_MANAGER_H_ -#include #include "byte_manager.h" //! codestream parameters diff --git a/applications/jpip/libopenjpip/index_manager.c b/applications/jpip/libopenjpip/index_manager.c index 5a9d187a..96ae6b32 100644 --- a/applications/jpip/libopenjpip/index_manager.c +++ b/applications/jpip/libopenjpip/index_manager.c @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include diff --git a/applications/jpip/libopenjpip/metadata_manager.c b/applications/jpip/libopenjpip/metadata_manager.c index 780a741b..c60f437a 100644 --- a/applications/jpip/libopenjpip/metadata_manager.c +++ b/applications/jpip/libopenjpip/metadata_manager.c @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include diff --git a/applications/jpip/libopenjpip/msgqueue_manager.c b/applications/jpip/libopenjpip/msgqueue_manager.c index 13845bb3..7d0d8dff 100644 --- a/applications/jpip/libopenjpip/msgqueue_manager.c +++ b/applications/jpip/libopenjpip/msgqueue_manager.c @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include @@ -742,31 +743,45 @@ Byte_t * recons_codestream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte Byte_t *codestream = NULL; int last_tileID; int tileID; - + bool found; + Byte8_t binOffset; + *codelen = 0; // main header first ptr = msgqueue->first; + binOffset = 0; while(( ptr = search_message( MAINHEADER_MSG, -1, csn, ptr))!=NULL){ - codestream = add_msgstream( ptr, jpipstream, codestream, codelen); + if( ptr->bin_offset == binOffset){ + codestream = add_msgstream( ptr, jpipstream, codestream, codelen); + binOffset += ptr->length; + } ptr = ptr->next; } last_tileID = get_last_tileID( msgqueue, csn); for( tileID=0; tileID <= last_tileID; tileID++){ - bool found = false; + found = false; + binOffset = 0; + ptr = msgqueue->first; while(( ptr = search_message( TILE_MSG, tileID, csn, ptr))!=NULL){ - found = true; - codestream = add_msgstream( ptr, jpipstream, codestream, codelen); + if( ptr->bin_offset == binOffset){ + found = true; + codestream = add_msgstream( ptr, jpipstream, codestream, codelen); + binOffset += ptr->length; + } ptr = ptr->next; } ptr = msgqueue->first; while(( ptr = search_message( EXT_TILE_MSG, tileID, csn, ptr))!=NULL){ if( ptr->aux >= minlev){ - found = true; - codestream = add_msgstream( ptr, jpipstream, codestream, codelen); + if( ptr->bin_offset == binOffset){ + found = true; + codestream = add_msgstream( ptr, jpipstream, codestream, codelen); + binOffset += ptr->length; + } } ptr = ptr->next; } diff --git a/applications/jpip/libopenjpip/placeholder_manager.c b/applications/jpip/libopenjpip/placeholder_manager.c index 803889b4..d76dbf3c 100644 --- a/applications/jpip/libopenjpip/placeholder_manager.c +++ b/applications/jpip/libopenjpip/placeholder_manager.c @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include "placeholder_manager.h" diff --git a/applications/jpip/libopenjpip/target_manager.c b/applications/jpip/libopenjpip/target_manager.c index 0f085442..1117551d 100644 --- a/applications/jpip/libopenjpip/target_manager.c +++ b/applications/jpip/libopenjpip/target_manager.c @@ -35,6 +35,7 @@ #include #include #include +#include #include "target_manager.h" #ifdef SERVER @@ -91,6 +92,7 @@ target_param_t * gene_target( targetlist_param_t *targetlist, char *targetname) } target = (target_param_t *)malloc( sizeof(target_param_t)); + snprintf( target->tid, MAX_LENOFTID, "%x-%x", (unsigned int)time(NULL), (unsigned int)rand()); strcpy( target->filename, targetname); target->fd = fd; target->csn = last_csn++; @@ -99,6 +101,8 @@ 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 @@ -170,6 +174,7 @@ void delete_targetlist(targetlist_param_t **targetlist) void print_target( target_param_t *target) { fprintf( logstream, "target:\n"); + fprintf( logstream, "\t tid=%s\n", target->tid); fprintf( logstream, "\t csn=%d\n", target->csn); fprintf( logstream, "\t target=%s\n\n", target->filename); } @@ -201,6 +206,26 @@ target_param_t * search_target( char targetname[], targetlist_param_t *targetlis return NULL; } +target_param_t * search_targetBytid( char tid[], targetlist_param_t *targetlist) +{ + target_param_t *foundtarget; + + foundtarget = targetlist->first; + + while( foundtarget != NULL){ + + if( strcmp( tid, foundtarget->tid) == 0) + return foundtarget; + + foundtarget = foundtarget->next; + } + + fprintf( FCGI_stdout, "Status: 404\r\n"); + fprintf( FCGI_stdout, "Reason: tid %s not found\r\n", tid); + + return NULL; +} + int open_jp2file( char filename[]) { int fd; diff --git a/applications/jpip/libopenjpip/target_manager.h b/applications/jpip/libopenjpip/target_manager.h index 5de22ba6..fc872ea8 100644 --- a/applications/jpip/libopenjpip/target_manager.h +++ b/applications/jpip/libopenjpip/target_manager.h @@ -33,11 +33,15 @@ #include "index_manager.h" +//! maximum length of target identifier +#define MAX_LENOFTID 30 + //! maximum length of target name #define MAX_LENOFTARGET 128 //! target parameters typedef struct target_param{ + char tid[MAX_LENOFTID]; //!< taregt identifier char filename[MAX_LENOFTARGET]; //!< file name int fd; //!< file descriptor int csn; //!< codestream number @@ -138,5 +142,15 @@ void print_alltarget( targetlist_param_t *targetlist); */ target_param_t * search_target( char targetname[], targetlist_param_t *targetlist); + +/** + * search a target by tid + * + * @param[in] tid target identifier + * @param[in] targetlist target list pointer + * @return found target pointer + */ +target_param_t * search_targetBytid( char tid[], targetlist_param_t *targetlist); + #endif /* !TARGET_MANAGER_H_ */ diff --git a/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c b/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c index 41d1a31f..0a58d52a 100644 --- a/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c +++ b/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include "jp2k_decoder.h" 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 895ade5c..9779d93b 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 @@ -201,7 +201,7 @@ int main(int argc, char *argv[]){ if( msgqueue) delete_msgqueue( &msgqueue); - // save_codestream( jpipstream, jpipstreamlen, "jpt"); + //save_codestream( jpipstream, jpipstreamlen, "jpt"); free( jpipstream); #ifdef _WIN32 diff --git a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110711.jar b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110824.jar similarity index 78% rename from applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110711.jar rename to applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110824.jar index 1024d50a3a82a3a7eb30ca7d743a70bbb02a8756..b821db33f7b8a78b543fcf92d5f05e45485ce7f1 100644 GIT binary patch delta 2702 zcmV;93UT#-bggs_P)h>@3IG5A000Y%7(bB?Cj<(M7(cN&N(2N;ju$_(hXlzM4GW7H zKhSHi7VZfE0M(OS8y$ZMcvM#v{%>Y^ciy}NGB6~Qjj#w=38jj5ARweH(`IWzLjhYl zOkR?K$xJ%)h9p#L-S=J4R=c=HD{83CP)e<+m1iYQ3-sM!N(YUoWTTxPe^=HMLq74_>_X9D$4O`4?cs>N=&ksV=C^(=a_tt zf+>lNip4n2;9dqN7~Cgu(u@1?c?A!6u@YZUaEfhyk-?W#d>Ici_zHiXmUxKmepTXY z5)Vs!UE&)O-;{s&mc+Luz9aDn+x)JI@8SCjexPDKj!68FzkkFZKW6X~20xYfnZ%vRhpUEtz zj{*TPtIB_tn}c0mU?aBCKta}S+iD?RE}lTacr4YHIaTMRB|$IO1{)36_h1U+uV=&I(CJpb#do;Wnuc53_6Sr#k5B^L0TrsR0Vait}Vu~s1xid)X(JkI zX^*B1rg{bD&(4%4G*PUH5;0E^^EFW_e41E*I8zo1C|fd1f@Rn4764SA&jlY#@;w*88atTgD>#2-iUqwJd)% zU8(M5!bn6Cv77{*=;($8A`7x<3U%d$wuD<^saQs(T0w=N&ZKeJN}1-~V9a$hvGwiY+O!T)uaR`bJYPgD z<^`wNE?Ehej2p5o7S-d%j4tZhx1WFdlg7I_SEqZ9hHHM1@w^JU!y_YloJ!DKXwIBR zvd=ON0BIz8?P;>GuHcBE`zam?Q#dRBFVpL09*FUjp;LSgJ(;9FYtIJXO`>-2>t+RQ z?f!y6FDPJ!l0Cv-F)Cz9f|8Mc%qy~6vuDUOkHbyT^=1u`4&4|^P!=nQ6rz7&8;(cx zt%+DHG1{Z|N0X$I;t9W-uTmvq8KHqi4Y8e0ke=Kc)nol6QkwObtsA*QoKoU^tf6+0x4AsjRKS z?LryuW3}@F%(<#6M4zr*$sm8HHm`Ndvbmbs(BM<=y2Y7EWsaN3O} z^qRen-pn3)UDAz5D<|J~CXU#+-^RL)2W&iO;~`rwYT|_ue3221(N}*r(TfOQ-f$eE z;UtQ79fzYa1E!pP0 zMue;39(a!0>_kDf%(6!cvb|aM4F%b1mYpofF3z%31=(7bZ6Iy4>nSe|&K9vtPSXY} zt9X^c{7Ers${r->fbf5rYNNK=YDg%AD=jrYsa5-(ewW{EX_wB@4w%|wwsr+natlsp zWmOUVH9Io!P3D3dx8-U`P7?O9oNYg#%#=NJp3TOpYPKn6%H3$oHItl+a5)G15Sh-3 z`<*O5GwemC>dVgyr!gCiUzz3R6}D`p?PgwXiRMV>F6cz`a z0jIAvgCzkcWoCbAfc!6GusrAvxP31;ffYqKg_XO4%4rNzF;Ae53H3qQ5Ri_5oZpl| zLk5laf)>qu76a0zI&alX?-FY*X>G+tUe{c-SMMBN)jY44TAsXl zUe$cBFT7~4#dCPo^1Qyt@>HDXRm=Cfc81q2v%Qk}R?~m{w09b7dG=pCt8>`qOJ>;I zFsDrlnZ{$DvCAxD^QMgv4hBghgLSP{w`1fa){|sw&{OKf{W8e;^=)858K7itTcI}~)8xD;2}=PrTLb9fL^!E5R82?eiH@OlMrQ1C_tZvxIBZT{;$gZAf8 zr{K*B-a`DdC>15o;8NurjbHa{ZP4$Ihc0skBb{Whz ztTz5eW*N`HQP0NJem2bms+EAX?#xB-$=WHl>HUjcAF1esGk5O)x z+}3~no?EcEpo(v|y_g=Z3!t4vHB~53wX|k=&GNE}GMcw|FAm#N{4Tn&_|7_H4RGf% zp0c)Yt_?p=_RKhsG=bamI{js{4{M_}ggctd5!}QRm`?dJ`YrDy&^v+o?Tu#3OU6CN zs4*lxm}1nyjE!7}mcS{WMuZw_8#NF``9HHcCA|>@3yT;(llnF{1PY57Ka({#egsR7 z7eBMNHwgg^3yT;(&}*<3?g;<@)sxLQQvqg^AvrbyLz7rJI{|}}lsP^ED>akUIVJ`d IHvj+t0OF$-y8r+H delta 2657 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 PG?M{3CI;#@00000m-YY= diff --git a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar index 5f7ec56d..031f9e68 120000 --- a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar +++ b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar @@ -1 +1 @@ -opj_viewer-20110711.jar \ No newline at end of file +opj_viewer-20110824.jar \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java b/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java index c6bdb556..466370b6 100644 --- a/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java +++ b/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java @@ -40,6 +40,7 @@ public class JPIPHttpClient protected int rx, ry; protected int rw, rh; protected String cid; + protected String tid; public JPIPHttpClient( String URI) { @@ -48,6 +49,7 @@ public class JPIPHttpClient rx = ry = -1; rw = rh = -1; cid = null; + tid = null; } public int getFw(){ return fw;} @@ -177,6 +179,12 @@ public class JPIPHttpClient cid = hvalueline.substring( hvalueline.indexOf('=')+1, hvalueline.indexOf(',')); System.err.println("cid: " + cid); } + + if(( hvaluelist = headers.get("JPIP-tid")) != null){ + String hvalueline = hvaluelist.get(0); + tid = hvalueline.substring( hvalueline.indexOf('=')+1); + System.err.println("tid: " + tid); + } InputStream input = urlconn.getInputStream(); buflen = input.available(); diff --git a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110711.jar b/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110824.jar similarity index 83% rename from applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110711.jar rename to applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110824.jar index 30b824b767fb50cc9ff94f96b0592d01f054489c..b5ad639d7fdb00d41e47b9b8f71e2a1439b137c3 100644 GIT binary patch delta 2767 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 V00000q=9*paZ4u#Wk&!2005UHD&PPB delta 2673 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 = cachemodel; // set channel ID and get present time - snprintf( channel->cid, MAX_LENOFCID, "%x%x", (unsigned int)time( &channel->start_tm), (unsigned int)rand());; + snprintf( channel->cid, MAX_LENOFCID, "%x%x", (unsigned int)time( &channel->start_tm), (unsigned int)rand()); channel->next=NULL; diff --git a/applications/jpip/opj_server/opj_server.c b/applications/jpip/opj_server/opj_server.c index 3a7e1087..93fffc7e 100644 --- a/applications/jpip/opj_server/opj_server.c +++ b/applications/jpip/opj_server/opj_server.c @@ -113,10 +113,11 @@ int main(void) #ifndef SERVER print_queryparam( query_param); #endif - - msgqueue = NULL; - parse_status = parse_JPIPrequest( query_param, sessionlist, targetlist, &msgqueue); + msgqueue = NULL; + if( !(parse_status = parse_JPIPrequest( query_param, sessionlist, targetlist, &msgqueue))) + fprintf( FCGI_stderr, "Error: JPIP request failed\n"); + fprintf( FCGI_stdout, "\r\n"); #ifndef SERVER @@ -136,6 +137,15 @@ int main(void) return 0; } +/** + * REQUEST: target identification by target or tid request + * + * @param[in] query_param structured query + * @param[in] targetlist target list pointer + * @param[out] target address of target pointer + * @return if succeeded (true) or failed (false) + */ +bool identify_target( query_param_t query_param, targetlist_param_t *targetlist, target_param_t **target); /** * REQUEST: channel association @@ -205,16 +215,15 @@ bool parse_JPIPrequest( query_param_t query_param, target_param_t *target = NULL; session_param_t *cursession = NULL; channel_param_t *curchannel = NULL; - - if( query_param.target[0] !='\0') - if( !( target = search_target( query_param.target, targetlist))) - if(!( target = gene_target( targetlist, query_param.target))) - return false; - - if( query_param.cid[0] != '\0') + + if( !identify_target( query_param, targetlist, &target)) + return false; + + if( query_param.cid[0] != '\0'){ if( !associate_channel( query_param, sessionlist, &cursession, &curchannel)) return false; - + } + if( query_param.cnew){ if( !open_channel( query_param, sessionlist, target, &cursession, &curchannel)) return false; @@ -230,6 +239,36 @@ bool parse_JPIPrequest( query_param_t query_param, return true; } +bool identify_target( query_param_t query_param, targetlist_param_t *targetlist, target_param_t **target) +{ + if( query_param.target[0] !='\0') + if( !( *target = search_target( query_param.target, targetlist))) + if(!( *target = gene_target( targetlist, query_param.target))) + return false; + + if( query_param.tid[0] !='\0'){ + if( strcmp( query_param.tid, "0") != 0 ){ + if( query_param.cid[0] != '\0'){ + fprintf( FCGI_stdout, "Reason: Target can not be specified both through tid and cid\r\n"); + fprintf( FCGI_stdout, "Status: 400\r\n"); + return false; + } + if( !( *target = search_targetBytid( query_param.tid, targetlist))) + return false; + } + else{ + if( *target) + fprintf( FCGI_stdout, "JPIP-tid: %s\r\n", (*target)->tid); + else{ + fprintf( FCGI_stdout, "Reason: target not specified\r\n"); + fprintf( FCGI_stdout, "Status: 400\r\n"); + return false; + } + } + } + return true; +} + bool associate_channel( query_param_t query_param, sessionlist_param_t *sessionlist, session_param_t **cursession, diff --git a/applications/jpip/opj_server/query_parser.c b/applications/jpip/opj_server/query_parser.c index 53317d88..b5dc4144 100644 --- a/applications/jpip/opj_server/query_parser.c +++ b/applications/jpip/opj_server/query_parser.c @@ -99,6 +99,9 @@ void parse_query( char *query_string, query_param_t *query_param) if( strcasecmp( fieldname, "target") == 0) strcpy( query_param->target,fieldval); + else if( strcasecmp( fieldname, "tid") == 0) + strcpy( query_param->tid, fieldval); + else if( strcasecmp( fieldname, "fsiz") == 0) sscanf( fieldval, "%d,%d", &query_param->fx, &query_param->fy); @@ -128,6 +131,7 @@ void init_queryparam( query_param_t *query_param) int i; query_param->target[0]='\0'; + query_param->tid[0]='\0'; query_param->fx=-1; query_param->fy=-1; query_param->rx=-1; @@ -183,6 +187,7 @@ void print_queryparam( query_param_t query_param) fprintf( logstream, "query parameters:\n"); fprintf( logstream, "\t target: %s\n", query_param.target); + fprintf( logstream, "\t tid: %s\n", query_param.tid); fprintf( logstream, "\t fx,fy: %d, %d\n", query_param.fx, query_param.fy); fprintf( logstream, "\t rx,ry: %d, %d \t rw,rh: %d, %d\n", query_param.rx, query_param.ry, query_param.rw, query_param.rh); fprintf( logstream, "\t cnew: %d\n", query_param.cnew); diff --git a/applications/jpip/opj_server/query_parser.h b/applications/jpip/opj_server/query_parser.h index b511a711..db46f332 100644 --- a/applications/jpip/opj_server/query_parser.h +++ b/applications/jpip/opj_server/query_parser.h @@ -35,6 +35,9 @@ //! maximum length of target name #define MAX_LENOFTARGET 128 + +//! maximum length of target identifier +#define MAX_LENOFTID 30 //! maximum length of channel identifier #define MAX_LENOFCID 30 @@ -48,6 +51,7 @@ //! Query parameters typedef struct query_param{ char target[MAX_LENOFTARGET]; //!< target name + char tid[MAX_LENOFTID]; //!< target identifier int fx, fy; //!< frame size (fx,fy) int rx, ry, rw, rh; //!< roi region char cid[MAX_LENOFCID]; //!< channel identifier