summaryrefslogtreecommitdiff
path: root/src/util/pin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/pin.c')
-rw-r--r--src/util/pin.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/util/pin.c b/src/util/pin.c
new file mode 100644
index 0000000..b855e53
--- /dev/null
+++ b/src/util/pin.c
@@ -0,0 +1,39 @@
+#include <stdio.h>
+#include <string.h>
+
+#include <libgsmd/libgsmd.h>
+#include <libgsmd/event.h>
+
+#define PIN_SIZE 32
+
+static char *pin;
+static char pinbuf[PIN_SIZE+1];
+
+static int pin_handler(struct lgsm_handle *lh, int evt, struct gsmd_evt_auxdata *aux)
+{
+ int rc;
+
+ printf("EVENT: PIN request (type=%u) ", aux->u.pin.type);
+
+ /* FIXME: read pin from STDIN and send it back via lgsm_pin */
+ if (aux->u.pin.type == 1 && pin) {
+ printf("Auto-responding with pin `%s'\n", pin);
+ lgsm_pin(lh, pin);
+ } else {
+ do {
+ printf("Please enter PIN: ");
+ rc = fscanf(stdin, "%32s\n", &pinbuf);
+ } while (rc < 1);
+
+ return lgsm_pin(lh, pinbuf);
+ }
+
+ return 0;
+}
+
+int pin_init(struct lgsm_handle *lh, const char *pin_preset)
+{
+ pin = pin_preset;
+ return lgsm_evt_handler_register(lh, GSMD_EVT_PIN, &pin_handler);
+}
+
personal git repositories of Harald Welte. Your mileage may vary