Skip to content

Smdn.Net.EchonetLite.RouteB.SkStackIP version 2.0.0-preview2

Pre-release
Pre-release
Compare
Choose a tag to compare
@smdn smdn released this 11 Dec 13:40
· 319 commits to main since this release
aaf89dd

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net6.0.apilist.cs
index b635de6..df2879e 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net6.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net6.0.apilist.cs
@@ -1,101 +1,101 @@
-// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview1)
+// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview2)
 //   Name: Smdn.Net.EchonetLite.RouteB.SkStackIP
 //   AssemblyVersion: 2.0.0.0
-//   InformationalVersion: 2.0.0-preview1+93509882219e05b5d6a8c897a8bdfee251761d59
+//   InformationalVersion: 2.0.0-preview2+4d034f0903ea62ea00625815ef039b64f3ec2917
 //   TargetFramework: .NETCoreApp,Version=v6.0
 //   Configuration: Release
 //   Referenced assemblies:
 //     Microsoft.Extensions.DependencyInjection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
 //     Smdn.Net.EchonetLite.RouteB, Version=2.0.0.0, Culture=neutral
 //     Smdn.Net.EchonetLite.Transport, Version=2.0.0.0, Culture=neutral
-//     Smdn.Net.SkStackIP, Version=1.0.0.0, Culture=neutral
+//     Smdn.Net.SkStackIP, Version=1.2.0.0, Culture=neutral
 //     System.ComponentModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.ComponentModel.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Net.NetworkInformation, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Threading, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Buffers;
 using System.ComponentModel;
 using System.Net;
 using System.Net.NetworkInformation;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Smdn.Net.EchonetLite.RouteB.Credentials;
 using Smdn.Net.EchonetLite.RouteB.Transport;
 using Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP;
 using Smdn.Net.SkStackIP;
 
 namespace Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP {
   public interface ISkStackRouteBEchonetLiteHandlerFactory : IRouteBEchonetLiteHandlerFactory {
     Action<SkStackRouteBSessionConfiguration>? ConfigureRouteBSessionConfiguration { get; set; }
   }
 
   public enum SkStackRouteBTransportProtocol : int {
     Tcp = 0,
     Udp = 1,
   }
 
   public abstract class SkStackRouteBEchonetLiteHandler : RouteBEchonetLiteHandler {
     public static readonly string ResiliencePipelineKeyForSend = "SkStackRouteBEchonetLiteHandler.resiliencePipelineSend";
 
     public override IPAddress? LocalAddress { get; }
     public override IPAddress? PeerAddress { get; }
     public override ISynchronizeInvoke? SynchronizingObject { get; set; }
 
     protected override ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken) {}
     protected override async ValueTask DisconnectAsyncCore(CancellationToken cancellationToken) {}
     protected override void Dispose(bool disposing) {}
     protected override async ValueTask DisposeAsyncCore() {}
     protected override ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken) {}
     protected override ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
     protected override ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
     [MemberNotNull("client")]
     protected override void ThrowIfDisposed() {}
   }
 
   public static class SkStackRouteBEchonetLiteHandlerBuilderExtensions {
     public static ISkStackRouteBEchonetLiteHandlerFactory ConfigureSession(this ISkStackRouteBEchonetLiteHandlerFactory factory, Action<SkStackRouteBSessionConfiguration> configureRouteBSessionConfiguration) {}
   }
 
   public abstract class SkStackRouteBEchonetLiteHandlerFactory : ISkStackRouteBEchonetLiteHandlerFactory {
     protected SkStackRouteBEchonetLiteHandlerFactory(IServiceCollection services) {}
 
     public Action<SkStackRouteBSessionConfiguration>? ConfigureRouteBSessionConfiguration { get; set; }
     protected abstract SkStackRouteBTransportProtocol TransportProtocol { get; }
 
     public virtual async ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken) {}
     protected abstract ValueTask<SkStackClient> CreateClientAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken);
   }
 
   public sealed class SkStackRouteBSessionConfiguration : ICloneable {
     public SkStackRouteBSessionConfiguration() {}
 
     public SkStackActiveScanOptions? ActiveScanOptions { get; set; }
     public SkStackChannel? Channel { get; set; }
     public IPAddress? PaaAddress { get; set; }
     public PhysicalAddress? PaaMacAddress { get; set; }
     public int? PanId { get; set; }
 
     public SkStackRouteBSessionConfiguration Clone() {}
     object ICloneable.Clone() {}
   }
 
   public sealed class SkStackRouteBTcpEchonetLiteHandler : SkStackRouteBEchonetLiteHandler {
     public SkStackRouteBTcpEchonetLiteHandler(SkStackClient client, SkStackRouteBSessionConfiguration sessionConfiguration, bool shouldDisposeClient = false, IServiceProvider? serviceProvider = null) {}
   }
 
   public sealed class SkStackRouteBUdpEchonetLiteHandler : SkStackRouteBEchonetLiteHandler {
     public SkStackRouteBUdpEchonetLiteHandler(SkStackClient client, SkStackRouteBSessionConfiguration sessionConfiguration, bool shouldDisposeClient = false, IServiceProvider? serviceProvider = null) {}
   }
 }
 // API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
 // Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net8.0.apilist.cs
index 6e971f0..6e83ac1 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net8.0.apilist.cs
@@ -1,101 +1,101 @@
-// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview1)
+// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview2)
 //   Name: Smdn.Net.EchonetLite.RouteB.SkStackIP
 //   AssemblyVersion: 2.0.0.0
-//   InformationalVersion: 2.0.0-preview1+93509882219e05b5d6a8c897a8bdfee251761d59
+//   InformationalVersion: 2.0.0-preview2+4d034f0903ea62ea00625815ef039b64f3ec2917
 //   TargetFramework: .NETCoreApp,Version=v8.0
 //   Configuration: Release
 //   Referenced assemblies:
 //     Microsoft.Extensions.DependencyInjection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
 //     Smdn.Net.EchonetLite.RouteB, Version=2.0.0.0, Culture=neutral
 //     Smdn.Net.EchonetLite.Transport, Version=2.0.0.0, Culture=neutral
-//     Smdn.Net.SkStackIP, Version=1.0.0.0, Culture=neutral
+//     Smdn.Net.SkStackIP, Version=1.2.0.0, Culture=neutral
 //     System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Net.NetworkInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Buffers;
 using System.ComponentModel;
 using System.Net;
 using System.Net.NetworkInformation;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Smdn.Net.EchonetLite.RouteB.Credentials;
 using Smdn.Net.EchonetLite.RouteB.Transport;
 using Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP;
 using Smdn.Net.SkStackIP;
 
 namespace Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP {
   public interface ISkStackRouteBEchonetLiteHandlerFactory : IRouteBEchonetLiteHandlerFactory {
     Action<SkStackRouteBSessionConfiguration>? ConfigureRouteBSessionConfiguration { get; set; }
   }
 
   public enum SkStackRouteBTransportProtocol : int {
     Tcp = 0,
     Udp = 1,
   }
 
   public abstract class SkStackRouteBEchonetLiteHandler : RouteBEchonetLiteHandler {
     public static readonly string ResiliencePipelineKeyForSend = "SkStackRouteBEchonetLiteHandler.resiliencePipelineSend";
 
     public override IPAddress? LocalAddress { get; }
     public override IPAddress? PeerAddress { get; }
     public override ISynchronizeInvoke? SynchronizingObject { get; set; }
 
     protected override ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken) {}
     protected override async ValueTask DisconnectAsyncCore(CancellationToken cancellationToken) {}
     protected override void Dispose(bool disposing) {}
     protected override async ValueTask DisposeAsyncCore() {}
     protected override ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken) {}
     protected override ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
     protected override ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
     [MemberNotNull("client")]
     protected override void ThrowIfDisposed() {}
   }
 
   public static class SkStackRouteBEchonetLiteHandlerBuilderExtensions {
     public static ISkStackRouteBEchonetLiteHandlerFactory ConfigureSession(this ISkStackRouteBEchonetLiteHandlerFactory factory, Action<SkStackRouteBSessionConfiguration> configureRouteBSessionConfiguration) {}
   }
 
   public abstract class SkStackRouteBEchonetLiteHandlerFactory : ISkStackRouteBEchonetLiteHandlerFactory {
     protected SkStackRouteBEchonetLiteHandlerFactory(IServiceCollection services) {}
 
     public Action<SkStackRouteBSessionConfiguration>? ConfigureRouteBSessionConfiguration { get; set; }
     protected abstract SkStackRouteBTransportProtocol TransportProtocol { get; }
 
     public virtual async ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken) {}
     protected abstract ValueTask<SkStackClient> CreateClientAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken);
   }
 
   public sealed class SkStackRouteBSessionConfiguration : ICloneable {
     public SkStackRouteBSessionConfiguration() {}
 
     public SkStackActiveScanOptions? ActiveScanOptions { get; set; }
     public SkStackChannel? Channel { get; set; }
     public IPAddress? PaaAddress { get; set; }
     public PhysicalAddress? PaaMacAddress { get; set; }
     public int? PanId { get; set; }
 
     public SkStackRouteBSessionConfiguration Clone() {}
     object ICloneable.Clone() {}
   }
 
   public sealed class SkStackRouteBTcpEchonetLiteHandler : SkStackRouteBEchonetLiteHandler {
     public SkStackRouteBTcpEchonetLiteHandler(SkStackClient client, SkStackRouteBSessionConfiguration sessionConfiguration, bool shouldDisposeClient = false, IServiceProvider? serviceProvider = null) {}
   }
 
   public sealed class SkStackRouteBUdpEchonetLiteHandler : SkStackRouteBEchonetLiteHandler {
     public SkStackRouteBUdpEchonetLiteHandler(SkStackClient client, SkStackRouteBSessionConfiguration sessionConfiguration, bool shouldDisposeClient = false, IServiceProvider? serviceProvider = null) {}
   }
 }
 // API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
 // Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-netstandard2.1.apilist.cs
index f638d45..87b0b1f 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-netstandard2.1.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-netstandard2.1.apilist.cs
@@ -1,94 +1,94 @@
-// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview1)
+// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview2)
 //   Name: Smdn.Net.EchonetLite.RouteB.SkStackIP
 //   AssemblyVersion: 2.0.0.0
-//   InformationalVersion: 2.0.0-preview1+93509882219e05b5d6a8c897a8bdfee251761d59
+//   InformationalVersion: 2.0.0-preview2+4d034f0903ea62ea00625815ef039b64f3ec2917
 //   TargetFramework: .NETStandard,Version=v2.1
 //   Configuration: Release
 //   Referenced assemblies:
 //     Microsoft.Extensions.DependencyInjection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
 //     Smdn.Net.EchonetLite.RouteB, Version=2.0.0.0, Culture=neutral
 //     Smdn.Net.EchonetLite.Transport, Version=2.0.0.0, Culture=neutral
-//     Smdn.Net.SkStackIP, Version=1.0.0.0, Culture=neutral
+//     Smdn.Net.SkStackIP, Version=1.2.0.0, Culture=neutral
 //     netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 #nullable enable annotations
 
 using System;
 using System.Buffers;
 using System.ComponentModel;
 using System.Net;
 using System.Net.NetworkInformation;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Smdn.Net.EchonetLite.RouteB.Credentials;
 using Smdn.Net.EchonetLite.RouteB.Transport;
 using Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP;
 using Smdn.Net.SkStackIP;
 
 namespace Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP {
   public interface ISkStackRouteBEchonetLiteHandlerFactory : IRouteBEchonetLiteHandlerFactory {
     Action<SkStackRouteBSessionConfiguration>? ConfigureRouteBSessionConfiguration { get; set; }
   }
 
   public enum SkStackRouteBTransportProtocol : int {
     Tcp = 0,
     Udp = 1,
   }
 
   public abstract class SkStackRouteBEchonetLiteHandler : RouteBEchonetLiteHandler {
     public static readonly string ResiliencePipelineKeyForSend = "SkStackRouteBEchonetLiteHandler.resiliencePipelineSend";
 
     public override IPAddress? LocalAddress { get; }
     public override IPAddress? PeerAddress { get; }
     public override ISynchronizeInvoke? SynchronizingObject { get; set; }
 
     protected override ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken) {}
     protected override async ValueTask DisconnectAsyncCore(CancellationToken cancellationToken) {}
     protected override void Dispose(bool disposing) {}
     protected override async ValueTask DisposeAsyncCore() {}
     protected override ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken) {}
     protected override ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
     protected override ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
     protected override void ThrowIfDisposed() {}
   }
 
   public static class SkStackRouteBEchonetLiteHandlerBuilderExtensions {
     public static ISkStackRouteBEchonetLiteHandlerFactory ConfigureSession(this ISkStackRouteBEchonetLiteHandlerFactory factory, Action<SkStackRouteBSessionConfiguration> configureRouteBSessionConfiguration) {}
   }
 
   public abstract class SkStackRouteBEchonetLiteHandlerFactory : ISkStackRouteBEchonetLiteHandlerFactory {
     protected SkStackRouteBEchonetLiteHandlerFactory(IServiceCollection services) {}
 
     public Action<SkStackRouteBSessionConfiguration>? ConfigureRouteBSessionConfiguration { get; set; }
     protected abstract SkStackRouteBTransportProtocol TransportProtocol { get; }
 
     public virtual async ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken) {}
     protected abstract ValueTask<SkStackClient> CreateClientAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken);
   }
 
   public sealed class SkStackRouteBSessionConfiguration : ICloneable {
     public SkStackRouteBSessionConfiguration() {}
 
     public SkStackActiveScanOptions? ActiveScanOptions { get; set; }
     public SkStackChannel? Channel { get; set; }
     public IPAddress? PaaAddress { get; set; }
     public PhysicalAddress? PaaMacAddress { get; set; }
     public int? PanId { get; set; }
 
     public SkStackRouteBSessionConfiguration Clone() {}
     object ICloneable.Clone() {}
   }
 
   public sealed class SkStackRouteBTcpEchonetLiteHandler : SkStackRouteBEchonetLiteHandler {
     public SkStackRouteBTcpEchonetLiteHandler(SkStackClient client, SkStackRouteBSessionConfiguration sessionConfiguration, bool shouldDisposeClient = false, IServiceProvider? serviceProvider = null) {}
   }
 
   public sealed class SkStackRouteBUdpEchonetLiteHandler : SkStackRouteBEchonetLiteHandler {
     public SkStackRouteBUdpEchonetLiteHandler(SkStackClient client, SkStackRouteBSessionConfiguration sessionConfiguration, bool shouldDisposeClient = false, IServiceProvider? serviceProvider = null) {}
   }
 }
 // API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
 // Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)

Full changes

Full changes in this release:
diff --git a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP.csproj b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP.csproj
index b3ba9ab..987b9e0 100644
--- a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP.csproj
+++ b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP.csproj
@@ -6,7 +6,7 @@ SPDX-License-Identifier: MIT
   <PropertyGroup>
     <TargetFrameworks>net8.0;net6.0;netstandard2.1</TargetFrameworks>
     <VersionPrefix>2.0.0</VersionPrefix>
-    <VersionSuffix>preview1</VersionSuffix>
+    <VersionSuffix>preview2</VersionSuffix>
     <!-- <PackageValidationBaselineVersion>2.0.0</PackageValidationBaselineVersion> -->
     <Nullable>enable</Nullable>
     <RootNamespace/> <!-- empty the root namespace so that the namespace is determined only by the directory name, for code style rule IDE0030 -->
diff --git a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/ISkStackRouteBEchonetLiteHandlerFactory.cs b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/ISkStackRouteBEchonetLiteHandlerFactory.cs
similarity index 100%
rename from src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/ISkStackRouteBEchonetLiteHandlerFactory.cs
rename to src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/ISkStackRouteBEchonetLiteHandlerFactory.cs
diff --git a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBEchonetLiteHandler.cs b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBEchonetLiteHandler.cs
similarity index 90%
rename from src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBEchonetLiteHandler.cs
rename to src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBEchonetLiteHandler.cs
index c1cb411..a3b107a 100644
--- a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBEchonetLiteHandler.cs
+++ b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBEchonetLiteHandler.cs
@@ -141,19 +141,12 @@ public abstract class SkStackRouteBEchonetLiteHandler : RouteBEchonetLiteHandler
         sessionConfiguration.PaaAddress is null
       );
 
-    // TODO: reduce allocation
-    var rbidBufferWriter = new ArrayBufferWriter<byte>(initialCapacity: RouteBCredentials.AuthenticationIdLength);
-    var passwordBufferWriter = new ArrayBufferWriter<byte>(initialCapacity: RouteBCredentials.PasswordLength);
-
-    credential.WriteIdTo(rbidBufferWriter);
-    credential.WritePasswordTo(passwordBufferWriter);
-
     if (shouldPerformActiveScan) {
       // obtain PAN information by active scan prior to initialization
       return Core(
         authenticateAsPanaClientAsync: (device, ct) => device.AuthenticateAsPanaClientAsync(
-          rbid: rbidBufferWriter.WrittenMemory,
-          password: passwordBufferWriter.WrittenMemory,
+          writeRBID: writer => credential.WriteIdTo(writer),
+          writePassword: writer => credential.WritePasswordTo(writer),
           scanOptions: sessionConfiguration.ActiveScanOptions,
           cancellationToken: ct
         )
@@ -165,8 +158,8 @@ public abstract class SkStackRouteBEchonetLiteHandler : RouteBEchonetLiteHandler
       if (shouldResolvePaaAddress) {
         return Core(
           authenticateAsPanaClientAsync: (device, ct) => device.AuthenticateAsPanaClientAsync(
-            rbid: rbidBufferWriter.WrittenMemory,
-            password: passwordBufferWriter.WrittenMemory,
+            writeRBID: writer => credential.WriteIdTo(writer),
+            writePassword: writer => credential.WritePasswordTo(writer),
             paaMacAddress: sessionConfiguration.PaaMacAddress!,
             channel: sessionConfiguration.Channel!.Value,
             panId: sessionConfiguration.PanId!.Value,
@@ -177,8 +170,8 @@ public abstract class SkStackRouteBEchonetLiteHandler : RouteBEchonetLiteHandler
       else {
         return Core(
           authenticateAsPanaClientAsync: (device, ct) => device.AuthenticateAsPanaClientAsync(
-            rbid: rbidBufferWriter.WrittenMemory,
-            password: passwordBufferWriter.WrittenMemory,
+            writeRBID: writer => credential.WriteIdTo(writer),
+            writePassword: writer => credential.WritePasswordTo(writer),
             paaAddress: sessionConfiguration.PaaAddress!,
             channel: sessionConfiguration.Channel!.Value,
             panId: sessionConfiguration.PanId!.Value,
@@ -195,7 +188,7 @@ public abstract class SkStackRouteBEchonetLiteHandler : RouteBEchonetLiteHandler
       Func<SkStackClient, CancellationToken, ValueTask<SkStackPanaSessionInfo>> authenticateAsPanaClientAsync
     )
     {
-      await PrepareConnectionAsync(cancellationToken).ConfigureAwait(false);
+      await PrepareSessionAsync(cancellationToken).ConfigureAwait(false);
 
       panaSessionInfo = await authenticateAsPanaClientAsync(
         client,
@@ -205,7 +198,7 @@ public abstract class SkStackRouteBEchonetLiteHandler : RouteBEchonetLiteHandler
 #pragma warning restore CS8604
   }
 
-  private protected abstract ValueTask PrepareConnectionAsync(CancellationToken cancellationToken);
+  private protected abstract ValueTask PrepareSessionAsync(CancellationToken cancellationToken);
 
   protected override async ValueTask DisconnectAsyncCore(
     CancellationToken cancellationToken
diff --git a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBEchonetLiteHandlerBuilderExtensions.cs b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBEchonetLiteHandlerBuilderExtensions.cs
similarity index 100%
rename from src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBEchonetLiteHandlerBuilderExtensions.cs
rename to src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBEchonetLiteHandlerBuilderExtensions.cs
diff --git a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBEchonetLiteHandlerFactory.cs b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBEchonetLiteHandlerFactory.cs
similarity index 100%
rename from src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBEchonetLiteHandlerFactory.cs
rename to src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBEchonetLiteHandlerFactory.cs
diff --git a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBSessionConfiguration.cs b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBSessionConfiguration.cs
similarity index 100%
rename from src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBSessionConfiguration.cs
rename to src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBSessionConfiguration.cs
diff --git a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBTcpEchonetLiteHandler.cs b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBTcpEchonetLiteHandler.cs
similarity index 92%
rename from src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBTcpEchonetLiteHandler.cs
rename to src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBTcpEchonetLiteHandler.cs
index 779fa83..021d322 100644
--- a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBTcpEchonetLiteHandler.cs
+++ b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBTcpEchonetLiteHandler.cs
@@ -30,7 +30,7 @@ public sealed class SkStackRouteBTcpEchonetLiteHandler : SkStackRouteBEchonetLit
     throw new NotImplementedException();
   }
 
-  private protected override ValueTask PrepareConnectionAsync(CancellationToken cancellationToken)
+  private protected override ValueTask PrepareSessionAsync(CancellationToken cancellationToken)
     => throw new NotImplementedException();
 
   private protected override ValueTask<IPAddress> ReceiveEchonetLiteAsync(
diff --git a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBTransportProtocol.cs b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBTransportProtocol.cs
similarity index 100%
rename from src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBTransportProtocol.cs
rename to src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBTransportProtocol.cs
diff --git a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBUdpEchonetLiteHandler.cs b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBUdpEchonetLiteHandler.cs
similarity index 94%
rename from src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBUdpEchonetLiteHandler.cs
rename to src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBUdpEchonetLiteHandler.cs
index 4f48213..e3de2bb 100644
--- a/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP/SkStackRouteBUdpEchonetLiteHandler.cs
+++ b/src/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP/SkStackRouteBUdpEchonetLiteHandler.cs
@@ -29,7 +29,7 @@ public sealed class SkStackRouteBUdpEchonetLiteHandler : SkStackRouteBEchonetLit
   {
   }
 
-  private protected override async ValueTask PrepareConnectionAsync(CancellationToken cancellationToken)
+  private protected override async ValueTask PrepareSessionAsync(CancellationToken cancellationToken)
   {
     _ = await Client.PrepareUdpPortAsync(
       port: SkStackKnownPortNumbers.Pana,

Notes

Full Changelog: releases/Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview1...releases/Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview2