From fd3fcddc07b73fa7adc0ff58f768f13bc8b23b6c Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Tue, 30 Jan 2024 21:31:46 +0100 Subject: [PATCH] FuVst: Add security code and card reader type to database --- src/fuvst/fuvst.c | 16 +++++++++------- src/fuvst/mup.c | 8 ++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/fuvst/fuvst.c b/src/fuvst/fuvst.c index bac0f86..f23b562 100755 --- a/src/fuvst/fuvst.c +++ b/src/fuvst/fuvst.c @@ -306,6 +306,7 @@ typedef struct cnetz_database { uint8_t futln_fuvst; uint16_t futln_rest; uint8_t chip; + int32_t sicherungscode; } cnetz_db_t; static cnetz_db_t *cnetz_db_head; @@ -362,7 +363,7 @@ static void flush_db(void) } } -static void add_db(uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest, uint8_t chip) +static void add_db(uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest, uint8_t chip, int32_t sicherungscode) { cnetz_db_t *db, **dbp; @@ -380,8 +381,9 @@ static void add_db(uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest, db->futln_fuvst = futln_fuvst; db->futln_rest = futln_rest; db->chip = chip; + db->sicherungscode = sicherungscode; - LOGP(DDB, LOGL_INFO, "Adding subscriber '%d,%d,%d' to database.\n", db->futln_nat, db->futln_fuvst, db->futln_rest); + LOGP(DDB, LOGL_INFO, "Adding subscriber '%d,%d,%d' to database. (reader=%s, sicherungs-code=%d)\n", db->futln_nat, db->futln_fuvst, db->futln_rest, (db->chip) ? "chip" : "magent", db->sicherungscode); /* attach to end of list */ dbp = &cnetz_db_head; @@ -855,7 +857,7 @@ static void message_receive(fuvst_t *zzk, uint8_t ident, uint8_t opcode, uint8_t uint16_t s = 0; uint8_t u = 0, b = 0, l = 0; uint16_t T_array[3]; - uint8_t U_array[3], N_array[3], l_array[3]; + uint8_t U_array[3], N_array[3], b_array[3]; int i, num; char number[17]; @@ -930,7 +932,7 @@ static void message_receive(fuvst_t *zzk, uint8_t ident, uint8_t opcode, uint8_t break; case OPCODE_EBAF: /* enter BS (inscription) */ decode_ebaf(data, len, &T, &U, &N, &s, &u, &b, &l); - add_db(N, U, T, l); + add_db(N, U, T, b, (!l || !b) ? s : -1); console_inscription(nut2rufnummer(N, U, T)); len = encode_ebpqu(&opcode, &data); message_send(ident, opcode, data, len); @@ -1087,11 +1089,11 @@ outgoing: config_send(ident, PJ, D, L); break; case OPCODE_SADQF: /* transfer of inscription list (aktivdatei) */ - num = decode_sadqf(data, len, &s, &e, l_array, T_array, U_array, N_array); + num = decode_sadqf(data, len, &s, &e, b_array, T_array, U_array, N_array); if (s == 0) flush_db(); for (i = 0; i < num; i++) - add_db(N_array[i], U_array[i], T_array[i], l_array[i]); + add_db(N_array[i], U_array[i], T_array[i], b_array[i], -1); len = encode_ebpqu(&opcode, &data); message_send(ident, opcode, data, len); break; @@ -1454,7 +1456,7 @@ void dump_info(void) } while (db) { - LOGP(DDB, LOGL_NOTICE, " - Subscriber '%d,%d,%d' is attached.\n", db->futln_nat, db->futln_fuvst, db->futln_rest); + LOGP(DDB, LOGL_NOTICE, " - Subscriber '%d,%d,%d' (reader=%s, sicherungs-code=%d) is attached.\n", db->futln_nat, db->futln_fuvst, db->futln_rest, (db->chip) ? "chip" : "magent", db->sicherungscode); db = db->next; } } diff --git a/src/fuvst/mup.c b/src/fuvst/mup.c index d462d37..bdfc428 100755 --- a/src/fuvst/mup.c +++ b/src/fuvst/mup.c @@ -640,7 +640,7 @@ void decode_ebaf(uint8_t *data, int len, uint16_t *T, uint8_t *U, uint8_t *N, ui *b = (data[5] >> 6) & 0x1; *l = data[5] >> 7; - LOGP(DMUP, LOGL_INFO, "(BS EBAF) Einbuchauftrag: FuTln=%d,%d,%d (0161-%d%d%05d)\n", *N, *U, *T, *N, *U, *T); + LOGP(DMUP, LOGL_INFO, "(BS EBAF) Einbuchauftrag: FuTln=%d,%d,%d (0161-%d%d%05d) reader=%s\n", *N, *U, *T, *N, *U, *T, (b) ? "chip" : "magent"); } /* ack to inscription */ @@ -1108,7 +1108,7 @@ void encode_sadau(uint8_t *opcode) } /* ack "Aktivdatei" */ -int decode_sadqf(uint8_t *data, int len, uint16_t *S, uint8_t *E, uint8_t *l, uint16_t *T, uint8_t *U, uint8_t *N) +int decode_sadqf(uint8_t *data, int len, uint16_t *S, uint8_t *E, uint8_t *b, uint16_t *T, uint8_t *U, uint8_t *N) { int i, n = 0; @@ -1120,7 +1120,7 @@ int decode_sadqf(uint8_t *data, int len, uint16_t *S, uint8_t *E, uint8_t *l, ui *S = ((data[1] & 0xf) << 4) | data[0]; *E = data[1] >> 7; for (i = 0; i < 3; i++) { - l[n] = (data[1] >> (6 - i)) & 0x1; + b[n] = (data[1] >> (6 - i)) & 0x1; T[n] = (data[3 + (i * 3)] << 8) | data[2 + (i * 3)]; U[n] = data[4 + (i * 3)] & 0x1f; N[n] = data[4 + (i * 3)] >> 5; @@ -1130,7 +1130,7 @@ int decode_sadqf(uint8_t *data, int len, uint16_t *S, uint8_t *E, uint8_t *l, ui LOGP(DMUP, LOGL_INFO, "(BS SADQF) Aktivdateiquittung der BS:\n"); for (i = 0; i < n; i++) - LOGP(DMUP, LOGL_INFO, " %d: FuTln=%d,%d,%d (0161-%d%d%05d)\n", i + 1, N[i], U[i], T[i], N[i], U[i], T[i]); + LOGP(DMUP, LOGL_INFO, " %d: FuTln=%d,%d,%d (0161-%d%d%05d) reader=%s\n", i + 1, N[i], U[i], T[i], N[i], U[i], T[i], (b[i]) ? "chip" : "magent"); return n; }