Skip to content

Commit e96ff83

Browse files
committed
added EOFPacket
1 parent dcead7d commit e96ff83

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

src/SuperSocket.MySQL/MySQLConnection.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Text;
66
using System.Threading;
77
using System.Threading.Tasks;
8+
using Microsoft.Extensions.Logging;
89
using SuperSocket.Client;
910
using SuperSocket.MySQL.Packets;
1011
using SuperSocket.ProtoBase;
@@ -23,8 +24,8 @@ public class MySQLConnection : EasyClient<MySQLPacket>
2324

2425
public bool IsAuthenticated { get; private set; }
2526

26-
public MySQLConnection(string host, int port, string userName, string password)
27-
: base(new MySQLPacketFilter(MySQLPacketDecoder.ClientInstance))
27+
public MySQLConnection(string host, int port, string userName, string password, ILogger logger = null)
28+
: base(new MySQLPacketFilter(MySQLPacketDecoder.ClientInstance), logger)
2829
{
2930
_host = host ?? throw new ArgumentNullException(nameof(host));
3031
_port = port > 0 ? port : DefaultPort;
@@ -87,6 +88,8 @@ public async Task ConnectAsync(CancellationToken cancellationToken = default)
8788
? errorPacket.ErrorMessage
8889
: "Authentication failed";
8990
throw new InvalidOperationException($"MySQL authentication failed: {errorMsg} (Error {errorPacket.ErrorCode})");
91+
case EOFPacket eofPacket:
92+
throw new InvalidOperationException($"MySQL authentication failed.");
9093
default:
9194
throw new InvalidOperationException($"Unexpected packet received during authentication: {authResult?.GetType().Name ?? "null"}");
9295
}
@@ -160,7 +163,8 @@ public async Task DisconnectAsync()
160163
{
161164
try
162165
{
163-
await CloseAsync();
166+
if (Connection != null)
167+
await CloseAsync();
164168
}
165169
finally
166170
{

src/SuperSocket.MySQL/MySQLPacketFactory.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ static MySQLPacketFactory()
1515
ClientInstance = new MySQLPacketFactory()
1616
.RegisterPacketType<HandshakePacket>(-1)
1717
.RegisterPacketType<OKPacket>(0x00)
18-
.RegisterPacketType<ErrorPacket>(0xFF);
18+
.RegisterPacketType<ErrorPacket>(0xFF)
19+
.RegisterPacketType<EOFPacket>(0xFE);
1920
}
2021

2122
private readonly Dictionary<int, Func<MySQLPacket>> _packetCreators = new();
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System;
2+
using System.Buffers;
3+
using SuperSocket.ProtoBase;
4+
5+
namespace SuperSocket.MySQL.Packets
6+
{
7+
public class EOFPacket : MySQLPacket, IPacketWithHeaderByte
8+
{
9+
public byte Header { get; set; } = 0xFE;
10+
public ushort WarningCount { get; set; }
11+
public ushort StatusFlags { get; set; }
12+
13+
protected internal override void Decode(ref SequenceReader<byte> reader, object context)
14+
{
15+
if (reader.TryReadLittleEndian(out ushort warningCount))
16+
{
17+
WarningCount = warningCount;
18+
}
19+
else
20+
{
21+
throw new InvalidOperationException("Failed to read WarningCount from EOFPacket.");
22+
}
23+
24+
if (reader.TryReadLittleEndian(out ushort statusFlags))
25+
{
26+
StatusFlags = statusFlags;
27+
}
28+
else
29+
{
30+
throw new InvalidOperationException("Failed to read StatusFlags from EOFPacket.");
31+
}
32+
}
33+
34+
protected internal override int Encode(IBufferWriter<byte> writer)
35+
{
36+
throw new NotImplementedException();
37+
}
38+
}
39+
}

0 commit comments

Comments
 (0)