int process_file(FILE* file, struct srv_connection *conn){ struct select s_val; int count[CHAR_CT]; int res; init_count(count); while(1){ if (!prepare_select(conn, &s_val)){ printf("File has processed, All clients ended"); break; } res = select(s_val.max_d+1, &(s_val.readfds), NULL, NULL, &(s_val.t)); if (res<0) { printf("err select\n"); continue; } else if (res==0){ printf("\ns timeout s\n"); continue; } process_select(conn, s_val, file, count); } print_result(count, CHAR_CT); return 0; }
void pivacy_cardemu_emulator::process_apdu(bytestring& c_apdu, bytestring& r_apdu) { if (!ui_connected) { if ((pivacy_ui_connect() != PRV_OK) && !ui_optional) { ERROR_MSG("Not connected to the UI"); r_apdu = SW_UNKNOWN_ERROR; return; } INFO_MSG("Connected to the Pivacy UI"); ui_connected = true; } if (c_apdu.size() < 4) { ERROR_MSG("Malformed command APDU of %d bytes", c_apdu.size()); r_apdu = SW_UNKNOWN_ERROR; return; } switch(c_apdu[OFS_CLA]) { case CLA_ISO: switch(c_apdu[OFS_INS]) { case INS_SELECT: process_select(c_apdu, r_apdu); break; case INS_VERIFY_PIN: process_verify_pin(c_apdu, r_apdu); break; default: r_apdu = SW_UNKNOWN_INS; break; } break; case CLA_PRIVATE: switch(c_apdu[OFS_INS]) { case INS_PROVE_CREDENTIAL: process_prove_credential(c_apdu, r_apdu); break; case INS_PROVE_COMMITMENT: process_prove_commitment(c_apdu, r_apdu); break; case INS_PROVE_SIGNATURE: process_prove_signature(c_apdu, r_apdu); break; case INS_GET_RESPONSE: process_get_response(c_apdu, r_apdu); break; default: r_apdu = SW_UNKNOWN_INS; break; } break; default: r_apdu = SW_UNKNOWN_CLA; } }