package io.mycat.backend.postgresql.packet;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import io.mycat.backend.postgresql.packet.AuthenticationPacket.AuthType;
import io.mycat.backend.postgresql.utils.MD5Digest;
import io.mycat.backend.postgresql.utils.PIOUtils;
//PasswordMessage (F)
//Byte1('p')
//标识这条消息是一个口令响应。
//
//Int32
//以字节记的消息内容的长度,包括长度本身。
//
//String
//口令(如果要求了,就是加密后的)。
public class PasswordMessage extends PostgreSQLPacket {
public PasswordMessage(String user, String password, AuthType aut, byte[] salt)
throws UnsupportedEncodingException {
if (aut == AuthType.MD5Password) {
this.password = MD5Digest.encode(user.getBytes(UTF8), password.getBytes(UTF8), salt);
}
}
private char marker = PacketMarker.F_PwdMess.getValue();
private byte[] password;
@Override
public int getLength() {
return 4 + password.length;
}
@Override
public char getMarker() {
return marker;
}
public void write(ByteBuffer buffer) {
PIOUtils.SendChar(getMarker(), buffer);
PIOUtils.SendInteger4(getLength(), buffer);
PIOUtils.Send(password, buffer);
}
}