comparison sip-in/call_setup.c @ 62:75b7a7b61824

sip-in: got as far as sending MNCC_SETUP_REQ to themwi-mncc
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 17 Sep 2022 18:43:08 -0800
parents
children e5aee661e3b2
comparison
equal deleted inserted replaced
61:e12036337412 62:75b7a7b61824
1 /*
2 * In this module we implement incoming call setup toward GSM.
3 */
4
5 #include <sys/types.h>
6 #include <sys/socket.h>
7 #include <netinet/in.h>
8 #include <stdio.h>
9 #include <stdint.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include <strings.h>
13 #include <syslog.h>
14 #include "../include/mncc.h"
15 #include "../include/gsm48_const.h"
16 #include "call.h"
17
18 static void
19 fill_calling_number(from, caller)
20 char *from;
21 struct gsm_mncc_number *caller;
22 {
23 char *num;
24 int cc;
25
26 if (!strcasecmp(from, "Restricted")) {
27 caller->present = GSM48_PRES_RESTR;
28 return;
29 }
30 if (*from == '+')
31 num = from + 1;
32 else
33 num = from;
34 cc = grok_number_string(num, 0);
35 if (cc < 1 || cc > 32) {
36 /* not a valid number */
37 caller->present = GSM48_PRES_UNAVAIL;
38 return;
39 }
40 /* accept "From" user as a valid number */
41 strcpy(caller->number, num);
42 caller->plan = GSM48_NPI_ISDN_E164;
43 if (*from == '+')
44 caller->type = GSM48_TON_INTERNATIONAL;
45 }
46
47 void
48 proceed_with_call_setup(call)
49 struct call *call;
50 {
51 struct gsm_mncc setup_msg;
52
53 allocate_mncc_callref(call);
54 bzero(&setup_msg, sizeof setup_msg);
55 setup_msg.msg_type = MNCC_SETUP_REQ;
56 setup_msg.callref = call->mncc_callref;
57 /* fill called number */
58 setup_msg.called.type = GSM48_TON_INTERNATIONAL;
59 setup_msg.called.plan = GSM48_NPI_ISDN_E164;
60 setup_msg.called.number[0] = '1';
61 strcpy(setup_msg.called.number+1, call->called_nanp);
62 setup_msg.fields |= MNCC_F_CALLED;
63 /* fill calling number */
64 call->from_user[call->from_user_len] = '\0';
65 fill_calling_number(call->from_user, &setup_msg.calling);
66 call->from_user[call->from_user_len] = '@';
67 setup_msg.fields |= MNCC_F_CALLING;
68 send_mncc_to_gsm(&setup_msg, sizeof(struct gsm_mncc));
69 call->overall_state = OVERALL_STATE_CALL_GSM;
70 }