summaryrefslogtreecommitdiff
path: root/src/gsmd/usock.c
diff options
context:
space:
mode:
authortick <tick@99fdad57-331a-0410-800a-d7fa5415bdb3>2007-12-01 01:55:39 +0000
committertick <tick@99fdad57-331a-0410-800a-d7fa5415bdb3>2007-12-01 01:55:39 +0000
commitd88e15979081740b86f48a78c81df56f5122a2c4 (patch)
tree1fb1484659cb51743726501c46d0e55edfefcc79 /src/gsmd/usock.c
parentf07e7027fe91ac71a8ab760f863c3a05a1d1499d (diff)
gsmd: Submitting a PIN for authentication needs to respond with status too.(Andrzej Zaborowski)
git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@3545 99fdad57-331a-0410-800a-d7fa5415bdb3
Diffstat (limited to 'src/gsmd/usock.c')
-rw-r--r--src/gsmd/usock.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/gsmd/usock.c b/src/gsmd/usock.c
index cf3aea9..73bb3c3 100644
--- a/src/gsmd/usock.c
+++ b/src/gsmd/usock.c
@@ -185,19 +185,18 @@ static int null_cmd_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
/* PIN command callback. Gets called for response to AT+CPIN cmcd */
static int pin_cmd_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
{
- gsmd_log(GSMD_DEBUG, "pin cmd cb\n");
+ struct gsmd_user *gu = ctx;
+ struct gsmd_ucmd *ucmd = gsmd_ucmd_fill(sizeof(int), GSMD_MSG_PIN,
+ GSMD_PIN_INPUT, 0);
- /* We need to verify if there is some error */
- switch (cmd->ret) {
- case 0:
- break;
- case GSM0707_CME_INCORRECT_PASSWORD:
- /* prompt for pin again */
- break;
- default:
- /* something went wrong */
- break;
- }
+ if (!ucmd)
+ return -ENOMEM;
+
+ /* Pass a GSM07.07 CME code directly, don't issue a new PIN
+ * request because the client waits for a response to her
+ * PIN submission rather than an event. */
+ ((int *) ucmd->buf)[0] = cmd->ret;
+ usock_cmd_enqueue(ucmd, gu);
return 0;
}
@@ -409,7 +408,7 @@ struct gsmd_ucmd *gsmd_ucmd_fill(int len, u_int8_t msg_type,
ucmd = ucmd_alloc(len);
if (!ucmd)
return NULL;
-
+
ucmd->hdr.version = GSMD_PROTO_VERSION;
ucmd->hdr.msg_type = msg_type;
ucmd->hdr.msg_subtype = msg_subtype;
@@ -651,7 +650,7 @@ static int network_ownnumbers_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
num->service = GSMD_SERVICE_UNKNOWN;
num->name[len] = 0;
num->addr.type = type;
- num->is_last = (cmd->ret == 0, NULL);
+ num->is_last = (cmd->ret == 0);
usock_cmd_enqueue(ucmd, gu);
personal git repositories of Harald Welte. Your mileage may vary