private void handleMetaHandshake(ServerSessionImpl session, Mutable message, Promise<Boolean> promise) {
BayeuxContext context = message.getBayeuxContext();
if (context != null) {
session.setUserAgent(context.getHeader("User-Agent"));
}
if (_policy != null) {
_policy.canHandshake(this, session, message, Promise.from(can -> {
if (can) {
handleMetaHandshake2(session, message, promise);
} else {
ServerMessage.Mutable reply = message.getAssociated();
error(reply, "403::handshake_denied");
Map<String, Object> advice = reply.getAdvice(true);
if (!advice.containsKey(Message.RECONNECT_FIELD)) {
advice.put(Message.RECONNECT_FIELD, Message.RECONNECT_NONE_VALUE);
}
promise.succeed(false);
}
}, promise::fail));
} else {
handleMetaHandshake2(session, message, promise);
}
}