internal static async Task<IAsyncTransport> OpenAsync(this SaslProfile saslProfile, string hostname,
IBufferManager bufferManager, IAsyncTransport transport)
{
ProtocolHeader header = saslProfile.Start(hostname, transport);
AsyncPump pump = new AsyncPump(bufferManager, transport);
await pump.PumpAsync(
h => { saslProfile.OnHeader(header, h); return true; },
b => { SaslCode code; return saslProfile.OnFrame(transport, b, out code); });
return (IAsyncTransport)saslProfile.UpgradeTransportInternal(transport);
}
}