mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-06 02:22:56 +00:00
add more code for listener
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10895 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
d5ef9ab196
commit
ff3ccb7a3a
@ -3,24 +3,28 @@ INCS=-I$(PWD)/src/include
|
|||||||
LIBEDIT_DIR=../../libs/libedit
|
LIBEDIT_DIR=../../libs/libedit
|
||||||
CFLAGS=$(INCS) -g -ggdb -I$(LIBEDIT_DIR)/src/
|
CFLAGS=$(INCS) -g -ggdb -I$(LIBEDIT_DIR)/src/
|
||||||
MYLIB=libesl.a
|
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
|
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)
|
$(MYLIB): $(OBJS) $(HEADERS)
|
||||||
ar rcs $(MYLIB) $(OBJS)
|
ar rcs $(MYLIB) $(OBJS)
|
||||||
ranlib $(MYLIB)
|
ranlib $(MYLIB)
|
||||||
|
|
||||||
|
testserver: $(MYLIB) testserver.c
|
||||||
|
$(CC) $(CC_CFLAGS) $(CFLAGS) testserver.c -o testserver $(LDFLAGS) $(LIBS)
|
||||||
|
|
||||||
|
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 $(LDFLAGS) -L$(LIBEDIT_DIR)/src/.libs $(LIBS) -ledit
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@
|
$(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
test: $(MYLIB)
|
|
||||||
$(CC) $(CC_CFLAGS) $(CFLAGS) testclient.c -o testclient -L. -lesl
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
clean:
|
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/*~
|
||||||
|
|
||||||
|
@ -323,6 +323,59 @@ char *esl_url_decode(char *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password)
|
||||||
{
|
{
|
||||||
|
@ -256,6 +256,9 @@ char *esl_url_decode(char *s);
|
|||||||
int esl_toupper(int c);
|
int esl_toupper(int c);
|
||||||
int esl_tolower(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_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password);
|
||||||
esl_status_t esl_disconnect(esl_handle_t *handle);
|
esl_status_t esl_disconnect(esl_handle_t *handle);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user