rc = dissociate_channel_func (&pdu_channel, &pdu_status);
break;
case bypass_func_e:
- rc = bypass_func (&pdu_raw_data, &pdu_raw_data);
+ //rc = bypass_func (&pdu_raw_data, &pdu_raw_data);
rc = 0;
break;
case random_func_e:
return 0;
}
+void clean_all (int all)
+{
+ kill_all_subtasks (task, SIGTERM);
+ for (int i = 0; i < NBSERVICES * 2; i++) {
+ MOREP_Close (i);
+ }
+ clean_crypto_memory ();
+ if (all) {
+ if ((logfile) && (logfile != stdout)) {
+ fclose (logfile);
+ }
+ }
+}
+
/* signal handler */
void sig_handler (int sig)
{
switch (sig) {
case SIGINT:
case SIGTERM:
- kill_all_subtasks (task, SIGTERM);
- for (int i = 0; i < NBSERVICES * 2; i++) {
- MOREP_Close (i);
- }
- if ((logfile) && (logfile != stdout)) {
- fclose (logfile);
- }
+ clean_all (1);
exit (0);
break;
}
} else {
VERBOSE (crypto, WARNING, PRINTF ("can't find service '%s'\n", servname));
}
- mode = -1;
}
}
break;
case booting_e :
VERBOSE (crypto, DEBUG, PRINTF ("Rebooting\n"));
- kill_all_subtasks (task, SIGTERM);
- for (int i = 0; i < NBSERVICES * 2; i++) {
- MOREP_Close (i);
- }
- clean_crypto_memory ();
+ clean_all (0);
state = idle_e;
break;
case shutdowning_e:
}
/* cleaning */
- kill_all_subtasks (task, SIGTERM);
- for (int i = 0; i < NBSERVICES * 2; i++) {
- MOREP_Close (i);
- }
- if ((logfile) && (logfile != stdout)) {
- fclose (logfile);
- }
+ clean_all (1);
return 0;
}
uint8_t *key = keys[kid];
int klen = key_lengths[kid];
for (int i = 0; i < out->data_len; i++) {
- int a = out->data[i];
out->data[i] = (out->data[i] ^ key[i % klen]) & 0xff;
- if (i < 8) printf ("%02x%02x%02x%c", a, key[i % klen], out->data[i], (i != 7) ? '|' : '\n');
}
} else {
VERBOSE (crypto, WARNING, PRINTF ("no key associated to channel %d (%d))\n", cid, kid));