// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIBBRILLO_BRILLO_STREAMS_OPENSSL_STREAM_BIO_H_
#define LIBBRILLO_BRILLO_STREAMS_OPENSSL_STREAM_BIO_H_

#include <brillo/brillo_export.h>

// Forward-declare BIO as an alias to OpenSSL's internal bio_st structure.
using BIO = struct bio_st;

namespace brillo {

class Stream;

// Creates a new BIO that uses the brillo::Stream as the back-end storage.
// The created BIO does *NOT* own the |stream| and the stream must out-live
// the BIO.
// At the moment, only BIO_read and BIO_write operations are supported as well
// as BIO_flush. More functionality could be added to this when/if needed.
// The returned BIO performs *NON-BLOCKING* IO on the underlying stream.
BRILLO_EXPORT BIO* BIO_new_stream(brillo::Stream* stream);

}  // namespace brillo

#endif  // LIBBRILLO_BRILLO_STREAMS_OPENSSL_STREAM_BIO_H_