FreeCalypso > hg > themwi-system-sw
annotate libutil/sockinit.c @ 124:7e04d28fae8b
sip-in: default use-100rel to no
BulkVS servers act badly when we send a reliable 180 Ringing response
to an incoming call, even though they advertise 100rel support in
the Supported header in the INVITE packet, and we probably won't be
implementing 100rel for outbound because doing per-the-spec PRACK
as a UAC is just too burdensome. Therefore, we need to consider
100rel extension as not-really-supported in themwi-system-sw.
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sat, 01 Oct 2022 15:54:50 -0800 |
| parents | dbc0a8677b69 |
| children |
| rev | line source |
|---|---|
|
1
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This library module implements a function that helps initialize |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * sockaddr for bind or connect operations on UNIX domain sockets. |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * Back when I programmed under 4.3BSD UNIX, this operation was simple |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * and straightforward - but under "modern" Unixes, it appears to be |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * a complex affair, given the messy code (originally copied from |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 * Osmocom) that appears in FreeCalypso host tools for the rvinterf |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * local socket interface. Hence I am factoring that mess out into |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * its own library function this time around. |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 */ |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <sys/types.h> |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <sys/socket.h> |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <sys/un.h> |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include <string.h> |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #include <strings.h> |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 void |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 fill_sockaddr_un(pathname, sunp, lenp) |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 char *pathname; |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 struct sockaddr_un *sunp; |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 unsigned *lenp; |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 { |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 /* local socket binding voodoo copied from osmocon */ |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 sunp->sun_family = AF_UNIX; |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 strncpy(sunp->sun_path, pathname, sizeof(sunp->sun_path)); |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 sunp->sun_path[sizeof(sunp->sun_path) - 1] = '\0'; |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 /* we use the same magic that X11 uses in Xtranssock.c for |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 * calculating the proper length of the sockaddr */ |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #if defined(BSD44SOCKETS) || defined(__UNIXWARE__) |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 sunp->sun_len = strlen(sunp->sun_path); |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #endif |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #if defined(BSD44SOCKETS) || defined(SUN_LEN) |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 *lenp = SUN_LEN(sunp); |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #else |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 *lenp = strlen(sunp->sun_path) + |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 offsetof(struct sockaddr_un, sun_path) + 1; |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 #endif |
|
dbc0a8677b69
libutil: import from ThemWi1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 } |
