Changeset 3545
- Timestamp:
- 12/01/07 02:55:39 (5 years ago)
- Location:
- trunk/src/target/gsm
- Files:
-
- 8 edited
-
include/gsmd/unsolicited.h (modified) (1 diff)
-
include/libgsmd/pin.h (modified) (1 diff)
-
src/gsmd/unsolicited.c (modified) (3 diffs)
-
src/gsmd/usock.c (modified) (3 diffs)
-
src/libgsmd/libgsmd_pin.c (modified) (3 diffs)
-
src/util/pin.c (modified) (3 diffs)
-
src/util/shell.c (modified) (3 diffs)
-
src/util/shell.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/target/gsm/include/gsmd/unsolicited.h
r2712 r3545 16 16 extern int unsolicited_register_array(const struct gsmd_unsolicit *arr, 17 17 int len); 18 extern const int pintype_from_cme[]; 18 19 19 20 #endif /* __GSMD__ */ -
trunk/src/target/gsm/include/libgsmd/pin.h
r1314 r3545 4 4 extern const char *lgsm_pin_name(enum gsmd_pin_type ptype); 5 5 6 extern int lgsm_pin(struct lgsm_handle *lh, unsigned int type, char *pin, char *newpin); 6 extern int lgsm_pin(struct lgsm_handle *lh, unsigned int type, 7 const char *pin, const char *newpin); 7 8 8 9 #endif -
trunk/src/target/gsm/src/gsmd/unsolicited.c
r3390 r3545 488 488 } 489 489 490 const int pintype_from_cme[GSM0707_CME_UNKNOWN] = { 491 [GSM0707_CME_PH_SIM_PIN_REQUIRED] = GSMD_PIN_PH_SIM_PIN, 492 [GSM0707_CME_PH_FSIM_PIN_REQUIRED] = GSMD_PIN_PH_FSIM_PIN, 493 [GSM0707_CME_PH_FSIM_PUK_REQUIRED] = GSMD_PIN_PH_FSIM_PUK, 494 [GSM0707_CME_SIM_PIN_REQUIRED] = GSMD_PIN_SIM_PIN, 495 [GSM0707_CME_SIM_PUK_REQUIRED] = GSMD_PIN_SIM_PUK, 496 [GSM0707_CME_SIM_PIN2_REQUIRED] = GSMD_PIN_SIM_PIN2, 497 [GSM0707_CME_SIM_PUK2_REQUIRED] = GSMD_PIN_SIM_PUK2, 498 [GSM0707_CME_NETPERS_PIN_REQUIRED] = GSMD_PIN_PH_NET_PIN, 499 [GSM0707_CME_NETPERS_PUK_REQUIRED] = GSMD_PIN_PH_NET_PUK, 500 [GSM0707_CME_NETSUBSET_PIN_REQUIRED] = GSMD_PIN_PH_NETSUB_PIN, 501 [GSM0707_CME_NETSUBSET_PUK_REQUIRED] = GSMD_PIN_PH_NETSUB_PUK, 502 [GSM0707_CME_PROVIDER_PIN_REQUIRED] = GSMD_PIN_PH_SP_PIN, 503 [GSM0707_CME_PROVIDER_PUK_REQUIRED] = GSMD_PIN_PH_SP_PUK, 504 [GSM0707_CME_CORPORATE_PIN_REQUIRED] = GSMD_PIN_PH_CORP_PIN, 505 [GSM0707_CME_CORPORATE_PUK_REQUIRED] = GSMD_PIN_PH_CORP_PUK, 506 /* FIXME: */ 507 [GSM0707_CME_SIM_FAILURE] = 0, 508 [GSM0707_CME_SIM_BUSY] = 0, 509 [GSM0707_CME_SIM_WRONG] = 0, 510 [GSM0707_CME_MEMORY_FULL] = 0, 511 [GSM0707_CME_MEMORY_FAILURE] = 0, 512 [GSM0707_CME_PHONE_FAILURE] = 0, 513 [GSM0707_CME_PHONE_NOCONNECT] = 0, 514 [GSM0707_CME_PHONE_ADAPT_RESERVED] = 0, 515 [GSM0707_CME_SIM_NOT_INSERTED] = 0, 516 }; 517 490 518 int generate_event_from_cme(struct gsmd *g, unsigned int cme_error) 491 519 { … … 493 521 struct gsmd_evt_auxdata *eaux; 494 522 495 if (!is_in_array(cme_error, errors_creating_events,523 if (!is_in_array(cme_error, errors_creating_events, 496 524 ARRAY_SIZE(errors_creating_events))) { 497 525 … … 502 530 eaux->u.cme_err.number = cme_error; 503 531 return usock_evt_send(g, gu, GSMD_EVT_IN_ERROR); 504 } 505 else { 506 gu = usock_build_event(GSMD_MSG_EVENT, GSMD_EVT_PIN, sizeof(*eaux)); 532 } else { 533 if (cme_error >= GSM0707_CME_UNKNOWN || 534 !pintype_from_cme[cme_error]) 535 return 0; 536 537 gu = usock_build_event(GSMD_MSG_EVENT, GSMD_EVT_PIN, 538 sizeof(*eaux)); 507 539 if (!gu) 508 540 return -1; 541 509 542 eaux = ((void *)gu) + sizeof(*gu); 510 511 switch (cme_error) { 512 case GSM0707_CME_PH_SIM_PIN_REQUIRED: 513 eaux->u.pin.type = GSMD_PIN_PH_SIM_PIN; 514 break; 515 case GSM0707_CME_PH_FSIM_PIN_REQUIRED: 516 eaux->u.pin.type = GSMD_PIN_PH_FSIM_PIN; 517 break; 518 case GSM0707_CME_PH_FSIM_PUK_REQUIRED: 519 eaux->u.pin.type = GSMD_PIN_PH_FSIM_PUK; 520 break; 521 case GSM0707_CME_SIM_PIN_REQUIRED: 522 eaux->u.pin.type = GSMD_PIN_SIM_PIN; 523 break; 524 case GSM0707_CME_SIM_PUK_REQUIRED: 525 eaux->u.pin.type = GSMD_PIN_SIM_PUK; 526 break; 527 case GSM0707_CME_SIM_PIN2_REQUIRED: 528 eaux->u.pin.type = GSMD_PIN_SIM_PIN2; 529 break; 530 case GSM0707_CME_SIM_PUK2_REQUIRED: 531 eaux->u.pin.type = GSMD_PIN_SIM_PUK2; 532 break; 533 case GSM0707_CME_NETPERS_PIN_REQUIRED: 534 eaux->u.pin.type = GSMD_PIN_PH_NET_PIN; 535 break; 536 case GSM0707_CME_NETPERS_PUK_REQUIRED: 537 eaux->u.pin.type = GSMD_PIN_PH_NET_PUK; 538 break; 539 case GSM0707_CME_NETSUBSET_PIN_REQUIRED: 540 eaux->u.pin.type = GSMD_PIN_PH_NETSUB_PIN; 541 break; 542 case GSM0707_CME_NETSUBSET_PUK_REQUIRED: 543 eaux->u.pin.type = GSMD_PIN_PH_NETSUB_PUK; 544 break; 545 case GSM0707_CME_PROVIDER_PIN_REQUIRED: 546 eaux->u.pin.type = GSMD_PIN_PH_SP_PIN; 547 break; 548 case GSM0707_CME_PROVIDER_PUK_REQUIRED: 549 eaux->u.pin.type = GSMD_PIN_PH_SP_PUK; 550 break; 551 case GSM0707_CME_CORPORATE_PIN_REQUIRED: 552 eaux->u.pin.type = GSMD_PIN_PH_CORP_PIN; 553 break; 554 case GSM0707_CME_CORPORATE_PUK_REQUIRED: 555 eaux->u.pin.type = GSMD_PIN_PH_CORP_PUK; 556 break; 557 558 case GSM0707_CME_SIM_FAILURE: 559 case GSM0707_CME_SIM_BUSY: 560 case GSM0707_CME_SIM_WRONG: 561 case GSM0707_CME_MEMORY_FULL: 562 case GSM0707_CME_MEMORY_FAILURE: 563 case GSM0707_CME_PHONE_FAILURE: 564 case GSM0707_CME_PHONE_NOCONNECT: 565 case GSM0707_CME_PHONE_ADAPT_RESERVED: 566 case GSM0707_CME_SIM_NOT_INSERTED: 567 /* FIXME */ 568 talloc_free(gu); 569 return 0; 570 break; 571 default: 572 talloc_free(gu); 573 return 0; 574 break; 575 } 543 eaux->u.pin.type = pintype_from_cme[cme_error]; 576 544 return usock_evt_send(g, gu, GSMD_EVT_PIN); 577 545 } -
trunk/src/target/gsm/src/gsmd/usock.c
r3544 r3545 186 186 static int pin_cmd_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp) 187 187 { 188 gsmd_log(GSMD_DEBUG, "pin cmd cb\n"); 189 190 /* We need to verify if there is some error */ 191 switch (cmd->ret) { 192 case 0: 193 break; 194 case GSM0707_CME_INCORRECT_PASSWORD: 195 /* prompt for pin again */ 196 break; 197 default: 198 /* something went wrong */ 199 break; 200 } 188 struct gsmd_user *gu = ctx; 189 struct gsmd_ucmd *ucmd = gsmd_ucmd_fill(sizeof(int), GSMD_MSG_PIN, 190 GSMD_PIN_INPUT, 0); 191 192 if (!ucmd) 193 return -ENOMEM; 194 195 /* Pass a GSM07.07 CME code directly, don't issue a new PIN 196 * request because the client waits for a response to her 197 * PIN submission rather than an event. */ 198 ((int *) ucmd->buf)[0] = cmd->ret; 199 usock_cmd_enqueue(ucmd, gu); 201 200 return 0; 202 201 } … … 410 409 if (!ucmd) 411 410 return NULL; 412 411 413 412 ucmd->hdr.version = GSMD_PROTO_VERSION; 414 413 ucmd->hdr.msg_type = msg_type; … … 652 651 num->name[len] = 0; 653 652 num->addr.type = type; 654 num->is_last = (cmd->ret == 0 , NULL);653 num->is_last = (cmd->ret == 0); 655 654 656 655 usock_cmd_enqueue(ucmd, gu); -
trunk/src/target/gsm/src/libgsmd/libgsmd_pin.c
r3497 r3545 56 56 } 57 57 58 int lgsm_pin(struct lgsm_handle *lh, unsigned int type, char *pin, char *newpin) 58 int lgsm_pin(struct lgsm_handle *lh, unsigned int type, 59 const char *pin, const char *newpin) 59 60 { 60 61 int rc; … … 75 76 76 77 gm->gp.type = type; 77 78 gm->gp.pin[0] = '\0'; 79 strcat(gm->gp.pin, pin); 78 strcpy(gm->gp.pin, pin); 80 79 81 80 switch (type) { … … 85 84 * require a new pin to be specified! Don't know if this is a 86 85 * bug or a feature. */ 87 if (!newpin) 86 if (!newpin) { 87 free(gm); 88 88 return -EINVAL; 89 gm->gp.newpin[0] = '\0';90 strc at(gm->gp.newpin, newpin);89 } 90 strcpy(gm->gp.newpin, newpin); 91 91 break; 92 92 default: -
trunk/src/target/gsm/src/util/pin.c
r1314 r3545 28 28 #include <libgsmd/pin.h> 29 29 30 #include "shell.h" 31 30 32 #define PIN_SIZE 8 31 33 32 static c har *pin;34 static const char *pin; 33 35 static char pinbuf[PIN_SIZE+1]; 34 36 static char pinbuf2[PIN_SIZE+1]; 35 37 36 static int pin_handler(struct lgsm_handle *lh, int evt, struct gsmd_evt_auxdata *aux) 38 static int pin_handler(struct lgsm_handle *lh, 39 int evt, struct gsmd_evt_auxdata *aux) 37 40 { 38 41 int rc; … … 40 43 char *newpin = NULL; 41 44 42 printf("EVENT: PIN request (type='%s') ", lgsm_pin_name( aux->u.pin.type));45 printf("EVENT: PIN request (type='%s') ", lgsm_pin_name(type)); 43 46 44 47 /* FIXME: read pin from STDIN and send it back via lgsm_pin */ 45 48 if (type == 1 && pin) { 46 49 printf("Auto-responding with pin `%s'\n", pin); 47 lgsm_pin(lh, type, pin, NULL); 50 pending_responses ++; 51 return lgsm_pin(lh, type, pin, NULL); 48 52 } else { 49 53 do { … … 65 69 } 66 70 71 pending_responses ++; 67 72 return lgsm_pin(lh, type, pinbuf, newpin); 68 73 } 69 70 return 0;71 74 } 72 75 -
trunk/src/target/gsm/src/util/shell.c
r3544 r3545 45 45 static int nREADRG = 0; 46 46 47 staticint pending_responses = 0;47 int pending_responses = 0; 48 48 49 49 /* this is the handler for receiving passthrough responses */ … … 373 373 return 0; 374 374 } 375 376 static int pin_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh) 377 { 378 int result = *(int *) gmh->data; 379 380 if (result) 381 printf("PIN error %i\n", result); 382 else 383 printf("PIN accepted!\n"); 384 pending_responses --; 385 return 0; 386 } 387 388 static const struct msghandler_s { 389 int type; 390 lgsm_msg_handler *fn; 391 } msghandlers[] = { 392 { GSMD_MSG_PASSTHROUGH, pt_msghandler }, 393 { GSMD_MSG_PHONEBOOK, pb_msghandler }, 394 { GSMD_MSG_SMS, sms_msghandler }, 395 { GSMD_MSG_NETWORK, net_msghandler }, 396 { GSMD_MSG_PHONE, phone_msghandler }, 397 { GSMD_MSG_PIN, pin_msghandler }, 398 399 { 0, 0 } 400 }; 375 401 376 402 static int shell_help(void) … … 425 451 char *ptr, *fcomma, *lcomma; 426 452 int gsm_fd = lgsm_fd(lgsmh); 427 428 lgsm_register_handler(lgsmh, GSMD_MSG_PASSTHROUGH, &pt_msghandler); 429 lgsm_register_handler(lgsmh, GSMD_MSG_PHONEBOOK, &pb_msghandler); 430 lgsm_register_handler(lgsmh, GSMD_MSG_SMS, &sms_msghandler); 431 lgsm_register_handler(lgsmh, GSMD_MSG_NETWORK, &net_msghandler); 432 lgsm_register_handler(lgsmh, GSMD_MSG_PHONE, &phone_msghandler); 453 const struct msghandler_s *hndl; 454 455 for (hndl = msghandlers; hndl->fn; hndl ++) 456 lgsm_register_handler(lgsmh, hndl->type, hndl->fn); 433 457 434 458 fcntl(0, F_SETFD, O_NONBLOCK); -
trunk/src/target/gsm/src/util/shell.h
r3448 r3545 1 2 1 extern int shell_main(struct lgsm_handle *lgsmh, int sync); 2 extern int pending_responses;
Note: See TracChangeset
for help on using the changeset viewer.
