#include "internal/e_os.h"
#include "internal/sockets.h"
#include "internal/bio_addr.h"
#ifndef OPENSSL_NO_SOCK
#ifdef OSSL_INTERNAL_CRYPTLIB_H
#error internal/cryptlib.h included before bio_local.h
#endif
#ifdef OPENSSL_BIO_H
#error openssl/bio.h included before bio_local.h
#endif
#ifdef AI_PASSIVE
#if defined(OPENSSL_SYS_VMS) && __INITIAL_POINTER_SIZE == 64
#define addrinfo __addrinfo64
#endif
#define bio_addrinfo_st addrinfo
#define bai_family ai_family
#define bai_socktype ai_socktype
#define bai_protocol ai_protocol
#define bai_addrlen ai_addrlen
#define bai_addr ai_addr
#define bai_next ai_next
#else
struct bio_addrinfo_st {
int bai_family;
int bai_socktype;
int bai_protocol;
size_t bai_addrlen;
struct sockaddr *bai_addr;
struct bio_addrinfo_st *bai_next;
};
#endif
#endif
#include "internal/cryptlib.h"
#include "internal/bio.h"
#include "internal/refcount.h"
typedef struct bio_f_buffer_ctx_struct {
int ibuf_size;
int obuf_size;
char *ibuf;
int ibuf_len;
int ibuf_off;
char *obuf;
int obuf_len;
int obuf_off;
} BIO_F_BUFFER_CTX;
struct bio_st {
OSSL_LIB_CTX *libctx;
const BIO_METHOD *method;
#ifndef OPENSSL_NO_DEPRECATED_3_0
BIO_callback_fn callback;
#endif
BIO_callback_fn_ex callback_ex;
char *cb_arg;
int init;
int shutdown;
int flags;
int retry_reason;
int num;
void *ptr;
struct bio_st *next_bio;
struct bio_st *prev_bio;
CRYPTO_REF_COUNT references;
uint64_t num_read;
uint64_t num_write;
CRYPTO_EX_DATA ex_data;
};
#ifndef OPENSSL_NO_SOCK
#ifdef OPENSSL_SYS_VMS
typedef unsigned int socklen_t;
#endif
extern CRYPTO_RWLOCK *bio_lookup_lock;
int BIO_ADDR_make(BIO_ADDR *ap, const struct sockaddr *sa);
const struct sockaddr *BIO_ADDR_sockaddr(const BIO_ADDR *ap);
struct sockaddr *BIO_ADDR_sockaddr_noconst(BIO_ADDR *ap);
socklen_t BIO_ADDR_sockaddr_size(const BIO_ADDR *ap);
socklen_t BIO_ADDRINFO_sockaddr_size(const BIO_ADDRINFO *bai);
const struct sockaddr *BIO_ADDRINFO_sockaddr(const BIO_ADDRINFO *bai);
#if defined(OPENSSL_SYS_WINDOWS) && defined(WSAID_WSARECVMSG)
#define BIO_HAVE_WSAMSG
extern LPFN_WSARECVMSG bio_WSARecvMsg;
extern LPFN_WSASENDMSG bio_WSASendMsg;
#endif
#endif
extern CRYPTO_REF_COUNT bio_type_count;
void bio_sock_cleanup_int(void);
#if BIO_FLAGS_UPLINK_INTERNAL == 0
#define UP_stdin stdin
#define UP_stdout stdout
#define UP_stderr stderr
#define UP_fprintf fprintf
#define UP_fgets fgets
#define UP_fread fread
#define UP_fwrite fwrite
#undef UP_fsetmod
#define UP_feof feof
#define UP_fclose fclose
#define UP_fopen fopen
#define UP_fseek fseek
#define UP_ftell ftell
#define UP_fflush fflush
#define UP_ferror ferror
#ifdef _WIN32
#define UP_fileno _fileno
#define UP_open _open
#define UP_read _read
#define UP_write _write
#define UP_lseek _lseek
#define UP_close _close
#else
#define UP_fileno fileno
#define UP_open open
#define UP_read read
#define UP_write write
#define UP_lseek lseek
#define UP_close close
#endif
#endif