diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2014-05-26 10:27:52 +0300 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2014-05-26 10:27:52 +0300 |
| commit | 992ae64c435e7126ecf02d8b8de803036eace2e3 (patch) | |
| tree | 1fb02f7cdf91d987a7fb8f17dd57b1ac00205540 /src | |
| parent | 36972f8ca14aabc0984c0ad87e5d26bac1ce3f15 (diff) | |
| download | libuvh-992ae64c435e7126ecf02d8b8de803036eace2e3.tar.gz libuvh-992ae64c435e7126ecf02d8b8de803036eace2e3.zip | |
make symbols visible when building a shared library
Diffstat (limited to 'src')
| -rw-r--r-- | src/uvh.c | 31 | ||||
| -rw-r--r-- | src/uvh.h | 59 |
2 files changed, 60 insertions, 30 deletions
@@ -87,7 +87,7 @@ struct uvh_request_private void *stream_userdata; }; -struct uvh_server *uvh_server_init(uv_loop_t *loop, void *data, +UVH_EXTERN struct uvh_server *uvh_server_init(uv_loop_t *loop, void *data, uvh_request_handler_cb request_handler) { struct uvh_server_private *server; @@ -130,14 +130,14 @@ error: return NULL; } -void uvh_server_free(struct uvh_server *server) +UVH_EXTERN void uvh_server_free(struct uvh_server *server) { struct uvh_server_private *p = container_of(server, struct uvh_server_private, server); free(p); } -int uvh_server_listen(struct uvh_server *server, const char *address, +UVH_EXTERN int uvh_server_listen(struct uvh_server *server, const char *address, short port) { struct uvh_server_private *serverp = container_of(server, @@ -163,7 +163,7 @@ static void on_server_close(uv_handle_t *handle) LOG_DEBUG("%s", __FUNCTION__); } -void uvh_server_stop(struct uvh_server *server) +UVH_EXTERN void uvh_server_stop(struct uvh_server *server) { struct uvh_server_private *p; @@ -582,7 +582,7 @@ static void uvh_request_write_sds(struct uvh_request *req, sds data, uv_write(&wreq->wreq, (uv_stream_t *) &p->stream, &wreq->buf, 1, cb); } -void uvh_request_write(struct uvh_request *req, +UVH_EXTERN void uvh_request_write(struct uvh_request *req, const char *data, size_t len) { struct uvh_request_private *p = container_of(req, @@ -596,7 +596,8 @@ void uvh_request_write(struct uvh_request *req, p->send_body = sdscatlen(p->send_body, data, len); } -void uvh_request_writef(struct uvh_request *req, const char *fmt, ...) +UVH_EXTERN void uvh_request_writef(struct uvh_request *req, const char *fmt, + ...) { struct uvh_request_private *p = container_of(req, struct uvh_request_private, req); @@ -618,7 +619,7 @@ void uvh_request_writef(struct uvh_request *req, const char *fmt, ...) sdsfree(result); } -void uvh_request_write_status(struct uvh_request *req, int status) +UVH_EXTERN void uvh_request_write_status(struct uvh_request *req, int status) { struct uvh_request_private *p = container_of(req, struct uvh_request_private, req); @@ -626,7 +627,7 @@ void uvh_request_write_status(struct uvh_request *req, int status) p->send_status = status; } -void uvh_request_write_header(struct uvh_request *req, +UVH_EXTERN void uvh_request_write_header(struct uvh_request *req, const char *name, const char *value) { struct uvh_request_private *p = container_of(req, @@ -638,7 +639,7 @@ void uvh_request_write_header(struct uvh_request *req, p->send_headers = sdscatprintf(p->send_headers, "%s: %s\r\n", name, value); } -const char *http_status_code_str(int code) +UVH_EXTERN const char *http_status_code_str(int code) { struct http_status_code_def *def = http_status_code_defs; while (def->code != -1) @@ -653,7 +654,7 @@ const char *http_status_code_str(int code) return NULL; } -const char *uvh_request_get_header(struct uvh_request *req, +UVH_EXTERN const char *uvh_request_get_header(struct uvh_request *req, const char *name) { int i; @@ -667,7 +668,7 @@ const char *uvh_request_get_header(struct uvh_request *req, return NULL; } -void uvh_request_end(struct uvh_request *req) +UVH_EXTERN void uvh_request_end(struct uvh_request *req) { LOG_DEBUG("%s", __FUNCTION__); @@ -780,7 +781,7 @@ static void uvh_request_write_chunk(struct uvh_request *req, sds chunk) uvh_request_write_sds(req, sdsnew("\r\n"), callback); } -void uvh_request_stream(struct uvh_request *req, uvh_stream_cb callback, +UVH_EXTERN void uvh_request_stream(struct uvh_request *req, uvh_stream_cb cb, void *data) { struct uvh_request_private *p = container_of(req, @@ -789,15 +790,15 @@ void uvh_request_stream(struct uvh_request *req, uvh_stream_cb callback, uvh_request_write_header(req, "Transfer-Encoding", "chunked"); p->streaming = 1; - p->stream_cb = callback; + p->stream_cb = cb; p->stream_userdata = data; uvh_request_end(req); - if (callback) + if (cb) { char *chunk; - int chunklen = callback(&chunk, data); + int chunklen = cb(&chunk, data); uvh_request_write_chunk(req, sdsnewlen(chunk, chunklen)); free(chunk); } @@ -1,13 +1,37 @@ #ifndef UVH_H #define UVH_H +#ifdef __cplusplus +extern "C" { +#endif + #include <stdlib.h> #include <string.h> #include <stdio.h> #include <uv.h> +#ifdef _WIN32 + /* Windows - set up dll import/export decorators. */ +# if defined(BUILDING_UVH_SHARED) + /* Building shared library. */ +# define UVH_EXTERN __declspec(dllexport) +# elif defined(USING_UVH_SHARED) + /* Using shared library. */ +# define UVH_EXTERN __declspec(dllimport) +# else + /* Building static library. */ +# define UVH_EXTERN /* nothing */ +# endif +#elif __GNUC__ >= 4 +# define UVH_EXTERN __attribute__((visibility("default"))) +#else +# define UVH_EXTERN /* nothing */ +#endif + +#ifndef UVH_MAX_HEADERS #define UVH_MAX_HEADERS 50 +#endif #define HTTP_STATUS_CODE_MAP(XX) \ XX(100, CONTINUE, "Continue") \ @@ -100,41 +124,46 @@ struct uvh_request int content_length; }; -struct uvh_server *uvh_server_init(uv_loop_t *loop, void *data, +UVH_EXTERN struct uvh_server *uvh_server_init(uv_loop_t *loop, void *data, uvh_request_handler_cb request_handler); -void uvh_server_free(struct uvh_server *server); +UVH_EXTERN void uvh_server_free(struct uvh_server *server); -int uvh_server_listen(struct uvh_server *server, const char *address, +UVH_EXTERN int uvh_server_listen(struct uvh_server *server, const char *address, short port); -void uvh_server_stop(struct uvh_server *server); +UVH_EXTERN void uvh_server_stop(struct uvh_server *server); -void uvh_request_write(struct uvh_request *req, const char *data, +UVH_EXTERN void uvh_request_write(struct uvh_request *req, const char *data, size_t len); #ifdef __GNUC__ -void uvh_request_writef(struct uvh_request *req, const char *fmt, ...) - __attribute__((format(printf, 2, 3))); +UVH_EXTERN void uvh_request_writef(struct uvh_request *req, const char *fmt, + ...) __attribute__((format(printf, 2, 3))); #else -void uvh_request_writef(struct uvh_request *req, const char *fmt, ...); +UVH_EXTERN void uvh_request_writef(struct uvh_request *req, const char *fmt, + ...); #endif -void uvh_request_write_status(struct uvh_request *req, int status); +UVH_EXTERN void uvh_request_write_status(struct uvh_request *req, int status); -void uvh_request_write_header(struct uvh_request *req, +UVH_EXTERN void uvh_request_write_header(struct uvh_request *req, const char *name, const char *value); -const char *http_status_code_str(int code); +UVH_EXTERN const char *http_status_code_str(int code); -const char *uvh_request_get_header(struct uvh_request *req, +UVH_EXTERN const char *uvh_request_get_header(struct uvh_request *req, const char *name); -void uvh_request_end(struct uvh_request *req); +UVH_EXTERN void uvh_request_end(struct uvh_request *req); typedef int (*uvh_stream_cb)(char **buffer, void *data); -void uvh_request_stream(struct uvh_request *req, uvh_stream_cb callback, - void *data); +UVH_EXTERN void uvh_request_stream(struct uvh_request *req, + uvh_stream_cb callback, void *data); + +#ifdef __cplusplus +} +#endif #endif /* UVH_H */ |
