File: nchttp.h

package info (click to toggle)
netcdf-parallel 1%3A4.9.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 116,192 kB
  • sloc: ansic: 279,265; sh: 14,143; cpp: 5,971; yacc: 2,612; makefile: 2,075; lex: 1,218; javascript: 280; xml: 173; awk: 2
file content (62 lines) | stat: -rw-r--r-- 1,913 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* Copyright 2018-2018 University Corporation for Atmospheric
   Research/Unidata. */
/**
 * Header file for dhttp.c
 * @author Dennis Heimbigner
 */

#ifndef NCHTTP_H
#define NCHTTP_H

typedef enum HTTPMETHOD {
HTTPNONE=0, HTTPGET=1, HTTPPUT=2, HTTPPOST=3, HTTPHEAD=4, HTTPDELETE=5
} HTTPMETHOD;

/* Forward */
struct CURL;
struct NCS3INFO;
struct NCURI;

/* Common state For S3 vs Simple Curl */
typedef enum NC_HTTPFORMAT {HTTPS3=1, HTTPCURL=2} NC_HTTPFORMAT;

typedef struct NC_HTTP_STATE {
    enum NC_HTTPFORMAT format; /* Discriminator */
    char* path; /* original url */
    struct NCURI* url; /* parsed url */
    long httpcode;
    char* errmsg; /* do not free if format is HTTPCURL */
#ifdef NETCDF_ENABLE_S3
    struct NC_HTTP_S3 {
        void* s3client;
	struct NCS3INFO* info;
    } s3;
#endif
    struct NC_HTTP_CURL {
        struct CURL* curl;
        char errbuf[2048]; /* assert(CURL_ERROR_SIZE <= 2048) */
        struct Response {
            NClist* headset; /* which headers to capture */
            NClist* headers; /* Set of captured headers */
    	    NCbytes* buf; /* response content; call owns; do not free */
        } response;
        struct Request {
            HTTPMETHOD method;
	    size_t payloadsize;
	    void* payload; /* caller owns; do not free */
  	    size_t payloadpos;
            NClist* headers;
        } request;
    } curl;
} NC_HTTP_STATE;

/* External API */
extern int nc_http_open(const char* url, NC_HTTP_STATE** statep);
extern int nc_http_open_verbose(const char* url, int verbose, NC_HTTP_STATE** statep);
extern int nc_http_size(NC_HTTP_STATE* state, long long* sizep);
extern int nc_http_read(NC_HTTP_STATE* state, size64_t start, size64_t count, NCbytes* buf);
extern int nc_http_write(NC_HTTP_STATE* state, NCbytes* payload);
extern int nc_http_close(NC_HTTP_STATE* state);
extern int nc_http_reset(NC_HTTP_STATE* state);

#endif /*NCHTTP_H*/