summaryrefslogtreecommitdiffstats
path: root/src/common/networking.h
blob: 2554e2231e189b4f31b961361a96ec3722974cfa (plain) (blame)
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
#pragma once

#include "common/thread.h"
#include "common/FFstrbuf.h"

#ifdef _WIN32
    #include <minwindef.h>
#endif

struct addrinfo;

typedef struct FFNetworkingState {
#ifdef _WIN32
    uintptr_t sockfd;
    OVERLAPPED overlapped;
#else
    int sockfd;
    struct addrinfo* addr;

    #ifdef FF_HAVE_THREADS
    FFThreadType thread;
    #endif
#endif

    FFstrbuf command;
    uint32_t timeout;
    bool ipv6;
    bool compression; // if true, HTTP content compression will be enabled if supported
    bool tfo;         // if true, TCP Fast Open will be attempted first, and fallback to traditional connection if it fails
} FFNetworkingState;

const char* ffNetworkingSendHttpRequest(FFNetworkingState* state, const char* host, const char* path, const char* headers);
const char* ffNetworkingRecvHttpResponse(FFNetworkingState* state, FFstrbuf* buffer);

#ifdef FF_HAVE_ZLIB
const char* ffNetworkingLoadZlibLibrary(void);
bool ffNetworkingDecompressGzip(FFstrbuf* buffer, char* headerEnd);
#endif