Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,6 @@ tests/wsserver_autobahn/report
tests/fuzzy/out/
examples/echo/echo
examples/ping/ping
extra/dir2statics/dir2statics
.vscode/launch.json
.vscode/settings.json
45 changes: 40 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ CC ?= gcc
AR = ar
LIB_WS = libws.a
INCLUDE = include
CFLAGS += -Wall -Wextra -O2
CFLAGS += -Wall -Wextra -O2 -DWS_STATICS
CFLAGS += -I $(INCLUDE) -std=c99 -pedantic
LDLIBS = $(LIB_WS) -pthread
ARFLAGS = cru
Expand All @@ -27,6 +27,7 @@ AFL_FUZZ ?= no
VERBOSE_EXAMPLES ?= yes
VALIDATE_UTF8 ?= yes


# Prefix
ifeq ($(PREFIX),)
PREFIX := /usr/local
Expand Down Expand Up @@ -71,11 +72,22 @@ PKGDIR = $(LIBDIR)/pkgconfig
# Extra paths
TOYWS = extra/toyws

DIR2STATICS_DIR = extra/dir2statics
DIR2STATICS_BIN = $(DIR2STATICS_DIR)/dir2statics
DIR2STATICS_SRC = $(DIR2STATICS_DIR)/dir2statics.c
# Echo example statics (generated)
ECHO_STATIC_DIR = examples/echo
ECHO_STATIC_HDR = $(ECHO_STATIC_DIR)/echo-static.h

# Only top-level files with known extensions will be tracked as dependencies
ECHO_STATIC_EXTS = html htm js css json txt svg png jpg jpeg gif ico wasm
ECHO_STATIC_INPUTS = $(foreach e,$(ECHO_STATIC_EXTS),$(wildcard $(ECHO_STATIC_DIR)/*.$(e)))

# All
ifeq ($(AFL_FUZZ),no)
all: Makefile libws.a examples $(TOYWS)/toyws_test
all: Makefile libws.a $(DIR2STATICS_BIN) examples $(TOYWS)/toyws_test
else
all: Makefile libws.a fuzzy
all: Makefile libws.a fuzzy
endif

#
Expand Down Expand Up @@ -106,14 +118,25 @@ $(LIB_WS): $(WS_OBJ)
$(Q)$(AR) $(ARFLAGS) $(LIB_WS) $^

# Examples

# Generate embedded statics header for the echo example
$(ECHO_STATIC_HDR): $(DIR2STATICS_BIN) $(ECHO_STATIC_INPUTS)
@echo " GEN $@"
$(Q)$(DIR2STATICS_BIN) $(ECHO_STATIC_DIR) $@

examples: examples/echo/echo examples/ping/ping
examples/echo/echo: examples/echo/echo.o $(LIB_WS)

# Ensure statics header exists before compiling echo.c
examples/echo/echo.o: $(ECHO_STATIC_HDR)
examples/echo/echo.o: CFLAGS += -I $(ECHO_STATIC_DIR)

examples/echo/echo: examples/echo/echo.o $(LIB_WS)
@echo " LINK $@"
$(Q)$(CC) $(CFLAGS) $< -o $@ $(LDLIBS)
examples/ping/ping: examples/ping/ping.o $(LIB_WS)
@echo " LINK $@"
$(Q)$(CC) $(CFLAGS) $< -o $@ $(LDLIBS)

# Autobahn tests
tests: examples
$(MAKE) all -C tests/ VERBOSE_EXAMPLES="$(VERBOSE_EXAMPLES)"
Expand All @@ -129,6 +152,11 @@ $(TOYWS)/toyws_test: $(TOYWS)/tws_test.o $(TOYWS)/toyws.o
@echo " LINK $@"
$(Q)$(CC) $(CFLAGS) $^ -o $@

# dir2statics tool
$(DIR2STATICS_BIN): $(DIR2STATICS_DIR)/dir2statics.o src/sha1.o
@echo " LINK $@"
$(Q)$(CC) $(CFLAGS) $^ -lz -o $@

# Install rules
install: libws.a wsserver.pc
@echo " INSTALL $@"
Expand All @@ -138,6 +166,9 @@ install: libws.a wsserver.pc
@#Headers
install -d $(DESTDIR)$(INCDIR)/wsserver
install -m 644 $(INCLUDE)/*.h $(DESTDIR)$(INCDIR)/wsserver
@#Tools
install -d $(DESTDIR)$(BINDIR)
install -m 0755 $(DIR2STATICS_BIN) $(DESTDIR)$(BINDIR)/
@#Manpages
install -d $(DESTDIR)$(MANDIR)/man3
install -m 0644 $(MANPAGES)/*.3 $(DESTDIR)$(MANDIR)/man3/
Expand All @@ -147,6 +178,7 @@ uninstall:
@echo " UNINSTALL $@"
rm -f $(DESTDIR)$(LIBDIR)/$(LIB_WS)
rm -rf $(DESTDIR)$(INCDIR)/wsserver
rm -f $(DESTDIR)$(BINDIR)/dir2statics
rm -f $(DESTDIR)$(MANDIR)/man3/ws_getaddress.3
rm -f $(DESTDIR)$(MANDIR)/man3/ws_getport.3
rm -f $(DESTDIR)$(MANDIR)/man3/ws_sendframe.3
Expand Down Expand Up @@ -194,5 +226,8 @@ clean:
@rm -f $(TOYWS)/toyws.o $(TOYWS)/tws_test.o $(TOYWS)toyws_test
@rm -f examples/echo/{echo,echo.o}
@rm -f examples/ping/{ping,ping.o}
@rm -f $(DIR2STATICS_DIR)/{dir2statics,dir2statics.o}
@$(MAKE) clean -C tests/
@$(MAKE) clean -C tests/fuzzy
@rm -f $(ECHO_STATIC_HDR)
@rm -f $(DIR2STATICS_DIR)/*.o
49 changes: 48 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,16 @@
[![Build Status for Windows, Linux, and macOS](https://github.com/Theldus/wsServer/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/Theldus/wsServer/actions/workflows/c-cpp.yml)

wsServer - a very tiny WebSocket server library written in C

---
<center><table><tr><td>
<a href="https://sora.chatgpt.com/g/gen_01kh0631zdfe2r45rkar9t4cgk"><img width="auto" height="200px" src="now-with-assets1.png"></td></a>
</td><td>
<a href="https://gemini.google.com/share/0dcd8c8e124b"><img width="auto" height="200px" src="now-with-assets.png"></td></a>
</td><td>
<a href="https://gemini.google.com/share/0dcd8c8e124b"><img width="auto" height="200px" src="meow.jpg"></td></a>
</td><td>
<a href="https://sora.chatgpt.com/g/gen_01kh0631zcezxsdk6arpgq38jp"><img width="auto" height="200px" src="now-with-assets2.png"></td></a>
</td></tr></table></center>
## Library

wsServer is a tiny, lightweight WebSocket server library written in C that intends
Expand Down Expand Up @@ -200,3 +209,41 @@ comments [here](https://github.com/Theldus/wsServer/discussions/30).
wsServer is licensed under GPLv3 License. Written by Davidson Francis and
[others](https://github.com/Theldus/wsServer/graphs/contributors)
contributors.


## Static Assets Integration

Create a header file from a folder.

```bash
dir2statics ./ echo-statics.h
```

The header will include the embedded assets and a function **initEmbeddedAssets**()

```c

void initEmbeddedAssets(void){
ws_set_static_assets(&embedded_assets);
}

```


```c

#include "echo-static.h"


int main(void)
{

initEmbeddedAssets();
sprintf(static_root_alias,"%s","/echo.html");

// start your server as usual
ws_socket(&(struct ws_server){
//...


```
185 changes: 185 additions & 0 deletions examples/echo/echo-static.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
#pragma once
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Declarations compatible with wsServer statics.h expectations */
void initEmbeddedAssets(void);typedef struct ws_static_asset_set {
uint32_t count;
const char * const *urls;
const char * const *contentType;
const uint8_t * const *content;
const uint32_t *sizes;
} ws_static_asset_set_t;

extern char static_root_alias[32];

void ws_set_static_assets(const ws_static_asset_set_t *set);

#ifdef WS_STATICS_DATA_IMPLEMENTATION

const uint32_t static_count = 2;

const char *static_urls[2] = {
"/CMakeLists.txt",
"/echo.html"
};

static const uint8_t ws_static_CMakeLists_txt[479] = {
/* 0000*/0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x85, 0x92, 0x41, 0x8f, 0xda, 0x30,
/* 0010*/0x10, 0x85, 0xef, 0xf9, 0x15, 0x4f, 0xe2, 0x02, 0x12, 0x0a, 0x15, 0xbd, 0x6d, 0x57, 0xab, 0xa6,
/* 0020*/0x14, 0x76, 0x23, 0x51, 0x40, 0x21, 0x68, 0xc5, 0x69, 0xe5, 0xc4, 0x93, 0xc4, 0xaa, 0x63, 0x47,
/* 0030*/0xb6, 0x03, 0xe5, 0xdf, 0x77, 0x02, 0x54, 0x5c, 0xaa, 0xf6, 0x62, 0xc5, 0xe3, 0x99, 0xcf, 0xef,
/* 0040*/0xf9, 0x65, 0x84, 0x85, 0xed, 0x2e, 0x4e, 0xd5, 0x4d, 0xc0, 0x78, 0x31, 0xc1, 0xfc, 0xd3, 0x7c,
/* 0050*/0x0e, 0x7c, 0x17, 0x27, 0x25, 0xbd, 0x35, 0x58, 0x39, 0x61, 0x4a, 0xe5, 0xf1, 0x2c, 0xef, 0x15,
/* 0060*/0x59, 0xd5, 0xfa, 0x6b, 0xdd, 0x0a, 0xa5, 0xe3, 0xd2, 0xb6, 0x2f, 0xd1, 0x28, 0x1a, 0x21, 0x6f,
/* 0070*/0xb8, 0xa3, 0x73, 0xb6, 0x76, 0xa2, 0x05, 0x7f, 0x56, 0x8e, 0x08, 0xde, 0x56, 0xe1, 0x2c, 0x1c,
/* 0080*/0x3d, 0xe1, 0x62, 0x7b, 0x94, 0xc2, 0xc0, 0x91, 0x54, 0x3e, 0x38, 0x55, 0xf4, 0x81, 0xa0, 0x02,
/* 0090*/0x84, 0x91, 0x33, 0xeb, 0xd0, 0x5a, 0xa9, 0xaa, 0x0b, 0x63, 0xb8, 0xd4, 0x1b, 0x49, 0x0e, 0xa1,
/* 00A0*/0x21, 0x04, 0x72, 0xad, 0x87, 0xad, 0xae, 0x9b, 0xd7, 0xcd, 0x01, 0xaf, 0x64, 0xc8, 0x09, 0x8d,
/* 00B0*/0x5d, 0x5f, 0x68, 0x55, 0x62, 0xad, 0x4a, 0x32, 0x9e, 0x20, 0xf8, 0xe6, 0xa1, 0xe2, 0x1b, 0x92,
/* 00C0*/0x28, 0x06, 0xcc, 0x30, 0xb0, 0x1a, 0x14, 0xec, 0xef, 0x0a, 0xb0, 0xb2, 0xcc, 0x15, 0x41, 0x59,
/* 00D0*/0x33, 0x05, 0x29, 0x3e, 0x77, 0x38, 0x91, 0xf3, 0xbc, 0xc7, 0xe7, 0x3f, 0x57, 0xdc, 0x79, 0x53,
/* 00E0*/0x58, 0xc7, 0x8c, 0xb1, 0x08, 0x83, 0x6c, 0x07, 0xdb, 0x0d, 0x63, 0x13, 0xd6, 0x7a, 0x81, 0x16,
/* 00F0*/0xe1, 0x31, 0x19, 0xff, 0xd5, 0xf9, 0xc3, 0xa0, 0x84, 0x32, 0x57, 0x70, 0x63, 0x3b, 0x76, 0xd3,
/* 0100*/0x30, 0x90, 0xfd, 0x9d, 0x95, 0xd6, 0x28, 0x08, 0xbd, 0xa7, 0xaa, 0xd7, 0x53, 0x26, 0x70, 0x2f,
/* 0110*/0xde, 0xd3, 0xfc, 0x6d, 0x7b, 0xc8, 0x91, 0x6c, 0x8e, 0x78, 0x4f, 0xb2, 0x2c, 0xd9, 0xe4, 0xc7,
/* 0120*/0x2f, 0xdc, 0x1b, 0x1a, 0xcb, 0xa7, 0x74, 0xa2, 0x1b, 0x49, 0xb5, 0x9d, 0x56, 0x0c, 0x66, 0x4f,
/* 0130*/0x9c, 0x4a, 0xb8, 0xb0, 0x74, 0x06, 0xfc, 0x58, 0x66, 0x8b, 0x37, 0x9e, 0x48, 0xbe, 0xa5, 0xeb,
/* 0140*/0x34, 0x3f, 0xb2, 0x7e, 0xac, 0xd2, 0x7c, 0xb3, 0xdc, 0xef, 0xb1, 0xda, 0x66, 0x48, 0xb0, 0x4b,
/* 0150*/0xb2, 0x3c, 0x5d, 0x1c, 0xd6, 0x49, 0x86, 0xdd, 0x21, 0xdb, 0x6d, 0xf7, 0xcb, 0x18, 0xd8, 0xd3,
/* 0160*/0x20, 0x8a, 0x78, 0xfe, 0x1f, 0x6f, 0x5b, 0x5d, 0xd3, 0xe1, 0x07, 0x94, 0x14, 0x38, 0x70, 0x7f,
/* 0170*/0xf3, 0x7c, 0xe4, 0x38, 0x3d, 0x2b, 0xd3, 0x12, 0x8d, 0x38, 0x11, 0xc7, 0x5a, 0x92, 0x3a, 0xb1,
/* 0180*/0x2e, 0x81, 0x92, 0x7f, 0xa5, 0xff, 0x67, 0xc6, 0x0c, 0xa1, 0xad, 0xa9, 0xaf, 0x0e, 0xb9, 0xf7,
/* 0190*/0xf1, 0x84, 0x2c, 0x2c, 0xad, 0x60, 0x6c, 0x98, 0xc2, 0xb3, 0xc0, 0xe7, 0x26, 0x84, 0xee, 0x69,
/* 01A0*/0x36, 0x3b, 0x9f, 0xcf, 0x71, 0x6d, 0xfa, 0xd8, 0xba, 0x7a, 0xa6, 0x6f, 0x0c, 0x3f, 0x7b, 0x89,
/* 01B0*/0x22, 0x21, 0xe5, 0x07, 0xfd, 0xa2, 0xb2, 0x0f, 0xa2, 0xd0, 0x34, 0xa6, 0xb2, 0xb1, 0x18, 0x96,
/* 01C0*/0xb8, 0x9c, 0x44, 0x41, 0xb8, 0x9a, 0xc2, 0x87, 0x56, 0xe6, 0x27, 0x2f, 0x85, 0x13, 0x4e, 0x91,
/* 01D0*/0xbf, 0xb5, 0x9c, 0xfd, 0x24, 0xfa, 0x0d, 0xf7, 0x2a, 0x63, 0xb8, 0xf7, 0x02, 0x00, 0x00
};

static const uint8_t ws_static_echo_html[1402] = {
/* 0000*/0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xa5, 0x57, 0x6d, 0x6f, 0x1a, 0x39,
/* 0010*/0x10, 0xfe, 0xbc, 0xfb, 0x2b, 0xa6, 0xfb, 0x25, 0xd0, 0x26, 0x90, 0xa4, 0xbd, 0x53, 0x45, 0x00,
/* 0020*/0x1d, 0x25, 0xa4, 0x41, 0xca, 0x9b, 0x80, 0xa8, 0x8a, 0x74, 0x52, 0x65, 0xd6, 0xc3, 0xee, 0xaa,
/* 0030*/0x66, 0x8d, 0xd6, 0x06, 0x8a, 0xae, 0xf9, 0xef, 0x37, 0xe3, 0xdd, 0x05, 0x72, 0xa4, 0x21, 0xbd,
/* 0040*/0xe6, 0x43, 0xe2, 0xb5, 0x67, 0xc6, 0xcf, 0x3c, 0xf3, 0x8c, 0xed, 0x34, 0xdf, 0x1c, 0x1d, 0xf9,
/* 0050*/0x5d, 0x3d, 0x5b, 0x65, 0x49, 0x14, 0x5b, 0xa8, 0x74, 0xab, 0x70, 0x7a, 0x7c, 0xf2, 0xe7, 0xd1,
/* 0060*/0xe9, 0xf1, 0xe9, 0x31, 0xc0, 0xb9, 0x58, 0x24, 0xd2, 0xe8, 0x14, 0x2e, 0x32, 0x91, 0x86, 0x89,
/* 0070*/0x81, 0xa6, 0x2c, 0x66, 0xe4, 0x24, 0x52, 0x7f, 0x45, 0x53, 0x91, 0xa8, 0x5a, 0xa8, 0xa7, 0x6d,
/* 0080*/0xdf, 0x1f, 0xc5, 0xb4, 0x3c, 0xcb, 0x74, 0x94, 0x89, 0x29, 0xd0, 0x70, 0x92, 0x21, 0x82, 0xd1,
/* 0090*/0x13, 0xbb, 0x14, 0x19, 0x36, 0x60, 0xa5, 0xe7, 0x10, 0x8a, 0x14, 0x32, 0x94, 0x89, 0xb1, 0x59,
/* 00A0*/0x32, 0x9e, 0x5b, 0x84, 0xc4, 0x82, 0x48, 0x65, 0x5d, 0x67, 0x30, 0xd5, 0x32, 0x99, 0xac, 0x7c,
/* 00B0*/0x9a, 0x98, 0xa7, 0x12, 0x33, 0xb0, 0x31, 0x82, 0xc5, 0x6c, 0x6a, 0x40, 0x4f, 0xdc, 0xc7, 0xe7,
/* 00C0*/0x9b, 0x7b, 0xf8, 0x8c, 0x29, 0x66, 0x42, 0xc1, 0xdd, 0x7c, 0xac, 0x92, 0x10, 0xae, 0x92, 0x10,
/* 00D0*/0x53, 0x83, 0x20, 0x68, 0x5f, 0x9e, 0x31, 0x31, 0x4a, 0x18, 0xaf, 0x7c, 0x36, 0xbf, 0xe0, 0xdd,
/* 00E0*/0x87, 0xc5, 0xee, 0x70, 0xa1, 0x29, 0xaa, 0xb0, 0x89, 0x4e, 0x0f, 0x01, 0x13, 0x5a, 0xcf, 0x60,
/* 00F0*/0x81, 0x99, 0xa1, 0x6f, 0x78, 0x5f, 0x6e, 0x50, 0x44, 0x3b, 0x04, 0x9d, 0xf9, 0x15, 0x61, 0x19,
/* 0100*/0x70, 0x06, 0x7a, 0xc6, 0x4e, 0x55, 0x42, 0xb9, 0x02, 0x25, 0xec, 0xc6, 0xaf, 0xb6, 0x9b, 0xf0,
/* 0110*/0x26, 0x2f, 0x09, 0x49, 0xea, 0x62, 0xc6, 0x7a, 0x46, 0x69, 0xc4, 0x14, 0x8d, 0x12, 0x5b, 0x26,
/* 0120*/0x4a, 0xc1, 0x18, 0x61, 0x6e, 0x70, 0x32, 0x57, 0x87, 0x3e, 0x59, 0xc2, 0x97, 0xfe, 0xe8, 0xf2,
/* 0130*/0xf6, 0x7e, 0x04, 0x9d, 0x9b, 0x07, 0xf8, 0xd2, 0x19, 0x0c, 0x3a, 0x37, 0xa3, 0x87, 0x33, 0xb2,
/* 0140*/0xb4, 0xb1, 0xa6, 0x55, 0x5c, 0x60, 0x1e, 0x27, 0x99, 0xce, 0x54, 0x42, 0x61, 0x29, 0x19, 0xaa,
/* 0150*/0x83, 0x5d, 0x11, 0x66, 0xff, 0xba, 0x37, 0xe8, 0x5e, 0x92, 0x7d, 0xe7, 0x53, 0xff, 0xaa, 0x3f,
/* 0160*/0x7a, 0x20, 0xd8, 0x70, 0xd1, 0x1f, 0xdd, 0xf4, 0x86, 0x43, 0xb8, 0xb8, 0x1d, 0x40, 0x07, 0xee,
/* 0170*/0x3a, 0x83, 0x51, 0xbf, 0x7b, 0x7f, 0xd5, 0x19, 0xc0, 0xdd, 0xfd, 0xe0, 0xee, 0x76, 0xd8, 0xab,
/* 0180*/0x01, 0x0c, 0x91, 0x01, 0xa1, 0xff, 0x02, 0x9d, 0x13, 0x57, 0x0e, 0x62, 0x4d, 0xa2, 0xa5, 0xf2,
/* 0190*/0x1a, 0x4a, 0xf5, 0x81, 0x8a, 0x67, 0x08, 0x92, 0x92, 0x10, 0x8b, 0x05, 0x52, 0x11, 0x43, 0x4c,
/* 01A0*/0x16, 0x04, 0x48, 0x40, 0x48, 0xd2, 0xd9, 0x5f, 0x23, 0x5f, 0x28, 0x9d, 0x46, 0x2e, 0x31, 0xb2,
/* 01B0*/0xdc, 0xf0, 0x46, 0x88, 0xfa, 0x13, 0x48, 0xb5, 0x3d, 0x04, 0x43, 0xc8, 0x9a, 0xb1, 0xb5, 0xb3,
/* 01C0*/0x46, 0xbd, 0xbe, 0x5c, 0x2e, 0x6b, 0x51, 0x3a, 0xaf, 0xe9, 0x2c, 0xaa, 0xab, 0x3c, 0x82, 0xa9,
/* 01D0*/0xb7, 0xfd, 0xa3, 0xa3, 0xb6, 0x4f, 0x26, 0x53, 0xc5, 0x7f, 0x50, 0xc8, 0xb6, 0xef, 0x35, 0x4d,
/* 01E0*/0x98, 0x25, 0x33, 0x4b, 0xfa, 0xf3, 0xea, 0x6f, 0xe1, 0x0b, 0x8e, 0x87, 0x3a, 0xfc, 0x86, 0xb6,
/* 01F0*/0x06, 0x6f, 0xeb, 0xbe, 0xb7, 0x10, 0x19, 0x2c, 0xcd, 0x59, 0x3e, 0x08, 0x75, 0x9a, 0x62, 0xc8,
/* 0200*/0xc5, 0x69, 0xc1, 0x44, 0x28, 0x83, 0x67, 0xe4, 0x33, 0x99, 0xa7, 0x21, 0x57, 0x18, 0x4c, 0xa8,
/* 0210*/0x95, 0xfa, 0x6a, 0xf5, 0xd7, 0xb1, 0xb6, 0x56, 0x4f, 0x2b, 0x55, 0xdf, 0xfb, 0xc7, 0xf7, 0x9c,
/* 0220*/0xa3, 0xd2, 0xd1, 0x48, 0x90, 0x93, 0xd4, 0xe1, 0x7c, 0x8a, 0xa9, 0xad, 0x45, 0x68, 0x7b, 0x0a,
/* 0230*/0x79, 0xf8, 0x69, 0xd5, 0x97, 0x95, 0xc0, 0x8a, 0x2b, 0x1d, 0x05, 0xe4, 0xe1, 0x39, 0xd3, 0x1a,
/* 0240*/0x41, 0xa2, 0x60, 0x23, 0x3d, 0x23, 0xa7, 0xed, 0x99, 0x4b, 0xe4, 0x16, 0x3b, 0xf3, 0x81, 0x7e,
/* 0250*/0x1e, 0x73, 0xc0, 0x3d, 0x63, 0x85, 0x53, 0x6e, 0x09, 0x8f, 0xa5, 0xe5, 0xb0, 0xaf, 0x91, 0x49,
/* 0260*/0xdd, 0xcd, 0x97, 0x2a, 0x42, 0xca, 0xac, 0xc0, 0x45, 0xae, 0xd7, 0x68, 0x8c, 0x88, 0xa8, 0x9a,
/* 0270*/0x9a, 0x45, 0x65, 0x18, 0x98, 0x73, 0x74, 0x98, 0xa7, 0x26, 0xe2, 0xf4, 0xd8, 0xee, 0x5c, 0xef,
/* 0280*/0xc4, 0xf6, 0x96, 0x86, 0xa0, 0xa5, 0xb8, 0xdc, 0x10, 0x96, 0x07, 0x2f, 0x7d, 0x06, 0x18, 0x91,
/* 0290*/0x98, 0x49, 0xed, 0xac, 0x40, 0x6b, 0xd6, 0x5e, 0x35, 0x9d, 0x92, 0xa2, 0x53, 0x66, 0xb0, 0x80,
/* 02A0*/0xc7, 0x44, 0x39, 0x44, 0xde, 0x36, 0xbf, 0x36, 0x9b, 0x13, 0xbd, 0x34, 0xf9, 0x53, 0xce, 0xc6,
/* 02B0*/0x96, 0xb3, 0x0a, 0xaa, 0xb5, 0x85, 0x50, 0x73, 0x24, 0x97, 0xe0, 0x3c, 0x31, 0x45, 0x88, 0x37,
/* 02C0*/0xc1, 0xcb, 0xbe, 0x05, 0xdf, 0x85, 0xeb, 0xbb, 0x16, 0x54, 0x82, 0xee, 0x3a, 0x43, 0x60, 0x80,
/* 02D0*/0x28, 0xff, 0xa6, 0xd8, 0x2e, 0xca, 0x4e, 0x61, 0x79, 0xf6, 0x71, 0x4d, 0x0e, 0x92, 0x12, 0x72,
/* 02E0*/0x59, 0x4e, 0x73, 0x3e, 0x9f, 0x24, 0x5b, 0xcc, 0x6d, 0xe5, 0x0b, 0x15, 0x5c, 0xd8, 0x75, 0xce,
/* 02F0*/0xbf, 0x02, 0x71, 0x80, 0xe1, 0xa2, 0x01, 0x01, 0xbc, 0x23, 0x52, 0x6d, 0x8d, 0x4e, 0x23, 0x41,
/* 0300*/0xc3, 0xe0, 0x95, 0x38, 0xbb, 0x4a, 0x53, 0x67, 0xee, 0x56, 0x23, 0x74, 0xf3, 0x5b, 0xe5, 0x70,
/* 0310*/0x26, 0xfb, 0xf1, 0xed, 0xd2, 0xdf, 0xfd, 0x7f, 0xdc, 0xb3, 0xb1, 0xf7, 0x84, 0x7f, 0x07, 0x49,
/* 0320*/0x36, 0xe8, 0xac, 0x32, 0x5d, 0x85, 0x22, 0x2d, 0x73, 0xe6, 0x68, 0xe5, 0x1c, 0x67, 0x4e, 0x27,
/* 0330*/0xf1, 0xa2, 0xab, 0x25, 0x5d, 0x0d, 0x81, 0x0b, 0xe2, 0x95, 0x46, 0x21, 0x4d, 0xee, 0xa7, 0xc6,
/* 0340*/0x7b, 0xa6, 0x9f, 0x1d, 0x61, 0x1e, 0xb7, 0xd6, 0x1a, 0x3f, 0xc9, 0xba, 0xc7, 0x51, 0xaf, 0x58,
/* 0350*/0xcf, 0x74, 0x32, 0x55, 0x82, 0xf3, 0xdb, 0x6b, 0x42, 0x6b, 0x79, 0x4e, 0x0b, 0x89, 0x92, 0x80,
/* 0360*/0xec, 0xb0, 0x57, 0xb4, 0x58, 0x91, 0x15, 0xd0, 0x49, 0x4d, 0xfb, 0x16, 0xbc, 0xef, 0xe7, 0x94,
/* 0370*/0xcb, 0x92, 0x84, 0xdf, 0x9e, 0xed, 0x92, 0x64, 0x02, 0x95, 0x2d, 0xe4, 0x05, 0x74, 0x5e, 0xce,
/* 0380*/0xd7, 0x5d, 0xf7, 0xda, 0xef, 0xf6, 0xc5, 0xf3, 0xe6, 0xbb, 0x1d, 0x62, 0x46, 0x17, 0x51, 0x59,
/* 0390*/0x07, 0xc7, 0x87, 0xb7, 0x39, 0x28, 0xc8, 0x20, 0xe7, 0x88, 0xa9, 0xf0, 0x3c, 0xa4, 0x1d, 0x36,
/* 03A0*/0x1b, 0x90, 0x6e, 0x5c, 0x89, 0x0a, 0x1a, 0x9f, 0xe7, 0xf1, 0x37, 0xa4, 0xf3, 0xb8, 0xad, 0xdb,
/* 03B0*/0x7e, 0x3a, 0xa3, 0x7b, 0xcc, 0x22, 0x25, 0x54, 0xf4, 0xd2, 0x3e, 0x16, 0x09, 0xfb, 0xb5, 0x61,
/* 03C0*/0x85, 0xed, 0x54, 0xee, 0xe0, 0x1b, 0xae, 0xe6, 0xb3, 0x83, 0xed, 0x72, 0xad, 0x69, 0x65, 0xd6,
/* 03D0*/0x68, 0x99, 0xd0, 0x60, 0x6d, 0x19, 0x27, 0x61, 0x0c, 0x3f, 0x7e, 0xd0, 0x90, 0xa6, 0x58, 0x62,
/* 03E0*/0x67, 0x25, 0xf3, 0xce, 0xa4, 0x05, 0x27, 0xef, 0xab, 0xfb, 0x72, 0xcc, 0x31, 0xb8, 0x3a, 0x16,
/* 03F0*/0xad, 0xb8, 0x3e, 0x1c, 0x87, 0x98, 0xca, 0xd7, 0x66, 0x53, 0x06, 0xfa, 0x25, 0x49, 0xf0, 0xe9,
/* 0400*/0xf9, 0xcb, 0x8a, 0x70, 0xfb, 0x9c, 0xad, 0x1d, 0xe8, 0xde, 0x79, 0xc5, 0x95, 0xe5, 0x52, 0x72,
/* 0410*/0x92, 0xa0, 0xfb, 0x43, 0xb2, 0x6e, 0xf2, 0xaa, 0x16, 0x81, 0x28, 0xc8, 0xf6, 0x09, 0xc6, 0x89,
/* 0420*/0xe7, 0xdd, 0xbc, 0x36, 0x7c, 0xd2, 0xa7, 0xde, 0x66, 0x9a, 0x54, 0x91, 0xab, 0xe1, 0x27, 0xcd,
/* 0430*/0xfb, 0x58, 0xf6, 0x2a, 0x7f, 0x36, 0xeb, 0xe5, 0x25, 0xde, 0xac, 0xe7, 0xd7, 0x7a, 0x73, 0xac,
/* 0440*/0xe5, 0x8a, 0xef, 0xf4, 0xa6, 0x4c, 0x16, 0x90, 0xc8, 0x56, 0xc0, 0xf3, 0x24, 0x78, 0xba, 0xf1,
/* 0450*/0xbd, 0x66, 0x7c, 0x02, 0x42, 0x25, 0x51, 0xda, 0x0a, 0x14, 0x4e, 0x6c, 0xd0, 0x5e, 0x9a, 0xbc,
/* 0460*/0x1d, 0xc8, 0xfb, 0x84, 0x0d, 0xf2, 0xaf, 0x06, 0x34, 0x93, 0x5c, 0x7d, 0xab, 0x19, 0xb6, 0x02,
/* 0470*/0xd6, 0x60, 0xe0, 0x42, 0x6d, 0xda, 0x07, 0x1c, 0xd8, 0x56, 0xb0, 0x34, 0xf4, 0xe6, 0x50, 0x3a,
/* 0480*/0x14, 0x2a, 0xd6, 0xc6, 0x36, 0x3e, 0x1e, 0x7f, 0x3c, 0xce, 0x77, 0xda, 0x0e, 0xe0, 0x0e, 0x81,
/* 0490*/0x34, 0x0f, 0x51, 0xf4, 0x00, 0xa4, 0x62, 0x8a, 0x9b, 0xaf, 0x22, 0xda, 0xba, 0x1d, 0xda, 0xcd,
/* 04A0*/0x71, 0x06, 0xf5, 0xe2, 0x37, 0x33, 0xbd, 0x75, 0x4a, 0x72, 0xcc, 0xc6, 0x7f, 0xb7, 0xc8, 0x84,
/* 04B0*/0x4c, 0x74, 0x19, 0x75, 0xa6, 0xb3, 0x02, 0x30, 0x8f, 0x4e, 0x02, 0x08, 0x63, 0xa4, 0x9b, 0x9a,
/* 04C0*/0x13, 0x20, 0x7d, 0x3c, 0xc5, 0x0e, 0x15, 0xc6, 0x5c, 0x75, 0x07, 0x69, 0x21, 0xb5, 0x56, 0xf0,
/* 04D0*/0xb3, 0xe2, 0x1f, 0xac, 0x09, 0x38, 0x28, 0x9a, 0xb8, 0x75, 0xf0, 0x0c, 0x03, 0x07, 0x39, 0x05,
/* 04E0*/0x4a, 0x8c, 0x51, 0xf1, 0x9b, 0xb0, 0xc4, 0xd1, 0xde, 0xde, 0xb1, 0x59, 0x77, 0xeb, 0x2e, 0xbb,
/* 04F0*/0xd7, 0xa6, 0x72, 0xba, 0x85, 0x3d, 0x0f, 0xf5, 0xe1, 0xc3, 0xfb, 0xdf, 0xc2, 0xfe, 0x14, 0x3c,
/* 0500*/0x45, 0x7b, 0x1e, 0xfb, 0x29, 0x63, 0xdf, 0xec, 0xf8, 0x04, 0xbb, 0xab, 0x11, 0x6c, 0x4a, 0x55,
/* 0510*/0xbc, 0xae, 0x5e, 0x12, 0x11, 0x77, 0x5c, 0x99, 0x89, 0x43, 0x3f, 0x53, 0x22, 0xc4, 0x58, 0x2b,
/* 0520*/0x12, 0x6a, 0x2b, 0x18, 0x91, 0x43, 0xfe, 0x3f, 0x44, 0xf9, 0x88, 0xa8, 0xf4, 0x6e, 0x46, 0xbd,
/* 0530*/0x01, 0xbf, 0xd7, 0xb8, 0xd9, 0xaa, 0xfb, 0x14, 0xe6, 0xc2, 0x97, 0x02, 0xdb, 0xde, 0x8b, 0xdb,
/* 0540*/0x70, 0x57, 0x5b, 0x4d, 0xc6, 0x46, 0xff, 0xeb, 0x08, 0xc8, 0xf4, 0xd2, 0xb4, 0x82, 0x93, 0x63,
/* 0550*/0x52, 0x8c, 0x56, 0x34, 0xfa, 0xe3, 0xb8, 0x80, 0xec, 0x7a, 0xbe, 0x08, 0x99, 0x7f, 0xb4, 0x9b,
/* 0560*/0xf5, 0xd2, 0x8d, 0xdf, 0xd2, 0x75, 0xea, 0x36, 0x6e, 0xc2, 0xbc, 0xfb, 0xa8, 0x9d, 0xdc, 0x53,
/* 0570*/0xfb, 0x5f, 0x47, 0xc3, 0xf6, 0x34, 0x22, 0x0e, 0x00, 0x00
};

const char *static_contentType[2] = {
// CMakeLists.txt
"Etag: \"BBAE7AA04C9B95749B042591BB63DF5425ED0697\"\r\nContent-Encoding: gzip\r\nContent-Type: text/plain; charset=utf-8\r\n",
// echo.html
"Etag: \"88AB1B59A02F3EB2DC290E850AAA179EC95AF0E2\"\r\nContent-Encoding: gzip\r\nContent-Type: text/html; charset=utf-8\r\n"
};

const uint8_t *static_content[2] = {
ws_static_CMakeLists_txt,
ws_static_echo_html
};

const uint32_t static_content_size[2] = {
(uint32_t)sizeof(ws_static_CMakeLists_txt),
(uint32_t)sizeof(ws_static_echo_html)
};

static const ws_static_asset_set_t embedded_assets = {
static_count, static_urls, static_contentType, static_content, static_content_size
};


void initEmbeddedAssets(void){
ws_set_static_assets(&embedded_assets);

}

#endif /* WS_STATICS_DATA_IMPLEMENTATION */

#ifdef __cplusplus
}
#endif
10 changes: 10 additions & 0 deletions examples/echo/echo.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,13 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#ifdef WS_STATICS
#define WS_STATICS_DATA_IMPLEMENTATION
#include "echo-static.h"
#endif
#include <ws.h>


/**
* @dir examples/
* @brief wsServer examples folder
Expand Down Expand Up @@ -116,6 +121,11 @@ void onmessage(ws_cli_conn_t client,
*/
int main(void)
{
#ifdef WS_STATICS
initEmbeddedAssets();
sprintf(static_root_alias,"%s","/echo.html");

#endif
ws_socket(&(struct ws_server){
/*
* Bind host:
Expand Down
Loading