diff options
Diffstat (limited to 'src/lib/openjpip/target_manager.c')
| -rw-r--r-- | src/lib/openjpip/target_manager.c | 367 |
1 files changed, 183 insertions, 184 deletions
diff --git a/src/lib/openjpip/target_manager.c b/src/lib/openjpip/target_manager.c index fe9a6235..1c572755 100644 --- a/src/lib/openjpip/target_manager.c +++ b/src/lib/openjpip/target_manager.c @@ -56,14 +56,14 @@ targetlist_param_t * gene_targetlist(void) { - targetlist_param_t *targetlist; + targetlist_param_t *targetlist; - targetlist = (targetlist_param_t *)opj_malloc( sizeof(targetlist_param_t)); - - targetlist->first = NULL; - targetlist->last = NULL; + targetlist = (targetlist_param_t *)opj_malloc( sizeof(targetlist_param_t)); - return targetlist; + targetlist->first = NULL; + targetlist->last = NULL; + + return targetlist; } @@ -78,222 +78,221 @@ int open_jp2file( const char filepath[], char tmpfname[]); target_param_t * gene_target( targetlist_param_t *targetlist, char *targetpath) { - target_param_t *target; - int fd; - index_param_t *jp2idx; - char tmpfname[MAX_LENOFTID]; - static int last_csn = 0; - - if( targetpath[0]=='\0'){ - fprintf( FCGI_stderr, "Error: exception, no targetpath in gene_target()\n"); - return NULL; - } + target_param_t *target; + int fd; + index_param_t *jp2idx; + char tmpfname[MAX_LENOFTID]; + static int last_csn = 0; + + if( targetpath[0]=='\0') { + fprintf( FCGI_stderr, "Error: exception, no targetpath in gene_target()\n"); + return NULL; + } - if((fd = open_jp2file( targetpath, tmpfname)) == -1){ - fprintf( FCGI_stdout, "Status: 404\r\n"); - return NULL; - } - - if( !(jp2idx = parse_jp2file( fd))){ - fprintf( FCGI_stdout, "Status: 501\r\n"); - return NULL; - } + if((fd = open_jp2file( targetpath, tmpfname)) == -1) { + fprintf( FCGI_stdout, "Status: 404\r\n"); + return NULL; + } - target = (target_param_t *)opj_malloc( sizeof(target_param_t)); - snprintf( target->tid, MAX_LENOFTID, "%x-%x", (unsigned int)time(NULL), (unsigned int)rand()); - target->targetname = strdup( targetpath); - target->fd = fd; + if( !(jp2idx = parse_jp2file( fd))) { + fprintf( FCGI_stdout, "Status: 501\r\n"); + return NULL; + } + + target = (target_param_t *)opj_malloc( sizeof(target_param_t)); + snprintf( target->tid, MAX_LENOFTID, "%x-%x", (unsigned int)time(NULL), (unsigned int)rand()); + target->targetname = strdup( targetpath); + target->fd = fd; #ifdef SERVER - if( tmpfname[0]) - target->tmpfname = strdup( tmpfname); - else - target->tmpfname = NULL; + if( tmpfname[0]) + target->tmpfname = strdup( tmpfname); + else + target->tmpfname = NULL; #endif - target->csn = last_csn++; - target->codeidx = jp2idx; - target->num_of_use = 0; - target->jppstream = OPJ_TRUE; - target->jptstream = isJPTfeasible( *jp2idx); - target->next=NULL; - - if( targetlist->first) /* there are one or more entries*/ - targetlist->last->next = target; - else /* first entry*/ - targetlist->first = target; - targetlist->last = target; + target->csn = last_csn++; + target->codeidx = jp2idx; + target->num_of_use = 0; + target->jppstream = OPJ_TRUE; + target->jptstream = isJPTfeasible( *jp2idx); + target->next=NULL; + + if( targetlist->first) /* there are one or more entries*/ + targetlist->last->next = target; + else /* first entry*/ + targetlist->first = target; + targetlist->last = target; #ifndef SERVER - fprintf( logstream, "local log: target %s generated\n", targetpath); + fprintf( logstream, "local log: target %s generated\n", targetpath); #endif - - return target; + + return target; } void refer_target( target_param_t *reftarget, target_param_t **ptr) { - *ptr = reftarget; - reftarget->num_of_use++; + *ptr = reftarget; + reftarget->num_of_use++; } void unrefer_target( target_param_t *target) { - target->num_of_use--; + target->num_of_use--; } void delete_target( target_param_t **target) { - close( (*target)->fd); + close( (*target)->fd); #ifdef SERVER - if( (*target)->tmpfname){ - fprintf( FCGI_stderr, "Temporal file %s is deleted\n", (*target)->tmpfname); - remove( (*target)->tmpfname); - } + if( (*target)->tmpfname) { + fprintf( FCGI_stderr, "Temporal file %s is deleted\n", (*target)->tmpfname); + remove( (*target)->tmpfname); + } #endif - if( (*target)->codeidx) - delete_index ( &(*target)->codeidx); - + if( (*target)->codeidx) + delete_index ( &(*target)->codeidx); + #ifndef SERVER - fprintf( logstream, "local log: target: %s deleted\n", (*target)->targetname); + fprintf( logstream, "local log: target: %s deleted\n", (*target)->targetname); #endif - opj_free( (*target)->targetname); + opj_free( (*target)->targetname); - opj_free(*target); + opj_free(*target); } void delete_target_in_list( target_param_t **target, targetlist_param_t *targetlist) { - target_param_t *ptr; + target_param_t *ptr; - if( *target == targetlist->first) - targetlist->first = (*target)->next; - else{ - ptr = targetlist->first; - while( ptr->next != *target){ - ptr=ptr->next; + if( *target == targetlist->first) + targetlist->first = (*target)->next; + else { + ptr = targetlist->first; + while( ptr->next != *target) { + ptr=ptr->next; + } + + ptr->next = (*target)->next; + + if( *target == targetlist->last) + targetlist->last = ptr; } - - ptr->next = (*target)->next; - - if( *target == targetlist->last) - targetlist->last = ptr; - } - delete_target( target); + delete_target( target); } void delete_targetlist(targetlist_param_t **targetlist) { - target_param_t *targetPtr, *targetNext; - - targetPtr = (*targetlist)->first; - while( targetPtr != NULL){ - targetNext=targetPtr->next; - delete_target( &targetPtr); - targetPtr=targetNext; - } - opj_free( *targetlist); + target_param_t *targetPtr, *targetNext; + + targetPtr = (*targetlist)->first; + while( targetPtr != NULL) { + targetNext=targetPtr->next; + delete_target( &targetPtr); + targetPtr=targetNext; + } + opj_free( *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->targetname); + 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->targetname); } void print_alltarget( targetlist_param_t *targetlist) { - target_param_t *ptr; + target_param_t *ptr; - ptr = targetlist->first; - while( ptr != NULL){ - print_target( ptr); - ptr=ptr->next; - } + ptr = targetlist->first; + while( ptr != NULL) { + print_target( ptr); + ptr=ptr->next; + } } target_param_t * search_target( const char targetname[], targetlist_param_t *targetlist) { - target_param_t *foundtarget; - - foundtarget = targetlist->first; - - while( foundtarget != NULL){ - - if( strcmp( targetname, foundtarget->targetname) == 0) - return foundtarget; - - foundtarget = foundtarget->next; - } - return NULL; + target_param_t *foundtarget; + + foundtarget = targetlist->first; + + while( foundtarget != NULL) { + + if( strcmp( targetname, foundtarget->targetname) == 0) + return foundtarget; + + foundtarget = foundtarget->next; + } + return NULL; } target_param_t * search_targetBytid( const 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; - } - - return NULL; + target_param_t *foundtarget; + + foundtarget = targetlist->first; + + while( foundtarget != NULL) { + + if( strcmp( tid, foundtarget->tid) == 0) + return foundtarget; + + foundtarget = foundtarget->next; + } + + return NULL; } int open_remotefile( const char filepath[], char tmpfname[]); int open_jp2file( const char filepath[], char tmpfname[]) { - int fd; - char *data; - - /* download remote target file to local storage*/ - if( strncmp( filepath, "http://", 7) == 0){ - if( (fd = open_remotefile( filepath, tmpfname)) == -1) - return -1; - } - else{ - tmpfname[0] = 0; - if( (fd = open( filepath, O_RDONLY)) == -1){ - fprintf( FCGI_stdout, "Reason: Target %s not found\r\n", filepath); - return -1; + int fd; + char *data; + + /* download remote target file to local storage*/ + if( strncmp( filepath, "http://", 7) == 0) { + if( (fd = open_remotefile( filepath, tmpfname)) == -1) + return -1; + } else { + tmpfname[0] = 0; + if( (fd = open( filepath, O_RDONLY)) == -1) { + fprintf( FCGI_stdout, "Reason: Target %s not found\r\n", filepath); + return -1; + } + } + /* Check resource is a JP family file.*/ + if( lseek( fd, 0, SEEK_SET)==-1) { + close(fd); + fprintf( FCGI_stdout, "Reason: Target %s broken (lseek error)\r\n", filepath); + return -1; } - } - /* Check resource is a JP family file.*/ - if( lseek( fd, 0, SEEK_SET)==-1){ - close(fd); - fprintf( FCGI_stdout, "Reason: Target %s broken (lseek error)\r\n", filepath); - return -1; - } - - data = (char *)opj_malloc( 12); /* size of header*/ - if( read( fd, data, 12) != 12){ - opj_free( data); - close(fd); - fprintf( FCGI_stdout, "Reason: Target %s broken (read error)\r\n", filepath); - return -1; - } - - if( *data || *(data + 1) || *(data + 2) || - *(data + 3) != 12 || strncmp (data + 4, "jP \r\n\x87\n", 8)){ - opj_free( data); - close(fd); - fprintf( FCGI_stdout, "Reason: No JPEG 2000 Signature box in target %s\r\n", filepath); - return -1; - } + data = (char *)opj_malloc( 12); /* size of header*/ + + if( read( fd, data, 12) != 12) { + opj_free( data); + close(fd); + fprintf( FCGI_stdout, "Reason: Target %s broken (read error)\r\n", filepath); + return -1; + } - opj_free( data); + if( *data || *(data + 1) || *(data + 2) || + *(data + 3) != 12 || strncmp (data + 4, "jP \r\n\x87\n", 8)) { + opj_free( data); + close(fd); + fprintf( FCGI_stdout, "Reason: No JPEG 2000 Signature box in target %s\r\n", filepath); + return -1; + } + + opj_free( data); - return fd; + return fd; } #ifdef SERVER @@ -303,43 +302,43 @@ static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream); int open_remotefile( const char filepath[], char tmpfname[]) { #ifndef SERVER - (void)filepath; - (void)tmpfname; - fprintf( FCGI_stderr, "Remote file can not be opened in local mode\n"); - return -1; + (void)filepath; + (void)tmpfname; + fprintf( FCGI_stderr, "Remote file can not be opened in local mode\n"); + return -1; #else - CURL *curl_handle; - int fd; - - curl_handle = curl_easy_init(); - curl_easy_setopt(curl_handle, CURLOPT_URL, filepath); - curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L); - curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data); - - snprintf( tmpfname, MAX_LENOFTID, "%x-%x.jp2", (unsigned int)time(NULL), (unsigned int)rand()); - fprintf( FCGI_stderr, "%s is downloaded to a temporal new file %s\n", filepath, tmpfname); - if( (fd = open( tmpfname, O_RDWR|O_CREAT|O_EXCL, S_IRWXU)) == -1){ - fprintf( FCGI_stdout, "Reason: File open error %s\r\n", tmpfname); + CURL *curl_handle; + int fd; + + curl_handle = curl_easy_init(); + curl_easy_setopt(curl_handle, CURLOPT_URL, filepath); + curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data); + + snprintf( tmpfname, MAX_LENOFTID, "%x-%x.jp2", (unsigned int)time(NULL), (unsigned int)rand()); + fprintf( FCGI_stderr, "%s is downloaded to a temporal new file %s\n", filepath, tmpfname); + if( (fd = open( tmpfname, O_RDWR|O_CREAT|O_EXCL, S_IRWXU)) == -1) { + fprintf( FCGI_stdout, "Reason: File open error %s\r\n", tmpfname); + curl_easy_cleanup(curl_handle); + return -1; + } + curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &fd); + curl_easy_perform(curl_handle); curl_easy_cleanup(curl_handle); - return -1; - } - curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &fd); - curl_easy_perform(curl_handle); - curl_easy_cleanup(curl_handle); - return fd; + return fd; #endif /*SERVER*/ } #ifdef SERVER static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) { - int *fd = (int *)stream; - ssize_t written = write( *fd, ptr, size*nmemb); - assert( written >= 0 ); + int *fd = (int *)stream; + ssize_t written = write( *fd, ptr, size*nmemb); + assert( written >= 0 ); - return (size_t)written; + return (size_t)written; } #endif /*SERVER*/ |
