[commit] r10895 - in freeswitch/trunk/libs/esl: . src src/include
Author: anthm Date: Sat Dec 20 10:40:33 2008 New Revision: 10895 Log: add more code for listener Modified: freeswitch/trunk/libs/esl/Makefile freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/Makefile ============================================================================== --- freeswitch/trunk/libs/esl/Makefile (original) +++ freeswitch/trunk/libs/esl/Makefile Sat Dec 20 10:40:33 2008 @@ -3,24 +3,28 @@ LIBEDIT_DIR=../../libs/libedit CFLAGS=$(INCS) -g -ggdb -I$(LIBEDIT_DIR)/src/ MYLIB=libesl.a - +LIBS=-lesl -lncurses -lpthread +LDFLAGS=-L. OBJS=src/esl.o src/esl_event.o src/esl_threadmutex.o src/esl_config.o -all: $(MYLIB) fs_cli +all: $(MYLIB) fs_cli testclient testserver $(MYLIB): $(OBJS) $(HEADERS) ar rcs $(MYLIB) $(OBJS) ranlib $(MYLIB) -%.o: %.c - $(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@ +testserver: $(MYLIB) testserver.c + $(CC) $(CC_CFLAGS) $(CFLAGS) testserver.c -o testserver $(LDFLAGS) $(LIBS) -test: $(MYLIB) - $(CC) $(CC_CFLAGS) $(CFLAGS) testclient.c -o testclient -L. -lesl +testclient: $(MYLIB) testclient.c + $(CC) $(CC_CFLAGS) $(CFLAGS) testclient.c -o testclient $(LDFLAGS) $(LIBS) fs_cli: $(MYLIB) fs_cli.c - $(CC) $(CC_CFLAGS) $(CFLAGS) fs_cli.c -o fs_cli -L. -L$(LIBEDIT_DIR)/src/.libs -lesl -ledit -lncurses -lpthread + $(CC) $(CC_CFLAGS) $(CFLAGS) fs_cli.c -o fs_cli $(LDFLAGS) -L$(LIBEDIT_DIR)/src/.libs $(LIBS) -ledit + +%.o: %.c + $(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@ clean: - rm -f *.o src/*.o testclient fs_cli libesl.a *~ src/*~ src/include/*~ + rm -f *.o src/*.o testclient testserver fs_cli libesl.a *~ src/*~ src/include/*~ Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sat Dec 20 10:40:33 2008 @@ -323,6 +323,59 @@ } +esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback) +{ + esl_socket_t server_sock = ESL_SOCK_INVALID; + int reuse_addr = 1; + struct sockaddr_in addr; + esl_status_t status = ESL_SUCCESS; + + if ((server_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { + return ESL_FAIL; + } + + setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &reuse_addr, sizeof(reuse_addr)); + + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_ANY); + addr.sin_port = htons(port); + + if (bind(server_sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + status = ESL_FAIL; + goto end; + } + + if (listen(server_sock, 10000) < 0) { + status = ESL_FAIL; + goto end; + } + + for (;;) { + int client_sock; + struct sockaddr_in echoClntAddr; + unsigned int clntLen; + + clntLen = sizeof(echoClntAddr); + + if ((client_sock = accept(server_sock, (struct sockaddr *) &echoClntAddr, &clntLen)) == ESL_SOCK_INVALID) { + status = ESL_FAIL; + goto end; + } + + callback(server_sock, client_sock, echoClntAddr); + } + + end: + + if (server_sock != ESL_SOCK_INVALID) { + close(server_sock); + server_sock = ESL_SOCK_INVALID; + } + + return status; + +} esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password) { Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Sat Dec 20 10:40:33 2008 @@ -256,6 +256,9 @@ int esl_toupper(int c); int esl_tolower(int c); +typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr); + +esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback); esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password); esl_status_t esl_disconnect(esl_handle_t *handle);
participants (1)
-
FreeSWITCH SVN