SignedMessageValidator.java
net.minecraft.network.chat.SignedMessageValidator
信息
- 全限定名:net.minecraft.network.chat.SignedMessageValidator
- 类型:public interface
- 包:net.minecraft.network.chat
- 源码路径:src/main/java/net/minecraft/network/chat/SignedMessageValidator.java
- 起始行号:L10
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
package-private - 源码定位:
L11 - 说明:
TODO
- 类型:
-
ACCEPT_UNSIGNED- 类型:
SignedMessageValidator - 修饰符:
package-private - 源码定位:
L12 - 说明:
TODO
- 类型:
-
REJECT_ALL- 类型:
SignedMessageValidator - 修饰符:
package-private - 源码定位:
L13 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.network.chat.SignedMessageValidator.KeyBased- 类型:
class - 修饰符:
public static - 源码定位:
L20 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
PlayerChatMessage updateAndValidate(PlayerChatMessage message) @ L18
- 方法名:updateAndValidate
- 源码定位:L18
- 返回类型:PlayerChatMessage
- 修饰符:package-private
参数:
- message: PlayerChatMessage
说明:
TODO
代码
@FunctionalInterface
public interface SignedMessageValidator {
Logger LOGGER = LogUtils.getLogger();
SignedMessageValidator ACCEPT_UNSIGNED = PlayerChatMessage::removeSignature;
SignedMessageValidator REJECT_ALL = message -> {
LOGGER.error("Received chat message from {}, but they have no chat session initialized and secure chat is enforced", message.sender());
return null;
};
@Nullable PlayerChatMessage updateAndValidate(PlayerChatMessage message);
public static class KeyBased implements SignedMessageValidator {
private final SignatureValidator validator;
private final BooleanSupplier expired;
private @Nullable PlayerChatMessage lastMessage;
private boolean isChainValid = true;
public KeyBased(SignatureValidator validator, BooleanSupplier expired) {
this.validator = validator;
this.expired = expired;
}
private boolean validateChain(PlayerChatMessage message) {
if (message.equals(this.lastMessage)) {
return true;
} else if (this.lastMessage != null && !message.link().isDescendantOf(this.lastMessage.link())) {
LOGGER.error(
"Received out-of-order chat message from {}: expected index > {} for session {}, but was {} for session {}",
message.sender(),
this.lastMessage.link().index(),
this.lastMessage.link().sessionId(),
message.link().index(),
message.link().sessionId()
);
return false;
} else {
return true;
}
}
private boolean validate(PlayerChatMessage message) {
if (this.expired.getAsBoolean()) {
LOGGER.error("Received message with expired profile public key from {} with session {}", message.sender(), message.link().sessionId());
return false;
} else if (!message.verify(this.validator)) {
LOGGER.error(
"Received message with invalid signature (is the session wrong, or signature cache out of sync?): {}",
PlayerChatMessage.describeSigned(message)
);
return false;
} else {
return this.validateChain(message);
}
}
@Override
public @Nullable PlayerChatMessage updateAndValidate(PlayerChatMessage message) {
this.isChainValid = this.isChainValid && this.validate(message);
if (!this.isChainValid) {
return null;
} else {
this.lastMessage = message;
return message;
}
}
}
}引用的其他类
- PlayerChatMessage
- 引用位置:
参数/方法调用/返回值 - 关联成员:
PlayerChatMessage.describeSigned()
- 引用位置: