[1.5] backport r909, r922-925 to branch 1.5 (terminating status of opj_server in debug/non-server mode and stateless requests)

This commit is contained in:
Antonin Descampe 2011-10-10 07:03:28 +00:00
parent d35f647aaa
commit 9e60c2f8e9
18 changed files with 96 additions and 36 deletions

View File

@ -5,6 +5,12 @@ What's New for OpenJPIP
! : changed ! : changed
+ : added + : added
September 16, 2011
+ [kaori] enabled stateless requests from the opj_viewers
Septempber 1, 2011
* [kaori] changed terminating status of opj_server in debug/non-server mode
August 27, 2011 August 27, 2011
* [antonin] fixed missing include directory in opj_client/opj_dec_server/CMakeLists.txt * [antonin] fixed missing include directory in opj_client/opj_dec_server/CMakeLists.txt

View File

@ -106,10 +106,11 @@ Client:
% ../opj_dec_server % ../opj_dec_server
2. Open image viewers (as many as needed) 2. Open image viewers (as many as needed)
% java -jar opj_viewer.jar http://hostname/myFCGI JP2_filename.jp2 % java -jar opj_viewer.jar http://hostname/myFCGI JP2_filename.jp2 [stateless]
( The arguments ( The arguments
- http://hostname/myFCGI is the HTTP server URI (myFCGI refers to opj_server by the server setting) - http://hostname/myFCGI is the HTTP server URI (myFCGI refers to opj_server by the server setting)
- JP2_filename.jp2 is the name of a JP2 file available on the server.) - JP2_filename.jp2 is the name of a JP2 file available on the server.
- stateless if stateless request is desired, otherwise session request is implemented
Image viewer GUI instructions: Image viewer GUI instructions:
Scale up request: Enlarge the window Scale up request: Enlarge the window
ROI request: Select a region by mouse click and drag, then click inside the red frame of the selected region ROI request: Select a region by mouse click and drag, then click inside the red frame of the selected region

View File

@ -154,6 +154,20 @@ cache_param_t * search_cacheBycid( char cid[], cachelist_param_t *cachelist)
return NULL; return NULL;
} }
cache_param_t * search_cacheBytid( char tid[], cachelist_param_t *cachelist)
{
cache_param_t *foundcache;
foundcache = cachelist->first;
while( foundcache != NULL){
if( strcmp( tid, foundcache->tid) == 0)
return foundcache;
foundcache = foundcache->next;
}
return NULL;
}
void add_cachecid( char *cid, cache_param_t *cache) void add_cachecid( char *cid, cache_param_t *cache)
{ {
char **tmp; char **tmp;

View File

@ -121,7 +121,7 @@ cache_param_t * search_cacheBycsn( int csn, cachelist_param_t *cachelist);
/** /**
* search codestream number (csn) by cid * search a cache by cid
* *
* @param[in] cid channel identifer * @param[in] cid channel identifer
* @param[in] cachelist cache list pointer * @param[in] cachelist cache list pointer
@ -129,6 +129,16 @@ cache_param_t * search_cacheBycsn( int csn, cachelist_param_t *cachelist);
*/ */
cache_param_t * search_cacheBycid( char cid[], cachelist_param_t *cachelist); cache_param_t * search_cacheBycid( char cid[], cachelist_param_t *cachelist);
/**
* search a cache by tid
*
* @param[in] tid target identifer
* @param[in] cachelist cache list pointer
* @return found cache pointer
*/
cache_param_t * search_cacheBytid( char tid[], cachelist_param_t *cachelist);
/** /**
* add cid into a cache * add cid into a cache
* *

View File

@ -123,6 +123,7 @@ Byte_t * receive_JPIPstream( SOCKET connected_socket, char *target, char *tid, c
target[0] = 0; target[0] = 0;
cid[0] = 0; cid[0] = 0;
tid[0] = 0;
if((linelen = receive_line( connected_socket, buf)) == 0) if((linelen = receive_line( connected_socket, buf)) == 0)
return NULL; return NULL;
@ -140,11 +141,13 @@ Byte_t * receive_JPIPstream( SOCKET connected_socket, char *target, char *tid, c
if((linelen = receive_line( connected_socket, buf)) == 0) if((linelen = receive_line( connected_socket, buf)) == 0)
return NULL; return NULL;
strcpy( tid, buf); if( strcmp( buf, "0") != 0)
strcpy( tid, buf);
if((linelen = receive_line( connected_socket, buf)) == 0) if((linelen = receive_line( connected_socket, buf)) == 0)
return NULL; return NULL;
strcpy( cid, buf); if( strcmp( buf, "0") != 0)
strcpy( cid, buf);
if((linelen = receive_line( connected_socket, buf)) == 0) if((linelen = receive_line( connected_socket, buf)) == 0)
return NULL; return NULL;

View File

@ -141,7 +141,7 @@ int receive_line(SOCKET connected_socket, char *buf);
*\section sec2 PNM request *\section sec2 PNM request
* Get decoded PGM/PPM image * Get decoded PGM/PPM image
* *
* client -> server: PNM request\\n cidstring\\n fw\\n fh\\n \n * client -> server: PNM request\\n [cid/tid]string\\n fw\\n fh\\n \n
* server -> client: P6 or P5 (2Byte) width (2Byte Big endian) height (2Byte Big endian) maxval (1Byte) data * server -> client: P6 or P5 (2Byte) width (2Byte Big endian) height (2Byte Big endian) maxval (1Byte) data
* *
*\section sec3 XML request *\section sec3 XML request

View File

@ -247,10 +247,12 @@ void handle_JPIPstreamMSG( SOCKET connected_socket, cachelist_param_t *cachelist
parse_metamsg( msgqueue, *jpipstream, *streamlen, metadatalist); parse_metamsg( msgqueue, *jpipstream, *streamlen, metadatalist);
// cid registration // cid registration
if( target[0] != 0 && tid[0] != 0 && cid[0] != 0){ if( target[0] != 0){
if((cache = search_cache( target, cachelist))){ if((cache = search_cache( target, cachelist))){
add_cachecid( cid, cache); if( tid[0] != 0)
update_cachetid( tid, cache); update_cachetid( tid, cache);
if( cid[0] != 0)
add_cachecid( cid, cache);
} }
else{ else{
cache = gene_cache( target, msgqueue->last->csn, tid, cid); cache = gene_cache( target, msgqueue->last->csn, tid, cid);
@ -277,7 +279,8 @@ void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_par
receive_line( connected_socket, cid); receive_line( connected_socket, cid);
if(!(cache = search_cacheBycid( cid, cachelist))) if(!(cache = search_cacheBycid( cid, cachelist)))
return; if(!(cache = search_cacheBytid( cid, cachelist)))
return;
receive_line( connected_socket, tmp); receive_line( connected_socket, tmp);
fw = atoi( tmp); fw = atoi( tmp);

View File

@ -1 +1 @@
opj_viewer-20110825.jar opj_viewer-20110916.jar

View File

@ -43,22 +43,25 @@ public class ImageManager extends JPIPHttpClient
public int getOrigWidth(){ return pnmimage.width;} public int getOrigWidth(){ return pnmimage.width;}
public int getOrigHeight(){ return pnmimage.height;} public int getOrigHeight(){ return pnmimage.height;}
public Image getImage( String j2kfilename, int reqfw, int reqfh) public Image getImage( String j2kfilename, int reqfw, int reqfh, boolean reqcnew)
{ {
System.err.println(); System.err.println();
String refcid = ImgdecClient.query_cid( j2kfilename); String refcid = null;
byte[] jpipstream; byte[] jpipstream;
if( reqcnew)
refcid = ImgdecClient.query_cid( j2kfilename);
if( refcid == null){ if( refcid == null){
String reftid = ImgdecClient.query_tid( j2kfilename); String reftid = ImgdecClient.query_tid( j2kfilename);
if( reftid == null) if( reftid == null)
jpipstream = super.requestViewWindow( j2kfilename, reqfw, reqfh, true); jpipstream = super.requestViewWindow( j2kfilename, reqfw, reqfh, reqcnew);
else else
jpipstream = super.requestViewWindow( j2kfilename, reftid, reqfw, reqfh, true); jpipstream = super.requestViewWindow( j2kfilename, reftid, reqfw, reqfh, reqcnew);
} }
else else
jpipstream = super.requestViewWindow( reqfw, reqfh, refcid, true); jpipstream = super.requestViewWindow( reqfw, reqfh, refcid, reqcnew);
System.err.println( "decoding to PNM image"); System.err.println( "decoding to PNM image");
pnmimage = ImgdecClient.decode_jpipstream( jpipstream, j2kfilename, tid, cid, fw, fh); pnmimage = ImgdecClient.decode_jpipstream( jpipstream, j2kfilename, tid, cid, fw, fh);
@ -74,7 +77,7 @@ public class ImageManager extends JPIPHttpClient
byte[] jpipstream = super.requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh); byte[] jpipstream = super.requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh);
System.err.println( "decoding to PNM image"); System.err.println( "decoding to PNM image");
pnmimage = ImgdecClient.decode_jpipstream( jpipstream, cid, fw, fh); pnmimage = ImgdecClient.decode_jpipstream( jpipstream, tid, cid, fw, fh);
System.err.println( " done"); System.err.println( " done");
return pnmimage.createROIImage( rx, ry, rw, rh); return pnmimage.createROIImage( rx, ry, rw, rh);
@ -96,7 +99,9 @@ public class ImageManager extends JPIPHttpClient
} }
public void closeChannel() public void closeChannel()
{ {
ImgdecClient.destroy_cid( cid); if( cid != null){
super.closeChannel(); ImgdecClient.destroy_cid( cid);
super.closeChannel();
}
} }
} }

View File

@ -55,7 +55,7 @@ public class ImageViewer extends JPanel
private Rectangle roirect[] = null; private Rectangle roirect[] = null;
private String roiname[] = null; private String roiname[] = null;
public ImageViewer( String j2kfilename, ImageManager manager) public ImageViewer( String j2kfilename, ImageManager manager, boolean session)
{ {
String str; String str;
@ -70,7 +70,7 @@ public class ImageViewer extends JPanel
myRL = new ResizeListener(this); myRL = new ResizeListener(this);
imgmanager = manager; imgmanager = manager;
img = imgmanager.getImage( j2kfilename, vw, vh); img = imgmanager.getImage( j2kfilename, vw, vh, session);
addMouseListener(myMML); addMouseListener(myMML);
addMouseMotionListener(myMML); addMouseMotionListener(myMML);

View File

@ -38,13 +38,13 @@ public class ImageWindow extends JFrame
// private OptionPanel optpanel; // private OptionPanel optpanel;
private ImageManager imgmanager; private ImageManager imgmanager;
public ImageWindow( String uri, String j2kfilename) public ImageWindow( String uri, String j2kfilename, boolean session)
{ {
super( j2kfilename); super( j2kfilename);
imgmanager = new ImageManager( uri); imgmanager = new ImageManager( uri);
imgviewer = new ImageViewer( j2kfilename, imgmanager); imgviewer = new ImageViewer( j2kfilename, imgmanager, session);
imgviewer.setOpaque(true); //content panes must be opaque imgviewer.setOpaque(true); //content panes must be opaque
// optpanel = new OptionPanel( imgmanager, imgviewer); // optpanel = new OptionPanel( imgmanager, imgviewer);
@ -71,16 +71,21 @@ public class ImageWindow extends JFrame
public static void main(String s[]) public static void main(String s[])
{ {
String j2kfilename, uri; String j2kfilename, uri;
boolean session;
if(s.length > 0){ if(s.length > 0){
uri = s[0]; uri = s[0];
j2kfilename = s[1]; j2kfilename = s[1];
if( s.length > 2)
session = !s[2].equalsIgnoreCase( "stateless");
else
session = true;
} }
else{ else{
System.out.println("Usage: java -jar opj_viewer.jar HTTP_server_URI imagefile.jp2"); System.out.println("Usage: java -jar opj_viewer.jar HTTP_server_URI imagefile.jp2 [stateless/session]");
return; return;
} }
ImageWindow frame = new ImageWindow( uri, j2kfilename); ImageWindow frame = new ImageWindow( uri, j2kfilename, session);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

View File

@ -33,17 +33,17 @@ import java.net.*;
public class ImgdecClient{ public class ImgdecClient{
public static PnmImage decode_jpipstream( byte[] jpipstream, String cid, int fw, int fh) public static PnmImage decode_jpipstream( byte[] jpipstream, String tid, String cid, int fw, int fh)
{ {
if( jpipstream != null) if( jpipstream != null)
send_JPIPstream( jpipstream); send_JPIPstream( jpipstream);
return get_PNMstream( cid, fw, fh); return get_PNMstream( cid, tid, fw, fh);
} }
public static PnmImage decode_jpipstream( byte[] jpipstream, String j2kfilename, String tid, String cid, int fw, int fh) public static PnmImage decode_jpipstream( byte[] jpipstream, String j2kfilename, String tid, String cid, int fw, int fh)
{ {
send_JPIPstream( jpipstream, j2kfilename, tid, cid); send_JPIPstream( jpipstream, j2kfilename, tid, cid);
return get_PNMstream( cid, fw, fh); return get_PNMstream( cid, tid, fw, fh);
} }
public static void send_JPIPstream( byte[] jpipstream) public static void send_JPIPstream( byte[] jpipstream)
@ -91,7 +91,10 @@ public class ImgdecClient{
os.writeBytes( "0\n"); os.writeBytes( "0\n");
else else
os.writeBytes( tid + "\n"); os.writeBytes( tid + "\n");
os.writeBytes( cid + "\n"); if( cid == null)
os.writeBytes( "0\n");
else
os.writeBytes( cid + "\n");
os.writeBytes( length + "\n"); os.writeBytes( length + "\n");
os.write( jpipstream, 0, length); os.write( jpipstream, 0, length);
@ -106,7 +109,7 @@ public class ImgdecClient{
} }
} }
public static PnmImage get_PNMstream( String cid, int fw, int fh) public static PnmImage get_PNMstream( String cid, String tid, int fw, int fh)
{ {
PnmImage pnmstream = new PnmImage(); PnmImage pnmstream = new PnmImage();
try { try {
@ -116,7 +119,13 @@ public class ImgdecClient{
byte []header = new byte[7]; byte []header = new byte[7];
os.writeBytes("PNM request\n"); os.writeBytes("PNM request\n");
os.writeBytes( cid + "\n"); if( cid != null)
os.writeBytes( cid + "\n");
else
if( tid != null)
os.writeBytes( tid + "\n");
else
os.writeBytes( "0\n");
os.writeBytes( fw + "\n"); os.writeBytes( fw + "\n");
os.writeBytes( fh + "\n"); os.writeBytes( fh + "\n");

View File

@ -72,7 +72,11 @@ public class JPIPHttpClient
if( cid != null) if( cid != null)
return requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh, cid); return requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh, cid);
else else
return null; // return null;
if( tid != null)
return requestViewWindow( null, tid, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, null, false);
else
return null;
} }
public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid) public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid)

View File

@ -1 +1 @@
opj_viewer_xerces-20110825.jar opj_viewer_xerces-20110916.jar

View File

@ -98,7 +98,7 @@ int main(void)
#else #else
char query_string[128]; char query_string[128];
while((fgets( query_string, 128, stdin))[0] != '\n' ) while( fgets( query_string, 128, stdin) && query_string[0]!='\n')
#endif #endif
{ {