The ipc-modem tool contained commented code to call a specific
phone number.

This patch reuses that code and retrieve the number to call from
the command line.

The number to call is expected to be in the same country as the
caller SIM card and network. Adding support for international
calls could be done by computing the right prefix instead of
hardcoding the IPC_CALL_PREFIX_NONE prefix.

Signed-off-by: Denis 'GNUtoo' Carikli <gnu...@cyberdimension.org>
---
 tools/ipc-modem.c | 37 +++++++++++++++++++++++++++----------
 1 file changed, 27 insertions(+), 10 deletions(-)

diff --git a/tools/ipc-modem.c b/tools/ipc-modem.c
index 2b19f57..cc53749 100644
--- a/tools/ipc-modem.c
+++ b/tools/ipc-modem.c
@@ -40,14 +40,13 @@
 #define MODEM_STATE_NORMAL  2
 #define MODEM_STATE_SIM_OK  4
 
-#define DEF_CALL_NUMBER "950"
-
 int state = MODEM_STATE_LPM;
 int seq;
 int in_call;
 int out_call;
 int call_done;
 
+char call_number[14];
 char sim_pin[8];
 
 int seq_get(void)
@@ -93,6 +92,7 @@ void modem_snd_audio_path_ctrl(struct ipc_client *client)
 }
 
 
+
 void modem_exec_call_out(struct ipc_client *client, char *num)
 {
        struct ipc_call_outgoing_data call_out;
@@ -104,6 +104,7 @@ void modem_exec_call_out(struct ipc_client *client, char 
*num)
        call_out.type = IPC_CALL_TYPE_VOICE;
        call_out.identity = IPC_CALL_IDENTITY_DEFAULT;
        call_out.number_length = strlen(num);
+       /* TODO: Add support for prefixes */
        /* 0x21 = +33 */
        call_out.prefix = IPC_CALL_PREFIX_NONE; //0x21;//IPC_CALL_PREFIX_NONE;
        memcpy(call_out.number, num, call_out.number_length);
@@ -339,14 +340,12 @@ void modem_response_net(__attribute__((unused)) struct 
ipc_client *client,
                printf("[6] Registered with network! "
                       "Got PLMN (Mobile Network Code): '%s'\n",
                       mnc);
-               /*
-                * if (call_done == 0)
-                * {
-                * printf("Requesting outgoing call to %s!\n", DEF_CALL_NUMBER);
-                * modem_exec_call_out(client, DEF_CALL_NUMBER);
-                * }
-                * call_done = 1;
-                */
+               if (call_done == 0) {
+                       printf("Requesting outgoing call to %s!\n",
+                              call_number);
+                       modem_exec_call_out(client, call_number);
+               }
+               call_done = 1;
                break;
        }
 }
@@ -477,6 +476,7 @@ void print_help(void)
        printf("arguments:\n");
        printf("\t--debug               enable debug messages\n");
        printf("\t--pin=[PIN]           provide SIM card PIN\n");
+       printf("\t--call=[NUMBER]       call NUMBER\n");
 }
 
 int main(int argc, char *argv[])
@@ -491,6 +491,7 @@ int main(int argc, char *argv[])
                {"help",    no_argument,        0,  0 },
                {"debug",   no_argument,        0,  0 },
                {"pin",     required_argument,  0,  0 },
+               {"call",    required_argument,  0,  0 },
                {0,         0,                  0,  0 }
        };
 
@@ -524,7 +525,23 @@ int main(int argc, char *argv[])
                                        printf("[E] SIM PIN is too long!\n");
                                        return 1;
                                }
+                       } else if (strcmp(opt_l[opt_i].name, "call") == 0) {
+                               if (optarg) {
+                                       if (strlen(optarg) < 14) {
+                                               assert(strlen(optarg) <
+                                                      sizeof(call_number));
+                                               printf("[I] "
+                                                      "Got call number!\n");
+                                               strcpy(call_number, optarg);
+                                       } else {
+                                               printf("[E] "
+                                                      "Call number is too 
long!"
+                                                      "\n");
+                                               return 1;
+                                       }
+                               }
                        }
+
                        break;
                }
        }
-- 
2.30.1

_______________________________________________
Replicant mailing list
Replicant@osuosl.org
https://lists.osuosl.org/mailman/listinfo/replicant

Reply via email to