From be40b4451505270c1718705b952d28f19cbb9e7f Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Mon, 22 Aug 2022 18:52:28 +0200 Subject: [PATCH] Removed ph_socket, it is now a lib --- .gitignore | 1 + configure.ac | 1 + src/Makefile.am | 1 + src/isdn/Makefile.am | 2 +- src/isdn/isdn.h | 2 +- src/isdn/ph_driver.c | 8 +++++--- src/libph_socket/Makefile.am | 7 +++++++ src/{isdn => libph_socket}/ph_socket.c | 20 +++++++++----------- src/{isdn => libph_socket}/ph_socket.h | 4 ++-- 9 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 src/libph_socket/Makefile.am rename src/{isdn => libph_socket}/ph_socket.c (91%) rename src/{isdn => libph_socket}/ph_socket.h (93%) diff --git a/.gitignore b/.gitignore index 702050b..48dec50 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ src/liboptions/liboptions.a src/libosmocc/libosmocc.a src/libsample/libsample.a src/libtimer/libtimer.a +src/libph_socket/libph_socket.a src/libmisdn/libmisdn.a src/libmisdnuser/libmisdnuser.a src/isdn/osmo-cc-misdn-endpoint diff --git a/configure.ac b/configure.ac index c5915ff..a7b8f30 100644 --- a/configure.ac +++ b/configure.ac @@ -87,6 +87,7 @@ AC_OUTPUT( src/libjitter/Makefile src/libosmocc/Makefile src/libg711/Makefile + src/libph_socket/Makefile src/libmisdn/Makefile src/libmisdnuser/Makefile src/isdn/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index 9c75b31..a6c9d87 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -8,6 +8,7 @@ SUBDIRS = \ libjitter \ libosmocc \ libg711 \ + libph_socket \ libmisdn \ libmisdnuser \ isdn diff --git a/src/isdn/Makefile.am b/src/isdn/Makefile.am index bfb7363..539b22f 100644 --- a/src/isdn/Makefile.am +++ b/src/isdn/Makefile.am @@ -8,7 +8,6 @@ osmo_cc_misdn_endpoint_SOURCES = \ dss1.c \ isdn.c \ bridge.c \ - ph_socket.c \ ph_driver.c \ main.c @@ -21,6 +20,7 @@ osmo_cc_misdn_endpoint_LDADD = \ ../libjitter/libjitter.a \ ../libosmocc/libosmocc.a \ ../libg711/libg711.a \ + ../libph_socket/libph_socket.a \ ../libmisdn/libmisdn.a \ ../libmisdnuser/libmisdnuser.a diff --git a/src/isdn/isdn.h b/src/isdn/isdn.h index ee23bb7..97a013f 100644 --- a/src/isdn/isdn.h +++ b/src/isdn/isdn.h @@ -5,7 +5,7 @@ #include "../libosmocc/helper.h" #include "../libsample/sample.h" #include "../libjitter/jitter.h" -#include "ph_socket.h" +#include "../libph_socket/ph_socket.h" #define B_MODE_TRANSPARENT 0 #define B_MODE_HDLC 1 diff --git a/src/isdn/ph_driver.c b/src/isdn/ph_driver.c index 6e5d632..cb4c2fd 100644 --- a/src/isdn/ph_driver.c +++ b/src/isdn/ph_driver.c @@ -20,7 +20,7 @@ #include #include -#include "ph_socket.h" +#include "../libph_socket/ph_socket.h" #include "ph_driver.h" #define __MISDNL1L2__ #include "../libmisdn/mISDNhw.h" @@ -166,6 +166,8 @@ static int d_ctrl(struct mISDNchannel *ch, u_int cmd, void *arg) return err; } +static void ph_socket_rx_msg(ph_socket_t *s, int channel, uint8_t prim, uint8_t *data, int length); + /* init instance of PH-socket driver */ int init_ph_socket_driver(struct ph_socket_driver *drv, void *priv, const char *socket_name, int pri, int nt, uint32_t debug) { @@ -179,7 +181,7 @@ int init_ph_socket_driver(struct ph_socket_driver *drv, void *priv, const char * drv->nt = nt; /* socket client */ - ph_socket_init(&drv->ph_socket, drv, socket_name, 0); + ph_socket_init(&drv->ph_socket, ph_socket_rx_msg, drv, socket_name, 0); /* allocate dchannel structure */ dch = kzalloc(sizeof(*dch), GFP_KERNEL); @@ -246,7 +248,7 @@ void exit_ph_socket_driver(struct ph_socket_driver *drv) } /* message from PH-socket to mISDN */ -void ph_socket_rx_msg(ph_socket_t *s, int channel, uint8_t prim, uint8_t *data, int length) +static void ph_socket_rx_msg(ph_socket_t *s, int channel, uint8_t prim, uint8_t *data, int length) { struct ph_socket_driver *drv = (struct ph_socket_driver *)s->priv; diff --git a/src/libph_socket/Makefile.am b/src/libph_socket/Makefile.am new file mode 100644 index 0000000..60fa592 --- /dev/null +++ b/src/libph_socket/Makefile.am @@ -0,0 +1,7 @@ +AM_CPPFLAGS = -Wall -Wextra -g $(all_includes) + +noinst_LIBRARIES = libph_socket.a + +libph_socket_a_SOURCES = \ + ph_socket.c + diff --git a/src/isdn/ph_socket.c b/src/libph_socket/ph_socket.c similarity index 91% rename from src/isdn/ph_socket.c rename to src/libph_socket/ph_socket.c index eed3288..1457cec 100644 --- a/src/isdn/ph_socket.c +++ b/src/libph_socket/ph_socket.c @@ -32,22 +32,21 @@ #define CHAN s->name -int ph_socket_init(ph_socket_t *s, void *priv, const char *socket_name, int server) +int ph_socket_init(ph_socket_t *s, void (*ph_socket_rx_msg)(ph_socket_t *s, int channel, uint8_t prim, uint8_t *data, int length), void *priv, const char *socket_name, int server) { int rc, flags; memset(s, 0, sizeof(*s)); s->name = socket_name; + s->ph_socket_rx_msg = ph_socket_rx_msg; s->priv = priv; s->tx_list_tail = &s->tx_list; memset(&s->sock_address, 0, sizeof(s->sock_address)); s->sock_address.sun_family = AF_UNIX; - strncpy(s->sock_address.sun_path, socket_name, sizeof(s->sock_address.sun_path) - 1); + strcpy(s->sock_address.sun_path+1, socket_name); if (server) { - unlink(s->name); - rc = socket(PF_UNIX, SOCK_STREAM, 0); if (rc < 0) { PDEBUG_CHAN(DPH, DEBUG_ERROR, "Failed to create UNIX socket.\n"); @@ -55,7 +54,7 @@ int ph_socket_init(ph_socket_t *s, void *priv, const char *socket_name, int serv } s->listen = rc; - rc = bind(s->listen, (struct sockaddr *)(&s->sock_address), SUN_LEN(&s->sock_address)); + rc = bind(s->listen, (struct sockaddr *)(&s->sock_address), sizeof(s->sock_address)); if (rc < 0) { PDEBUG_CHAN(DPH, DEBUG_ERROR, "Failed to bind UNIX socket with path '%s' (errno = %d (%s)).\n", s->name, errno, strerror(errno)); return rc; @@ -89,7 +88,7 @@ static void close_connection(ph_socket_t *s) PDEBUG_CHAN(DPH, DEBUG_INFO, "Connection from PH-socket closed.\n"); /* indicate loss of socket connection */ - ph_socket_rx_msg(s, 0, (s->listen > 0) ? PH_PRIM_CTRL_REQ : PH_PRIM_CTRL_IND, &disable, 1); + s->ph_socket_rx_msg(s, 0, (s->listen > 0) ? PH_PRIM_CTRL_REQ : PH_PRIM_CTRL_IND, &disable, 1); close(s->connect); s->connect = 0; @@ -117,7 +116,6 @@ void ph_socket_exit(ph_socket_t *s) close_connection(s); if (s->listen > 0) { - unlink(s->name); close(s->listen); s->listen = 0; } @@ -149,7 +147,7 @@ int ph_socket_work(ph_socket_t *s) s->rx_header_index = 0; s->rx_data_index = 0; /* indicate established socket connection */ - ph_socket_rx_msg(s, 0, PH_PRIM_CTRL_REQ, &enable, 1); + s->ph_socket_rx_msg(s, 0, PH_PRIM_CTRL_REQ, &enable, 1); } work = 1; } @@ -169,7 +167,7 @@ int ph_socket_work(ph_socket_t *s) } s->connect = rc; /* connect */ - rc = connect(s->connect, (struct sockaddr *)&s->sock_address, SUN_LEN(&s->sock_address)); + rc = connect(s->connect, (struct sockaddr *)&s->sock_address, sizeof(s->sock_address)); if (rc < 0 && errno != EAGAIN) { if (!s->connect_failed) PDEBUG_CHAN(DPH, DEBUG_NOTICE, "Failed to connect UNIX socket, retrying...\n"); @@ -189,7 +187,7 @@ int ph_socket_work(ph_socket_t *s) s->rx_header_index = 0; s->rx_data_index = 0; /* indicate established socket connection */ - ph_socket_rx_msg(s, 0, PH_PRIM_CTRL_IND, &enable, 1); + s->ph_socket_rx_msg(s, 0, PH_PRIM_CTRL_IND, &enable, 1); } } } @@ -229,7 +227,7 @@ rx_again: if (s->rx_msg->msg.header.length) PDEBUG_CHAN(DPH, DEBUG_DEBUG, " -> data:%s\n", debug_hex(s->rx_msg->msg.data, s->rx_msg->msg.header.length)); } - ph_socket_rx_msg(s, s->rx_msg->msg.header.channel, s->rx_msg->msg.header.prim, s->rx_msg->msg.data, s->rx_msg->msg.header.length); + s->ph_socket_rx_msg(s, s->rx_msg->msg.header.channel, s->rx_msg->msg.header.prim, s->rx_msg->msg.data, s->rx_msg->msg.header.length); free(s->rx_msg); s->rx_msg = NULL; /* reset rx buffer */ diff --git a/src/isdn/ph_socket.h b/src/libph_socket/ph_socket.h similarity index 93% rename from src/isdn/ph_socket.h rename to src/libph_socket/ph_socket.h index 5d431c4..cf2f319 100644 --- a/src/isdn/ph_socket.h +++ b/src/libph_socket/ph_socket.h @@ -89,6 +89,7 @@ struct socket_msg_list { typedef struct ph_socket { const char *name; + void (*ph_socket_rx_msg)(struct ph_socket *s, int channel, uint8_t prim, uint8_t *data, int length); void *priv; struct sockaddr_un sock_address; int listen; /* socket to listen to incoming connections */ @@ -101,10 +102,9 @@ typedef struct ph_socket { int rx_data_index; } ph_socket_t; -int ph_socket_init(ph_socket_t *s, void *priv, const char *socket_name, int server); +int ph_socket_init(ph_socket_t *s, void (*ph_socket_rx_msg)(ph_socket_t *s, int channel, uint8_t prim, uint8_t *data, int length), void *priv, const char *socket_name, int server); void ph_socket_exit(ph_socket_t *s); void ph_socket_tx_msg(ph_socket_t *s, int channel, uint8_t prim, uint8_t *data, int length); -void ph_socket_rx_msg(ph_socket_t *s, int channel, uint8_t prim, uint8_t *data, int length); int ph_socket_work(ph_socket_t *s);