Beispiel #1
0
int
readDATADDS(OCstate* state, OCtree* tree, OCflags flags)
{
    int stat = OC_NOERR;
    long lastmod = -1;

#ifdef OCDEBUG
fprintf(stderr,"readDATADDS:\n");
#endif
    if((flags & OCONDISK) == 0) {
        ocurisetconstraints(state->uri,tree->constraint);
        stat = readpacket(state,state->uri,state->packet,OCDATADDS,&lastmod);
        if(stat == OC_NOERR)
            state->datalastmodified = lastmod;
        tree->data.datasize = ocbyteslength(state->packet);
    } else { /*((flags & OCONDISK) != 0) */
        OCURI* url = state->uri;
        int fileprotocol = 0;
        char* readurl = NULL;

        fileprotocol = (strcmp(url->protocol,"file")==0);

        if(fileprotocol && !state->curlflags.proto_file) {
            readurl = ocuribuild(url,NULL,NULL,0);
            stat = readfiletofile(readurl, ".dods", tree->data.file, &tree->data.datasize);
        } else {
            int flags = 0;
            if(!fileprotocol) flags |= OCURICONSTRAINTS;
            flags |= OCURIENCODE;
	    flags |= OCURIUSERPWD;
            ocurisetconstraints(url,tree->constraint);
            readurl = ocuribuild(url,NULL,".dods",flags);
            MEMCHECK(readurl,OC_ENOMEM);
            if (ocdebug > 0) 
                {fprintf(stderr, "fetch url=%s\n", readurl);fflush(stderr);}
            stat = ocfetchurl_file(state->curl, readurl, tree->data.file,
                                   &tree->data.datasize, &lastmod);
            if(stat == OC_NOERR)
                state->datalastmodified = lastmod;
            if (ocdebug > 0) 
                {fprintf(stderr,"fetch complete\n"); fflush(stderr);}
        }
        free(readurl);
    }
    return OCTHROW(stat);
}
Beispiel #2
0
int
readDATADDS(OCstate* state, OCtree* tree)
{
   int stat;
   long lastmod = -1;
#ifndef OC_DISK_STORAGE
   dapurlsetconstraints(&state->url,tree->constraint);
   stat = readpacket(state->curl,&state->url,state->packet,OCDATADDS,&lastmod);
   if(stat == OC_NOERR)
        state->datalastmodified = lastmod;
   tree->data.datasize = ocbyteslength(state->packet);
#else /*OC_DISK_STORAGE*/
   DAPURL* url = &state->url;
   int fileprotocol = 0;

   fileprotocol = (strncmp(url->base,"file:",5)==0);

    if(fileprotocol && !oc_curl_file_supported) {
	stat = readfiletofile(url->base, ".dods", tree->data.file, &tree->data.datasize);
    } else {
        char* fetchurl;
        dapurlsetconstraints(url,tree->constraint);
        fetchurl = dapurlgeturl(url,NULL,".dods",!fileprotocol);
        MEMCHECK(fetchurl,OC_ENOMEM);
	if (ocdebug > 0) 
	    {fprintf(stderr, "fetch url=%s\n", fetchurl);fflush(stderr);}
	stat = ocfetchurl_file(state->curl, fetchurl, tree->data.file,
                               &tree->data.datasize, &lastmod);
        if(stat == OC_NOERR)
	    state->datalastmodified = lastmod;
	if (ocdebug > 0) 
            {fprintf(stderr,"fetch complete\n"); fflush(stderr);}
	free(fetchurl);
    }
#endif /*OC_DISK_STORAGE*/
    return THROW(stat);
}