Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117886070
http_client.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None
http_client.h
View Options
/* http_client.h - HTTP client-side support functions
*
* Copyright (c) 1994-2014 Carnegie Mellon University. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The name "Carnegie Mellon University" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For permission or any legal
* details, please contact
* Carnegie Mellon University
* Center for Technology Transfer and Enterprise Creation
* 4615 Forbes Avenue
* Suite 302
* Pittsburgh, PA 15213
* (412) 268-7393, fax: (412) 268-7395
* innovation@andrew.cmu.edu
*
* 4. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by Computing Services
* at Carnegie Mellon University (http://www.cmu.edu/computing/)."
*
* CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*/
#ifndef _HTTP_CLIENT_H
#define _HTTP_CLIENT_H
#include
"backend.h"
#include
"spool.h"
/* Supported HTTP version */
#define HTTP2_VERSION "HTTP/2"
#define HTTP_VERSION "HTTP/1.1"
#define HTTP_VERSION_LEN 8
/* Context for reading request/response body */
struct
body_t
{
unsigned
char
flags
;
/* Disposition flags */
unsigned
char
framing
;
/* Message framing */
unsigned
char
te
;
/* Transfer-Encoding */
unsigned
max
;
/* Max allowed len */
ulong
len
;
/* Content-Length */
struct
buf
payload
;
/* Payload */
};
/* Message Framing flags */
enum
{
FRAMING_UNKNOWN
=
0
,
FRAMING_HTTP2
,
FRAMING_LENGTH
,
FRAMING_CHUNKED
,
FRAMING_CLOSE
};
/* Transfer-Encoding flags (coding of response payload) */
enum
{
TE_NONE
=
0
,
TE_DEFLATE
=
(
1
<<
0
),
/* Implies TE_CHUNKED as final coding */
TE_GZIP
=
(
1
<<
1
),
/* Implies TE_CHUNKED as final coding */
TE_CHUNKED
=
(
1
<<
2
),
/* MUST be last */
TE_UNKNOWN
=
0xff
};
/* http_read_body() flags */
enum
{
BODY_RESPONSE
=
(
1
<<
0
),
/* Response body, otherwise request */
BODY_CONTINUE
=
(
1
<<
1
),
/* Expect:100-continue request */
BODY_CLOSE
=
(
1
<<
2
),
/* Close-delimited response body */
BODY_DECODE
=
(
1
<<
3
),
/* Decode any Content-Encoding */
BODY_DISCARD
=
(
1
<<
4
),
/* Discard body (don't buffer or decode) */
BODY_DONE
=
(
1
<<
5
)
/* Body has been read */
};
/* Index into known HTTP methods - needs to stay in sync with array */
enum
{
METH_ACL
=
0
,
METH_BIND
,
METH_COPY
,
METH_DELETE
,
METH_GET
,
METH_HEAD
,
METH_LOCK
,
METH_MKCALENDAR
,
METH_MKCOL
,
METH_MOVE
,
METH_OPTIONS
,
METH_PATCH
,
METH_POST
,
METH_PROPFIND
,
METH_PROPPATCH
,
METH_PUT
,
METH_REPORT
,
METH_TRACE
,
METH_UNBIND
,
METH_UNLOCK
,
METH_UNKNOWN
,
/* MUST be last */
};
extern
int
is_mediatype
(
const
char
*
pat
,
const
char
*
type
);
extern
int
http_parse_framing
(
int
http2
,
hdrcache_t
hdrs
,
struct
body_t
*
body
,
const
char
**
errstr
);
extern
int
http_read_headers
(
struct
protstream
*
pin
,
int
read_sep
,
hdrcache_t
*
hdrs
,
const
char
**
errstr
);
extern
int
http_read_body
(
struct
protstream
*
pin
,
hdrcache_t
hdrs
,
struct
body_t
*
body
,
const
char
**
errstr
);
extern
int
http_read_response
(
struct
backend
*
be
,
unsigned
meth
,
unsigned
*
code
,
hdrcache_t
*
hdrs
,
struct
body_t
*
body
,
const
char
**
errstr
);
extern
int
http_parse_auth_params
(
const
char
*
params
,
const
char
**
realm
,
unsigned
int
*
realm_len
,
const
char
**
sid
,
unsigned
int
*
sid_len
,
const
char
**
data
,
unsigned
int
*
data_len
);
#endif
/* _HTTP_CLIENT_H */
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Mon, Apr 6, 2:23 AM (1 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18831985
Default Alt Text
http_client.h (4 KB)
Attached To
Mode
R111 cyrus-imapd
Attached
Detach File
Event Timeline