# HG changeset patch # User Mychaela Falconia # Date 1495407632 0 # Node ID 93e5194e5511f15a8a77d620340516981b7fcb97 # Parent d7e436bf4876c3446549500d780a4dea203d80d6 autocal/tsidsock.c written diff -r d7e436bf4876 -r 93e5194e5511 autocal/Makefile --- a/autocal/Makefile Sun May 21 22:58:04 2017 +0000 +++ b/autocal/Makefile Sun May 21 23:00:32 2017 +0000 @@ -1,6 +1,6 @@ CC= gcc CFLAGS= -O2 -I/opt/freecalypso/include -OBJS= rvinterf.o +OBJS= rvinterf.o tsidsock.o all: ${OBJS} diff -r d7e436bf4876 -r 93e5194e5511 autocal/tsidsock.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/autocal/tsidsock.c Sun May 21 23:00:32 2017 +0000 @@ -0,0 +1,54 @@ +/* + * TSID local socket interface + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char *tsid_socket_pathname = "/tmp/fc_rftest_socket"; +int tsid_socket; + +connect_tsid_socket() +{ + /* local socket binding voodoo copied from osmocon */ + struct sockaddr_un local; + unsigned int namelen; + int rc; + + tsid_socket = socket(AF_UNIX, SOCK_STREAM, 0); + if (tsid_socket < 0) { + perror("socket(AF_UNIX, SOCK_STREAM, 0)"); + exit(ERROR_UNIX); + } + + local.sun_family = AF_UNIX; + strncpy(local.sun_path, tsid_socket_pathname, sizeof(local.sun_path)); + local.sun_path[sizeof(local.sun_path) - 1] = '\0'; + + /* we use the same magic that X11 uses in Xtranssock.c for + * calculating the proper length of the sockaddr */ +#if defined(BSD44SOCKETS) || defined(__UNIXWARE__) + local.sun_len = strlen(local.sun_path); +#endif +#if defined(BSD44SOCKETS) || defined(SUN_LEN) + namelen = SUN_LEN(&local); +#else + namelen = strlen(local.sun_path) + + offsetof(struct sockaddr_un, sun_path) + 1; +#endif + + rc = connect(tsid_socket, (struct sockaddr *) &local, namelen); + if (rc != 0) { + perror(tsid_socket_pathname); + exit(ERROR_RFTEST); + } + + return(0); +}