FuVst: Add security code and card reader type to database

This commit is contained in:
Andreas Eversberg 2024-01-30 21:31:46 +01:00
parent 2dcf10b1b1
commit fd3fcddc07
2 changed files with 13 additions and 11 deletions

View File

@ -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;
}
}

View File

@ -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;
}