summaryrefslogtreecommitdiff
path: root/ot_http.h
blob: 9cacd21d464d475444e319d381622b710a3fac8f (plain)
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
/* This software was written by Dirk Engling <erdgeist@erdgeist.org>
   It is considered beerware. Prost. Skol. Cheers or whatever.

   $id$ */

#ifndef OT_HTTP_H__
#define OT_HTTP_H__

#include <stdint.h>
#include <sys/types.h>
#include <sys/uio.h>

#include "ot_batch.h"
#include "ot_event.h"
#include "ot_buf.h"
#include "trackerlogic.h"

typedef enum {
  STRUCT_HTTP_FLAG_WAITINGFORTASK      = 1,
  STRUCT_HTTP_FLAG_GZIP                = 2,
  STRUCT_HTTP_FLAG_BZIP2               = 4,
  STRUCT_HTTP_FLAG_ZSTD                = 8,
  STRUCT_HTTP_FLAG_CHUNKED             = 16,
  STRUCT_HTTP_FLAG_CHUNKED_IN_TRANSFER = 32,
  STRUCT_HTTP_FLAG_KEEPALIVE           = 64,
  STRUCT_HTTP_FLAG_ONSTACK             = 128
} STRUCT_HTTP_FLAG;

struct http_data {
  ot_buf           request;
  int              interest; /* EVENT_IN and EVENT_OUT as asked for */
  ot_batch        *batch;
  ot_ip6           ip;
  STRUCT_HTTP_FLAG flag;
};

/* What this connection is waiting for: EVENT_IN, EVENT_OUT, or nothing */
void           http_interest_set(const int64_t s, struct http_data *cookie, int what);

/* Close a connection and release everything that belongs to it */
void           http_close(const int64_t s);

/* Promote a stack cookie to a heap one, for persistence and for handing it
   over to the event loop or to another thread. Does nothing to one that is
   already on the heap. Returns the connection's state, or NULL. */
struct http_data *http_adopt(const int64_t s);

ssize_t        http_handle_request(const int64_t s, struct ot_workstruct *ws);
ssize_t        http_sendiovecdata(const int64_t s, struct ot_workstruct *ws, size_t iovec_entries, struct iovec *iovector, int is_partial);
ssize_t        http_issue_error(const int64_t s, struct ot_workstruct *ws, int code);

extern const char *g_stats_path;
extern ssize_t g_stats_path_len;

#endif