@@ -185,7 +185,7 @@ public void FinishQuerying()
185
185
var payload = QueryPayload . Create ( "DO SLEEP(0);" ) ;
186
186
SendAsync ( payload , IOBehavior . Synchronous , CancellationToken . None ) . GetAwaiter ( ) . GetResult ( ) ;
187
187
payload = ReceiveReplyAsync ( IOBehavior . Synchronous , CancellationToken . None ) . GetAwaiter ( ) . GetResult ( ) ;
188
- OkPayload . Create ( payload ) ;
188
+ OkPayload . Create ( payload . AsSpan ( ) ) ;
189
189
}
190
190
191
191
lock ( m_lock )
@@ -286,7 +286,7 @@ public async Task ConnectAsync(ConnectionSettings cs, ILoadBalancer loadBalancer
286
286
m_payloadHandler = new StandardPayloadHandler ( byteHandler ) ;
287
287
288
288
payload = await ReceiveAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
289
- initialHandshake = InitialHandshakePayload . Create ( payload ) ;
289
+ initialHandshake = InitialHandshakePayload . Create ( payload . AsSpan ( ) ) ;
290
290
291
291
// if PluginAuth is supported, then use the specified auth plugin; else, fall back to protocol capabilities to determine the auth type to use
292
292
string authPluginName ;
@@ -361,7 +361,7 @@ public async Task ConnectAsync(ConnectionSettings cs, ILoadBalancer loadBalancer
361
361
payload = await SwitchAuthenticationAsync ( cs , payload , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
362
362
}
363
363
364
- OkPayload . Create ( payload ) ;
364
+ OkPayload . Create ( payload . AsSpan ( ) ) ;
365
365
366
366
if ( m_useCompression )
367
367
m_payloadHandler = new CompressedPayloadHandler ( m_payloadHandler . ByteHandler ) ;
@@ -396,12 +396,12 @@ public async Task<bool> TryResetConnectionAsync(ConnectionSettings cs, IOBehavio
396
396
Log . Debug ( "Session{0} ServerVersion={1} supports reset connection; sending reset connection request" , m_logArguments ) ;
397
397
await SendAsync ( ResetConnectionPayload . Instance , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
398
398
var payload = await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
399
- OkPayload . Create ( payload ) ;
399
+ OkPayload . Create ( payload . AsSpan ( ) ) ;
400
400
401
401
// the "reset connection" packet also resets the connection charset, so we need to change that back to our default
402
402
await SendAsync ( s_setNamesUtf8mb4Payload , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
403
403
payload = await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
404
- OkPayload . Create ( payload ) ;
404
+ OkPayload . Create ( payload . AsSpan ( ) ) ;
405
405
}
406
406
else
407
407
{
@@ -426,7 +426,7 @@ public async Task<bool> TryResetConnectionAsync(ConnectionSettings cs, IOBehavio
426
426
Log . Debug ( "Session{0} optimistic reauthentication failed; logging in again" , m_logArguments ) ;
427
427
payload = await SwitchAuthenticationAsync ( cs , payload , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
428
428
}
429
- OkPayload . Create ( payload ) ;
429
+ OkPayload . Create ( payload . AsSpan ( ) ) ;
430
430
}
431
431
432
432
return true ;
@@ -446,7 +446,7 @@ public async Task<bool> TryResetConnectionAsync(ConnectionSettings cs, IOBehavio
446
446
private async Task < PayloadData > SwitchAuthenticationAsync ( ConnectionSettings cs , PayloadData payload , IOBehavior ioBehavior , CancellationToken cancellationToken )
447
447
{
448
448
// if the server didn't support the hashed password; rehash with the new challenge
449
- var switchRequest = AuthenticationMethodSwitchRequestPayload . Create ( payload ) ;
449
+ var switchRequest = AuthenticationMethodSwitchRequestPayload . Create ( payload . AsSpan ( ) ) ;
450
450
m_logArguments [ 1 ] = switchRequest . Name ;
451
451
Log . Debug ( "Session{0} switching to AuthenticationMethod '{1}'" , m_logArguments ) ;
452
452
switch ( switchRequest . Name )
@@ -475,10 +475,10 @@ private async Task<PayloadData> SwitchAuthenticationAsync(ConnectionSettings cs,
475
475
payload = await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
476
476
477
477
// OK payload can be sent immediately (e.g., if password is empty( (short-circuiting the )
478
- if ( OkPayload . IsOk ( payload , SupportsDeprecateEof ) )
478
+ if ( OkPayload . IsOk ( payload . AsSpan ( ) , SupportsDeprecateEof ) )
479
479
return payload ;
480
480
481
- var cachingSha2ServerResponsePayload = CachingSha2ServerResponsePayload . Create ( payload ) ;
481
+ var cachingSha2ServerResponsePayload = CachingSha2ServerResponsePayload . Create ( payload . AsSpan ( ) ) ;
482
482
if ( cachingSha2ServerResponsePayload . Succeeded )
483
483
return await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
484
484
@@ -585,7 +585,7 @@ private async Task<string> GetRsaPublicKeyAsync(string switchRequestName, Connec
585
585
var payloadContent = switchRequestName == "caching_sha2_password" ? ( byte ) 0x02 : ( byte ) 0x01 ;
586
586
await SendReplyAsync ( new PayloadData ( new [ ] { payloadContent } ) , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
587
587
var payload = await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
588
- var publicKeyPayload = AuthenticationMoreDataPayload . Create ( payload ) ;
588
+ var publicKeyPayload = AuthenticationMoreDataPayload . Create ( payload . AsSpan ( ) ) ;
589
589
return Encoding . ASCII . GetString ( publicKeyPayload . Data ) ;
590
590
}
591
591
@@ -604,7 +604,7 @@ public async ValueTask<bool> TryPingAsync(IOBehavior ioBehavior, CancellationTok
604
604
Log . Debug ( "Session{0} pinging server" , m_logArguments ) ;
605
605
await SendAsync ( PingPayload . Instance , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
606
606
var payload = await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
607
- OkPayload . Create ( payload ) ;
607
+ OkPayload . Create ( payload . AsSpan ( ) ) ;
608
608
Log . Info ( "Session{0} successfully pinged server" , m_logArguments ) ;
609
609
return true ;
610
610
}
@@ -658,7 +658,7 @@ public ValueTask<PayloadData> ReceiveReplyAsync(IOBehavior ioBehavior, Cancellat
658
658
if ( payload . HeaderByte != ErrorPayload . Signature )
659
659
return new ValueTask < PayloadData > ( payload ) ;
660
660
661
- var exception = CreateExceptionForErrorPayload ( payload ) ;
661
+ var exception = CreateExceptionForErrorPayload ( payload . AsSpan ( ) ) ;
662
662
return ValueTaskExtensions . FromException < PayloadData > ( exception ) ;
663
663
}
664
664
@@ -1140,27 +1140,27 @@ private async Task GetRealServerDetailsAsync(IOBehavior ioBehavior, Cancellation
1140
1140
if ( ! SupportsDeprecateEof )
1141
1141
{
1142
1142
payload = await ReceiveReplyAsync ( ioBehavior , CancellationToken . None ) . ConfigureAwait ( false ) ;
1143
- EofPayload . Create ( payload ) ;
1143
+ EofPayload . Create ( payload . AsSpan ( ) ) ;
1144
1144
}
1145
1145
1146
1146
// first (and only) row
1147
1147
payload = await ReceiveReplyAsync ( ioBehavior , CancellationToken . None ) . ConfigureAwait ( false ) ;
1148
- void ReadRow ( ArraySegment < byte > arraySegment , out int ? connectionId_ , out string serverVersion_ )
1148
+ void ReadRow ( ReadOnlySpan < byte > span , out int ? connectionId_ , out string serverVersion_ )
1149
1149
{
1150
- var reader = new ByteArrayReader ( arraySegment ) ;
1150
+ var reader = new ByteArrayReader ( span ) ;
1151
1151
var length = reader . ReadLengthEncodedIntegerOrNull ( ) ;
1152
1152
connectionId_ = ( length != - 1 && Utf8Parser . TryParse ( reader . ReadByteString ( length ) , out int id , out _ ) ) ? id : default ( int ? ) ;
1153
1153
length = reader . ReadLengthEncodedIntegerOrNull ( ) ;
1154
1154
serverVersion_ = length != - 1 ? Encoding . UTF8 . GetString ( reader . ReadByteString ( length ) ) : null ;
1155
1155
}
1156
- ReadRow ( payload . ArraySegment , out var connectionId , out var serverVersion ) ;
1156
+ ReadRow ( payload . AsSpan ( ) , out var connectionId , out var serverVersion ) ;
1157
1157
1158
1158
// OK/EOF payload
1159
1159
payload = await ReceiveReplyAsync ( ioBehavior , CancellationToken . None ) . ConfigureAwait ( false ) ;
1160
- if ( OkPayload . IsOk ( payload , SupportsDeprecateEof ) )
1161
- OkPayload . Create ( payload , SupportsDeprecateEof ) ;
1160
+ if ( OkPayload . IsOk ( payload . AsSpan ( ) , SupportsDeprecateEof ) )
1161
+ OkPayload . Create ( payload . AsSpan ( ) , SupportsDeprecateEof ) ;
1162
1162
else
1163
- EofPayload . Create ( payload ) ;
1163
+ EofPayload . Create ( payload . AsSpan ( ) ) ;
1164
1164
1165
1165
if ( connectionId . HasValue && serverVersion != null )
1166
1166
{
@@ -1241,7 +1241,7 @@ private PayloadData TryAsyncContinuation(Task<ArraySegment<byte>> task)
1241
1241
}
1242
1242
var payload = new PayloadData ( bytes ) ;
1243
1243
if ( payload . HeaderByte == ErrorPayload . Signature )
1244
- throw CreateExceptionForErrorPayload ( payload ) ;
1244
+ throw CreateExceptionForErrorPayload ( payload . AsSpan ( ) ) ;
1245
1245
return payload ;
1246
1246
}
1247
1247
@@ -1337,9 +1337,9 @@ private byte[] CreateConnectionAttributes(string programName)
1337
1337
}
1338
1338
}
1339
1339
1340
- private Exception CreateExceptionForErrorPayload ( PayloadData payload )
1340
+ private Exception CreateExceptionForErrorPayload ( ReadOnlySpan < byte > span )
1341
1341
{
1342
- var errorPayload = ErrorPayload . Create ( payload ) ;
1342
+ var errorPayload = ErrorPayload . Create ( span ) ;
1343
1343
var exception = errorPayload . ToException ( ) ;
1344
1344
Log . Error ( exception , "Session{0} got error payload: Code={1}, State={2}, Message={3}" , m_logArguments [ 0 ] , errorPayload . ErrorCode , errorPayload . State , errorPayload . Message ) ;
1345
1345
return exception ;
0 commit comments