in openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KurentoHandler.java [340:380]
JSONArray getTurnServers(Client c, final boolean test) {
JSONArray arr = new JSONArray();
if (!Strings.isEmpty(turnUrl)) {
try {
JSONObject turn = new JSONObject();
if ("rest".equalsIgnoreCase(turnMode)) {
Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(new SecretKeySpec(turnSecret.getBytes(), HMAC_SHA1_ALGORITHM));
StringBuilder user = new StringBuilder()
.append((test ? 60 : turnTtl * 60) + System.currentTimeMillis() / 1000L);
final String uid = c == null ? null : c.getUid();
if (!Strings.isEmpty(uid)) {
user.append(':').append(uid);
} else if (!Strings.isEmpty(turnUser)) {
user.append(':').append(turnUser);
}
turn.put("username", user)
.put("credential", Base64.getEncoder().encodeToString(mac.doFinal(user.toString().getBytes())));
} else {
turn.put("username", turnUser)
.put("credential", turnSecret);
}
JSONArray urls = new JSONArray();
final String[] turnUrls = turnUrl.split(",");
for (String url : turnUrls) {
if (url.startsWith("stun:") || url.startsWith("stuns:") || url.startsWith("turn:") || url.startsWith("turns:")) {
urls.put(url);
} else {
urls.put("turn:" + url);
}
}
turn.put("urls", urls);
arr.put(turn);
} catch (NoSuchAlgorithmException|InvalidKeyException e) {
log.error("Unexpected error while creating turn", e);
}
}
return arr;
}