Commit 1fee93d4 authored by Kruyff,D.L.W. (Dylan)'s avatar Kruyff,D.L.W. (Dylan)
Browse files

Add progress view (incomplete) + store windows server side (faster)

parent b41c932e
from libc.stdint cimport uint16_t, uint32_t, uint64_t
cdef extern from "../vendor/http-parser/http_parser.h":
ctypedef int (*http_data_cb) (http_parser*,
const char *at,
size_t length) except -1
ctypedef int (*http_cb) (http_parser*) except -1
struct http_parser:
unsigned int type
unsigned int flags
unsigned int state
unsigned int header_state
unsigned int index
uint32_t nread
uint64_t content_length
unsigned short http_major
unsigned short http_minor
unsigned int status_code
unsigned int method
unsigned int http_errno
unsigned int upgrade
void *data
struct http_parser_settings:
http_cb on_message_begin
http_data_cb on_url
http_data_cb on_status
http_data_cb on_header_field
http_data_cb on_header_value
http_cb on_headers_complete
http_data_cb on_body
http_cb on_message_complete
http_cb on_chunk_header
http_cb on_chunk_complete
enum http_parser_type:
HTTP_REQUEST,
HTTP_RESPONSE,
HTTP_BOTH
enum http_errno:
HPE_OK,
HPE_CB_message_begin,
HPE_CB_url,
HPE_CB_header_field,
HPE_CB_header_value,
HPE_CB_headers_complete,
HPE_CB_body,
HPE_CB_message_complete,
HPE_CB_status,
HPE_CB_chunk_header,
HPE_CB_chunk_complete,
HPE_INVALID_EOF_STATE,
HPE_HEADER_OVERFLOW,
HPE_CLOSED_CONNECTION,
HPE_INVALID_VERSION,
HPE_INVALID_STATUS,
HPE_INVALID_METHOD,
HPE_INVALID_URL,
HPE_INVALID_HOST,
HPE_INVALID_PORT,
HPE_INVALID_PATH,
HPE_INVALID_QUERY_STRING,
HPE_INVALID_FRAGMENT,
HPE_LF_EXPECTED,
HPE_INVALID_HEADER_TOKEN,
HPE_INVALID_CONTENT_LENGTH,
HPE_INVALID_CHUNK_SIZE,
HPE_INVALID_CONSTANT,
HPE_INVALID_INTERNAL_STATE,
HPE_STRICT,
HPE_PAUSED,
HPE_UNKNOWN
enum flags:
F_CHUNKED,
F_CONNECTION_KEEP_ALIVE,
F_CONNECTION_CLOSE,
F_CONNECTION_UPGRADE,
F_TRAILING,
F_UPGRADE,
F_SKIPBODY,
F_CONTENTLENGTH
enum http_method:
DELETE, GET, HEAD, POST, PUT, CONNECT, OPTIONS, TRACE, COPY,
LOCK, MKCOL, MOVE, PROPFIND, PROPPATCH, SEARCH, UNLOCK, BIND,
REBIND, UNBIND, ACL, REPORT, MKACTIVITY, CHECKOUT, MERGE,
MSEARCH, NOTIFY, SUBSCRIBE, UNSUBSCRIBE, PATCH, PURGE, MKCALENDAR,
LINK, UNLINK
void http_parser_init(http_parser *parser, http_parser_type type)
size_t http_parser_execute(http_parser *parser,
const http_parser_settings *settings,
const char *data,
size_t len)
int http_should_keep_alive(const http_parser *parser)
void http_parser_settings_init(http_parser_settings *settings)
const char *http_errno_name(http_errno err)
const char *http_errno_description(http_errno err)
const char *http_method_str(http_method m)
# URL Parser
enum http_parser_url_fields:
UF_SCHEMA = 0,
UF_HOST = 1,
UF_PORT = 2,
UF_PATH = 3,
UF_QUERY = 4,
UF_FRAGMENT = 5,
UF_USERINFO = 6,
UF_MAX = 7
struct http_parser_url_field_data:
uint16_t off
uint16_t len
struct http_parser_url:
uint16_t field_set
uint16_t port
http_parser_url_field_data[<int>UF_MAX] field_data
void http_parser_url_init(http_parser_url *u)
int http_parser_parse_url(const char *buf,
size_t buflen,
int is_connect,
http_parser_url *u)
/* The file is autogenerated from aiohttp/hdrs.py
Run ./tools/gen.py to update it after the origin changing. */
#include "_find_header.h"
#define NEXT_CHAR() \
{ \
count++; \
if (count == size) { \
/* end of search */ \
return -1; \
} \
pchar++; \
ch = *pchar; \
last = (count == size -1); \
} while(0);
int
find_header(const char *str, int size)
{
char *pchar = str;
int last;
char ch;
int count = -1;
pchar--;
INITIAL:
NEXT_CHAR();
switch (ch) {
case 'A':
if (last) {
return -1;
}
goto A;
case 'a':
if (last) {
return -1;
}
goto A;
case 'C':
if (last) {
return -1;
}
goto C;
case 'c':
if (last) {
return -1;
}
goto C;
case 'D':
if (last) {
return -1;
}
goto D;
case 'd':
if (last) {
return -1;
}
goto D;
case 'E':
if (last) {
return -1;
}
goto E;
case 'e':
if (last) {
return -1;
}
goto E;
case 'F':
if (last) {
return -1;
}
goto F;
case 'f':
if (last) {
return -1;
}
goto F;
case 'H':
if (last) {
return -1;
}
goto H;
case 'h':
if (last) {
return -1;
}
goto H;
case 'I':
if (last) {
return -1;
}
goto I;
case 'i':
if (last) {
return -1;
}
goto I;
case 'K':
if (last) {
return -1;
}
goto K;
case 'k':
if (last) {
return -1;
}
goto K;
case 'L':
if (last) {
return -1;
}
goto L;
case 'l':
if (last) {
return -1;
}
goto L;
case 'M':
if (last) {
return -1;
}
goto M;
case 'm':
if (last) {
return -1;
}
goto M;
case 'O':
if (last) {
return -1;
}
goto O;
case 'o':
if (last) {
return -1;
}
goto O;
case 'P':
if (last) {
return -1;
}
goto P;
case 'p':
if (last) {
return -1;
}
goto P;
case 'R':
if (last) {
return -1;
}
goto R;
case 'r':
if (last) {
return -1;
}
goto R;
case 'S':
if (last) {
return -1;
}
goto S;
case 's':
if (last) {
return -1;
}
goto S;
case 'T':
if (last) {
return -1;
}
goto T;
case 't':
if (last) {
return -1;
}
goto T;
case 'U':
if (last) {
return -1;
}
goto U;
case 'u':
if (last) {
return -1;
}
goto U;
case 'V':
if (last) {
return -1;
}
goto V;
case 'v':
if (last) {
return -1;
}
goto V;
case 'W':
if (last) {
return -1;
}
goto W;
case 'w':
if (last) {
return -1;
}
goto W;
case 'X':
if (last) {
return -1;
}
goto X;
case 'x':
if (last) {
return -1;
}
goto X;
default:
return -1;
}
A:
NEXT_CHAR();
switch (ch) {
case 'C':
if (last) {
return -1;
}
goto AC;
case 'c':
if (last) {
return -1;
}
goto AC;
case 'G':
if (last) {
return -1;
}
goto AG;
case 'g':
if (last) {
return -1;
}
goto AG;
case 'L':
if (last) {
return -1;
}
goto AL;
case 'l':
if (last) {
return -1;
}
goto AL;
case 'U':
if (last) {
return -1;
}
goto AU;
case 'u':
if (last) {
return -1;
}
goto AU;
default:
return -1;
}
AC:
NEXT_CHAR();
switch (ch) {
case 'C':
if (last) {
return -1;
}
goto ACC;
case 'c':
if (last) {
return -1;
}
goto ACC;
default:
return -1;
}
ACC:
NEXT_CHAR();
switch (ch) {
case 'E':
if (last) {
return -1;
}
goto ACCE;
case 'e':
if (last) {
return -1;
}
goto ACCE;
default:
return -1;
}
ACCE:
NEXT_CHAR();
switch (ch) {
case 'P':
if (last) {
return -1;
}
goto ACCEP;
case 'p':
if (last) {
return -1;
}
goto ACCEP;
case 'S':
if (last) {
return -1;
}
goto ACCES;
case 's':
if (last) {
return -1;
}
goto ACCES;
default:
return -1;
}
ACCEP:
NEXT_CHAR();
switch (ch) {
case 'T':
if (last) {
return 0;
}
goto ACCEPT;
case 't':
if (last) {
return 0;
}
goto ACCEPT;
default:
return -1;
}
ACCEPT:
NEXT_CHAR();
switch (ch) {
case '-':
if (last) {
return -1;
}
goto ACCEPT_;
default:
return -1;
}
ACCEPT_:
NEXT_CHAR();
switch (ch) {
case 'C':
if (last) {
return -1;
}
goto ACCEPT_C;
case 'c':
if (last) {
return -1;
}
goto ACCEPT_C;
case 'E':
if (last) {
return -1;
}
goto ACCEPT_E;
case 'e':
if (last) {
return -1;
}
goto ACCEPT_E;
case 'L':
if (last) {
return -1;
}
goto ACCEPT_L;
case 'l':
if (last) {
return -1;
}
goto ACCEPT_L;
case 'R':
if (last) {
return -1;
}
goto ACCEPT_R;
case 'r':
if (last) {
return -1;
}
goto ACCEPT_R;
default:
return -1;
}
ACCEPT_C:
NEXT_CHAR();
switch (ch) {
case 'H':
if (last) {
return -1;
}
goto ACCEPT_CH;
case 'h':
if (last) {
return -1;
}
goto ACCEPT_CH;
default:
return -1;
}
ACCEPT_CH:
NEXT_CHAR();
switch (ch) {
case 'A':
if (last) {
return -1;
}
goto ACCEPT_CHA;