mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
naett has been a submodule pinned at v0.3.3; upstream has had no commits since April 2024, and we want to carry local changes (next up: a libcurl-backed HTTPS path for Linux). It's ~1500 lines of MIT C, smaller than several things we already vendor, so bring it in-tree and drop the submodule. Also drop the generated single-file amalgam (naett.c) that every build system was compiling, and build src/*.c directly instead - otherwise the file you edit isn't the file that gets compiled, which is a trap for anyone patching this. example/ and testrig/ (a whole Android Studio project) are gone with it. Two changes were needed to make the sources build on their own, both noted in ext/naett/README-ppsspp.md along with the upstream commit: - naett_internal.h now includes naett.h, which the amalgam pulled in first. - naett_linux.c now includes stdio.h/stdlib.h. It calls exit/calloc/realloc/ free/fprintf without ever including either, and only got away with it because naett_core.c sat above it in the concatenation. No functional change - Linux still has HTTPS_NOT_AVAILABLE set, so it doesn't build naett at all yet. Rename naett to naett-lib
58 lines
1.5 KiB
Markdown
58 lines
1.5 KiB
Markdown
# naett /nɛt:/
|
|
|
|
Tiny HTTP client library in C.
|
|
|
|
Wraps native HTTP client functionality on macOS, Windows, Linux, iOS and Android in a single, simple non-blocking API.
|
|
|
|
## Using `naett`
|
|
|
|
Get the `naett.c` and `naett.h` files and throw them into your project. Check out the [example](./example) for a basic `Makefile` - based setup.
|
|
|
|
The library needs to be initialized by a call to `naettInit()`. On Android, you need to provide a `JavaVM*` handle in the call to `naettInit()`.
|
|
On the other platforms, call with `NULL`.
|
|
|
|
See `naett.h` for reference docs.
|
|
|
|
## Platform implementations
|
|
|
|
`naett` uses the following HTTP client libraries on each platform:
|
|
|
|
| Platform | Library / component | Build with |
|
|
| --- | --- | --- |
|
|
| macOS, iOS | NSURLRequest | -framework Foundation |
|
|
| Windows | WinHTTP Sessions | -lwinhttp |
|
|
| Android | java.net.URL | NDK |
|
|
| Linux | libcurl | -lcurl -lpthread |
|
|
|
|
### Example
|
|
|
|
```C
|
|
#include "naett.h"
|
|
#include <unistd.h>
|
|
#include <stdio.h>
|
|
|
|
int main(int argc, char** argv) {
|
|
naettInit(NULL);
|
|
|
|
naettReq* req =
|
|
naettRequest("https://foo.site.net", naettMethod("GET"), naettHeader("accept", "application/json"));
|
|
|
|
naettRes* res = naettMake(req);
|
|
|
|
while (!naettComplete(res)) {
|
|
usleep(100 * 1000);
|
|
}
|
|
|
|
if (naettGetStatus(res) < 0) {
|
|
printf("Request failed\n");
|
|
return 1;
|
|
}
|
|
|
|
int bodyLength = 0;
|
|
const char* body = naettGetBody(res, &bodyLength);
|
|
|
|
printf("Got %d bytes of type '%s':\n", bodyLength, naettGetHeader(res, "Content-Type"));
|
|
printf("%.100s\n...\n", body);
|
|
}
|
|
```
|