Exemplo n.º 1
0
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;
	}
}