lws_plat_fd implement platform default handlers
authorAndy Green <andy.green@linaro.org>
Wed, 9 Dec 2015 23:58:58 +0000 (07:58 +0800)
committerAndy Green <andy.green@linaro.org>
Thu, 10 Dec 2015 03:01:59 +0000 (11:01 +0800)
commit4e442b774306134db3bae13cbed88623290ee69c
tree0861381d38b07664698abc2996351a49a1bb9035
parent11260dac18e22a9cfc9aca4f84318bbf49744bad
lws_plat_fd implement platform default handlers

This is a rewrite of the patch from Soapyman here

https://github.com/warmcat/libwebsockets/pull/363

The main changes compared to Soapyman's original patch are

 - There's no new stuff in the info struct user code does any overrides
   it may want to do explicitly after lws_context_create returns

 - User overrides for file ops can call through (subclass) to the original
   platform implementation using lws_get_fops_plat()

 - A typedef is provided for plat-specific fd type

 - Public helpers are provided to allow user code to be platform-independent
   about file access, using the lws platform file operations underneath:

static inline lws_filefd_type
lws_plat_file_open(struct lws_plat_file_ops *fops, const char *filename,
   unsigned long *filelen, int flags)

static inline int
lws_plat_file_close(struct lws_plat_file_ops *fops, lws_filefd_type fd)

static inline unsigned long
lws_plat_file_seek_cur(struct lws_plat_file_ops *fops, lws_filefd_type fd,
       long offset_from_cur_pos)

static inline int
lws_plat_file_read(struct lws_plat_file_ops *fops, lws_filefd_type fd,
   unsigned long *amount, unsigned char *buf, unsigned long len)

static inline int
lws_plat_file_write(struct lws_plat_file_ops *fops, lws_filefd_type fd,
    unsigned long *amount, unsigned char *buf, unsigned long len)

There's example documentation and implementation in the test server.

Signed-off-by: Andy Green <andy.green@linaro.org>
13 files changed:
README.coding.md
changelog
lib/libwebsockets.c
lib/libwebsockets.h
lib/lws-plat-mbed3.c
lib/lws-plat-unix.c
lib/lws-plat-win.c
lib/output.c
lib/private-libwebsockets.h
lib/server.c
test-server/test-server-http.c
test-server/test-server.c
test-server/test-server.h