FreeCalypso > hg > themwi-system-sw
annotate sip-in/mncc_sock.c @ 56:7005d5c535e8
sip-in: mtcall socket connection implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 08 Sep 2022 13:25:31 -0800 |
parents | mncc/mncc_sock.c@ccc5ab6d8388 |
children | d61d0136f6a5 |
rev | line source |
---|---|
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
2 * In this module we implement our connection to the MNCC daemon's |
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
3 * mtcall socket. |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <sys/types.h> |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <sys/socket.h> |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <sys/un.h> |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdio.h> |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdint.h> |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <stdlib.h> |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <syslog.h> |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include "../include/mncc.h" |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
15 static char mtcall_socket_pathname[] = "/var/gsm/mtcall_socket"; |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
17 int gsm_socket, gsm_is_connected; |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
19 connect_gsm_mtcall() |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 { |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 struct sockaddr_un sa; |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 unsigned sa_len; |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 int rc; |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
25 if (gsm_is_connected) |
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
26 return(0); |
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
27 gsm_socket = socket(AF_UNIX, SOCK_SEQPACKET, 0); |
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
28 if (gsm_socket < 0) { |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 syslog(LOG_CRIT, "socket(AF_UNIX, SOCK_SEQPACKET, 0): %m"); |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 return(-1); |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 } |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
32 fill_sockaddr_un(mtcall_socket_pathname, &sa, &sa_len); |
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
33 rc = connect(gsm_socket, (struct sockaddr *) &sa, sa_len); |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 if (rc < 0) { |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
35 syslog(LOG_ERR, "connect to %s: %m", mtcall_socket_pathname); |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 return(-1); |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 } |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
38 update_max_fd(gsm_socket); |
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
39 gsm_is_connected = 1; |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 return(0); |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 } |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 void |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
44 gsm_socket_select() |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 { |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 union mncc_msg msg; |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 int rc; |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
49 rc = recv(gsm_socket, &msg, sizeof msg, 0); |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 if (rc < 0) { |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
51 syslog(LOG_CRIT, "error reading from mtcall socket: %m"); |
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
52 /* GSM disconnect handling to be implemented */ |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 exit(1); |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 } |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 if (rc < 4) { |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
56 syslog(LOG_CRIT, "short read from mtcall socket: %d bytes", rc); |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 exit(1); |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 } |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
59 /* mncc_msg_from_gsm(&msg, rc); */ |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 } |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 send_mncc_to_gsm(msg, msglen) |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 union mncc_msg *msg; |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 unsigned msglen; |
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 { |
56
7005d5c535e8
sip-in: mtcall socket connection implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
15
diff
changeset
|
66 return send(gsm_socket, msg, msglen, 0); |
15
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 } |