summaryrefslogtreecommitdiff
path: root/kms++util/src/helpers.cpp
blob: 2bf3a4fdce028273741cf42110938f66255108ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <kms++util/kms++util.h>

using namespace std;

namespace kms {

Connector* resolve_connector(Card& card, const string& str)
{
	if (str.length() == 0)
		return nullptr;

	auto connectors = card.get_connectors();

	if (str[0] == '@') {
		char* endptr;
		unsigned id = strtoul(str.c_str() + 1, &endptr, 10);
		if (*endptr == 0) {
			Connector* c = card.get_connector(id);
			if (!c)
				return nullptr;
			else
				return c;
		}
	} else {
		char* endptr;
		unsigned idx = strtoul(str.c_str(), &endptr, 10);
		if (*endptr == 0) {
			if (idx >= connectors.size())
				return nullptr;
			else
				return connectors[idx];
		}
	}

	for (Connector* conn : connectors) {
		if (to_lower(conn->fullname()).find(to_lower(str)) != string::npos)
			return conn;
	}

	return nullptr;
}

}