Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Publish API used by luasec #72

Closed
wants to merge 2 commits into from
Closed
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
16 changes: 9 additions & 7 deletions src/buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
#include "io.h"
#include "timeout.h"

#include "common.h"

/* buffer size in bytes */
#define BUF_SIZE 8192

Expand All @@ -34,12 +36,12 @@ typedef struct t_buffer_ {
} t_buffer;
typedef t_buffer *p_buffer;

int buffer_open(lua_State *L);
void buffer_init(p_buffer buf, p_io io, p_timeout tm);
int buffer_meth_send(lua_State *L, p_buffer buf);
int buffer_meth_receive(lua_State *L, p_buffer buf);
int buffer_meth_getstats(lua_State *L, p_buffer buf);
int buffer_meth_setstats(lua_State *L, p_buffer buf);
int buffer_isempty(p_buffer buf);
LUASOCKET_API int buffer_open(lua_State *L);
LUASOCKET_API void buffer_init(p_buffer buf, p_io io, p_timeout tm);
LUASOCKET_API int buffer_meth_send(lua_State *L, p_buffer buf);
LUASOCKET_API int buffer_meth_receive(lua_State *L, p_buffer buf);
LUASOCKET_API int buffer_meth_getstats(lua_State *L, p_buffer buf);
LUASOCKET_API int buffer_meth_setstats(lua_State *L, p_buffer buf);
LUASOCKET_API int buffer_isempty(p_buffer buf);

#endif /* BUF_H */
16 changes: 16 additions & 0 deletions src/common.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef LUASOCKET_COMMON_H
#define LUASOCKET_COMMON_H

#ifndef LUASOCKET_API
#define LUASOCKET_API extern
#endif

#ifndef UNIX_API
#define UNIX_API extern
#endif

#ifndef MIME_API
#define MIME_API extern
#endif

#endif
7 changes: 5 additions & 2 deletions src/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <stdio.h>
#include "lua.h"

#include "common.h"

#include "timeout.h"

/* IO error codes */
Expand Down Expand Up @@ -58,8 +60,9 @@ typedef struct t_io_ {
} t_io;
typedef t_io *p_io;

void io_init(p_io io, p_send send, p_recv recv, p_error error, void *ctx);
const char *io_strerror(int err);
LUASOCKET_API void io_init(p_io io, p_send send, p_recv recv,
p_error error, void *ctx);
LUASOCKET_API const char *io_strerror(int err);

#endif /* IO_H */

71 changes: 41 additions & 30 deletions src/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
\*=========================================================================*/
#include "io.h"

#include "common.h"

/*=========================================================================*\
* Platform specific compatibilization
\*=========================================================================*/
Expand All @@ -35,44 +37,53 @@ typedef struct sockaddr SA;
* Functions bellow implement a comfortable platform independent
* interface to sockets
\*=========================================================================*/
int socket_open(void);
int socket_close(void);
void socket_destroy(p_socket ps);
void socket_shutdown(p_socket ps, int how);
int socket_sendto(p_socket ps, const char *data, size_t count,
size_t *sent, SA *addr, socklen_t addr_len, p_timeout tm);
int socket_recvfrom(p_socket ps, char *data, size_t count,
size_t *got, SA *addr, socklen_t *addr_len, p_timeout tm);
LUASOCKET_API int socket_open(void);
LUASOCKET_API int socket_close(void);
LUASOCKET_API void socket_destroy(p_socket ps);
LUASOCKET_API void socket_shutdown(p_socket ps, int how);
LUASOCKET_API int socket_sendto(p_socket ps, const char *data,
size_t count, size_t *sent, SA *addr, socklen_t addr_len,
p_timeout tm);
LUASOCKET_API int socket_recvfrom(p_socket ps, char *data,
size_t count, size_t *got, SA *addr, socklen_t *addr_len,
p_timeout tm);

void socket_setnonblocking(p_socket ps);
void socket_setblocking(p_socket ps);
LUASOCKET_API void socket_setnonblocking(p_socket ps);
LUASOCKET_API void socket_setblocking(p_socket ps);

int socket_waitfd(p_socket ps, int sw, p_timeout tm);
int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds,
p_timeout tm);
LUASOCKET_API int socket_waitfd(p_socket ps, int sw, p_timeout tm);
LUASOCKET_API int socket_select(t_socket n, fd_set *rfds, fd_set *wfds,
fd_set *efds, p_timeout tm);

int socket_connect(p_socket ps, SA *addr, socklen_t addr_len, p_timeout tm);
int socket_create(p_socket ps, int domain, int type, int protocol);
int socket_bind(p_socket ps, SA *addr, socklen_t addr_len);
int socket_listen(p_socket ps, int backlog);
int socket_accept(p_socket ps, p_socket pa, SA *addr,
LUASOCKET_API int socket_connect(p_socket ps, SA *addr,
socklen_t addr_len, p_timeout tm);
LUASOCKET_API int socket_create(p_socket ps, int domain, int type,
int protocol);
LUASOCKET_API int socket_bind(p_socket ps, SA *addr,
socklen_t addr_len);
LUASOCKET_API int socket_listen(p_socket ps, int backlog);
LUASOCKET_API int socket_accept(p_socket ps, p_socket pa, SA *addr,
socklen_t *addr_len, p_timeout tm);

const char *socket_hoststrerror(int err);
const char *socket_gaistrerror(int err);
const char *socket_strerror(int err);
LUASOCKET_API const char *socket_hoststrerror(int err);
LUASOCKET_API const char *socket_gaistrerror(int err);
LUASOCKET_API const char *socket_strerror(int err);

/* these are perfect to use with the io abstraction module
and the buffered input module */
int socket_send(p_socket ps, const char *data, size_t count,
size_t *sent, p_timeout tm);
int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm);
int socket_write(p_socket ps, const char *data, size_t count,
size_t *sent, p_timeout tm);
int socket_read(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm);
const char *socket_ioerror(p_socket ps, int err);
LUASOCKET_API int socket_send(p_socket ps, const char *data,
size_t count, size_t *sent, p_timeout tm);
LUASOCKET_API int socket_recv(p_socket ps, char *data, size_t count,
size_t *got, p_timeout tm);
LUASOCKET_API int socket_write(p_socket ps, const char *data,
size_t count, size_t *sent, p_timeout tm);
LUASOCKET_API int socket_read(p_socket ps, char *data, size_t count,
size_t *got, p_timeout tm);
LUASOCKET_API const char *socket_ioerror(p_socket ps, int err);

int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp);
int socket_gethostbyname(const char *addr, struct hostent **hp);
LUASOCKET_API int socket_gethostbyaddr(const char *addr, socklen_t len,
struct hostent **hp);
LUASOCKET_API int socket_gethostbyname(const char *addr,
struct hostent **hp);

#endif /* SOCKET_H */
19 changes: 11 additions & 8 deletions src/timeout.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
\*=========================================================================*/
#include "lua.h"

#include "common.h"

/* timeout control structure */
typedef struct t_timeout_ {
double block; /* maximum time for blocking calls */
Expand All @@ -14,14 +16,15 @@ typedef struct t_timeout_ {
} t_timeout;
typedef t_timeout *p_timeout;

int timeout_open(lua_State *L);
void timeout_init(p_timeout tm, double block, double total);
double timeout_get(p_timeout tm);
double timeout_getretry(p_timeout tm);
p_timeout timeout_markstart(p_timeout tm);
double timeout_getstart(p_timeout tm);
double timeout_gettime(void);
int timeout_meth_settimeout(lua_State *L, p_timeout tm);
LUASOCKET_API int timeout_open(lua_State *L);
LUASOCKET_API void timeout_init(p_timeout tm, double block,
double total);
LUASOCKET_API double timeout_get(p_timeout tm);
LUASOCKET_API double timeout_getretry(p_timeout tm);
LUASOCKET_API p_timeout timeout_markstart(p_timeout tm);
LUASOCKET_API double timeout_getstart(p_timeout tm);
LUASOCKET_API double timeout_gettime(void);
LUASOCKET_API int timeout_meth_settimeout(lua_State *L, p_timeout tm);

#define timeout_iszero(tm) ((tm)->block == 0.0)

Expand Down
6 changes: 0 additions & 6 deletions src/usocket.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@
#ifndef SOCKET_SELECT
#include <sys/poll.h>

#define WAITFD_R POLLIN
#define WAITFD_W POLLOUT
#define WAITFD_C (POLLIN|POLLOUT)
int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
int ret;
struct pollfd pfd;
Expand All @@ -38,9 +35,6 @@ int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
}
#else

#define WAITFD_R 1
#define WAITFD_W 2
#define WAITFD_C (WAITFD_R|WAITFD_W)

int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
int ret;
Expand Down
16 changes: 16 additions & 0 deletions src/usocket.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,20 @@ typedef struct sockaddr_storage t_sockaddr_storage;

#define SOCKET_INVALID (-1)

#ifndef SOCKET_SELECT
#include <sys/poll.h>

#define WAITFD_R POLLIN
#define WAITFD_W POLLOUT
#define WAITFD_C (POLLIN|POLLOUT)

#else

#define WAITFD_R 1
#define WAITFD_W 2
#define WAITFD_C (WAITFD_R|WAITFD_W)

#endif


#endif /* USOCKET_H */
4 changes: 0 additions & 4 deletions src/wsocket.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,6 @@ int socket_close(void) {
/*-------------------------------------------------------------------------*\
* Wait for readable/writable/connected socket with timeout
\*-------------------------------------------------------------------------*/
#define WAITFD_R 1
#define WAITFD_W 2
#define WAITFD_E 4
#define WAITFD_C (WAITFD_E|WAITFD_W)

int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
int ret;
Expand Down
5 changes: 5 additions & 0 deletions src/wsocket.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,9 @@ typedef t_socket *p_socket;
#define AI_NUMERICSERV (0)
#endif

#define WAITFD_R 1
#define WAITFD_W 2
#define WAITFD_E 4
#define WAITFD_C (WAITFD_E|WAITFD_W)

#endif /* WSOCKET_H */