async Task Authenticate(string username, NpgsqlTimeout timeout, bool async) { Log.Trace("Authenticating...", Id); var msg = await ReadExpecting <AuthenticationRequestMessage>(async); timeout.Check(); switch (msg.AuthRequestType) { case AuthenticationRequestType.AuthenticationOk: return; case AuthenticationRequestType.AuthenticationCleartextPassword: await AuthenticateCleartext(async); return; case AuthenticationRequestType.AuthenticationMD5Password: await AuthenticateMD5(username, ((AuthenticationMD5PasswordMessage)msg).Salt, async); return; case AuthenticationRequestType.AuthenticationGSS: case AuthenticationRequestType.AuthenticationSSPI: await AuthenticateGSS(async); return; case AuthenticationRequestType.AuthenticationGSSContinue: throw new NpgsqlException("Can't start auth cycle with AuthenticationGSSContinue"); default: throw new NotSupportedException($"Authentication method not supported (Received: {msg.AuthRequestType})"); } }
async Task LoadBackendTypes(NpgsqlConnector connector, NpgsqlTimeout timeout, bool async) { var commandTimeout = 0; // Default to infinity if (timeout.IsSet) { commandTimeout = (int)timeout.TimeLeft.TotalSeconds; if (commandTimeout <= 0) { throw new TimeoutException(); } } var typeLoadingQuery = GenerateTypesQuery(connector.SupportsRangeTypes, connector.Settings.LoadTableComposites); using (var command = new NpgsqlCommand(typeLoadingQuery, connector.Connection)) { command.CommandTimeout = commandTimeout; command.AllResultTypesAreUnknown = true; using (var reader = async ? await command.ExecuteReaderAsync() : command.ExecuteReader()) { // First load the types themselves while (async ? await reader.ReadAsync() : reader.Read()) { timeout.Check(); LoadBackendType(reader, connector); } if (async) { await reader.NextResultAsync(); } else { reader.NextResult(); } // Now load the composite types' fields LoadCompositeFields(reader); } } }