Esempio n. 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);
}
Esempio n. 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);
}
Esempio n. 3
0
int
NCD4_readDAP(NCD4INFO* state, int flags)
{
    int stat = NC_NOERR;
    long lastmod = -1;

    if((flags & NCF_ONDISK) == 0) {
        stat = readpacket(state,state->uri,state->curl->packet,NCD4_DAP,&lastmod);
        if(stat == NC_NOERR)
            state->data.daplastmodified = lastmod;
    } else { /*((flags & NCF_ONDISK) != 0) */
        NCURI* url = state->uri;
        int fileprotocol = (strcmp(url->protocol,"file")==0);
        if(fileprotocol) {
            stat = readfiletofile(state, url, ".dap", state->data.ondiskfile, &state->data.datasize);
        } else {
	    char* readurl = NULL;
            int flags = 0;
            if(!fileprotocol) flags |= NCURIQUERY;
            flags |= NCURIENCODE;
	    flags |= NCURIPWD;
#ifdef FIX
            ncurisetconstraints(url,state->constraint);
#endif
	    readurl = ncuribuild(url,NULL,".dods",NCURISVC);
	    if(readurl == NULL)
		return THROW(NC_ENOMEM);
            stat = NCD4_fetchurl_file(state->curl, readurl, state->data.ondiskfile,
                                   &state->data.datasize, &lastmod);
            nullfree(readurl);
            if(stat == NC_NOERR)
                state->data.daplastmodified = lastmod;
        }
    }
    return THROW(stat);
}