| /*------------------------------------------------------------------------- |
| * |
| * libpq.h |
| * POSTGRES LIBPQ buffer structure definitions. |
| * |
| * |
| * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group |
| * Portions Copyright (c) 1994, Regents of the University of California |
| * |
| * src/include/libpq/libpq.h |
| * |
| *------------------------------------------------------------------------- |
| */ |
| #ifndef LIBPQ_H |
| #define LIBPQ_H |
| |
| #include <netinet/in.h> |
| |
| #include "lib/stringinfo.h" |
| #include "libpq/libpq-be.h" |
| #include "storage/latch.h" |
| |
| |
| /* |
| * Callers of pq_getmessage() must supply a maximum expected message size. |
| * By convention, if there's not any specific reason to use another value, |
| * use PQ_SMALL_MESSAGE_LIMIT for messages that shouldn't be too long, and |
| * PQ_LARGE_MESSAGE_LIMIT for messages that can be long. |
| */ |
| #define PQ_SMALL_MESSAGE_LIMIT 10000 |
| #define PQ_LARGE_MESSAGE_LIMIT (MaxAllocSize - 1) |
| |
| |
| typedef struct |
| { |
| void (*comm_reset) (void); |
| int (*flush) (void); |
| int (*flush_if_writable) (void); |
| bool (*is_send_pending) (void); |
| int (*putmessage) (char msgtype, const char *s, size_t len); |
| void (*putmessage_noblock) (char msgtype, const char *s, size_t len); |
| } PQcommMethods; |
| |
| extern const PGDLLIMPORT PQcommMethods *PqCommMethods; |
| |
| #define pq_comm_reset() (PqCommMethods->comm_reset()) |
| #define pq_flush() (PqCommMethods->flush()) |
| #define pq_flush_if_writable() (PqCommMethods->flush_if_writable()) |
| #define pq_is_send_pending() (PqCommMethods->is_send_pending()) |
| #define pq_putmessage(msgtype, s, len) \ |
| (PqCommMethods->putmessage(msgtype, s, len)) |
| #define pq_putmessage_noblock(msgtype, s, len) \ |
| (PqCommMethods->putmessage_noblock(msgtype, s, len)) |
| |
| /* |
| * External functions. |
| */ |
| |
| /* |
| * prototypes for functions in pqcomm.c |
| */ |
| extern WaitEventSet *FeBeWaitSet; |
| |
| #define FeBeWaitSetSocketPos 0 |
| #define FeBeWaitSetLatchPos 1 |
| |
| extern int StreamServerPort(int family, const char *hostName, |
| unsigned short portNumber, const char *unixSocketDir, |
| pgsocket ListenSocket[], int MaxListen); |
| extern int StreamConnection(pgsocket server_fd, Port *port); |
| extern void StreamClose(pgsocket sock); |
| extern void TouchSocketFiles(void); |
| extern void RemoveSocketFiles(void); |
| extern void pq_init(void); |
| extern void pq_comm_close_fatal(void); /* GPDB only */ |
| extern int pq_getbytes(char *s, size_t len); |
| extern void pq_startmsgread(void); |
| extern void pq_endmsgread(void); |
| extern bool pq_is_reading_msg(void); |
| extern int pq_getmessage(StringInfo s, int maxlen); |
| extern int pq_getbyte(void); |
| extern int pq_peekbyte(void); |
| extern int pq_getbyte_if_available(unsigned char *c); |
| |
| extern int pq_putbytes(const char *s, size_t len); |
| extern bool pq_waitForDataUsingSelect(void); /* GPDB only */ |
| |
| extern bool pq_buffer_has_data(void); |
| extern int pq_putmessage_v2(char msgtype, const char *s, size_t len); |
| extern bool pq_check_connection(void); |
| |
| |
| /* |
| * prototypes for functions in be-secure.c |
| */ |
| extern char *ssl_library; |
| extern char *ssl_cert_file; |
| extern char *ssl_key_file; |
| extern char *ssl_ca_file; |
| extern char *ssl_crl_file; |
| extern char *ssl_crl_dir; |
| extern char *ssl_dh_params_file; |
| extern PGDLLIMPORT char *ssl_passphrase_command; |
| extern PGDLLIMPORT bool ssl_passphrase_command_supports_reload; |
| #ifdef USE_SSL |
| extern bool ssl_loaded_verify_locations; |
| #endif |
| |
| extern int secure_initialize(bool isServerStart); |
| extern bool secure_loaded_verify_locations(void); |
| extern void secure_destroy(void); |
| extern int secure_open_server(Port *port); |
| extern void secure_close(Port *port); |
| extern ssize_t secure_read(Port *port, void *ptr, size_t len); |
| extern ssize_t secure_write(Port *port, void *ptr, size_t len); |
| extern ssize_t secure_raw_read(Port *port, void *ptr, size_t len); |
| extern ssize_t secure_raw_write(Port *port, const void *ptr, size_t len); |
| |
| /* |
| * prototypes for functions in be-secure-gssapi.c |
| */ |
| #ifdef ENABLE_GSS |
| extern ssize_t secure_open_gssapi(Port *port); |
| #endif |
| |
| /* GUCs */ |
| extern char *SSLCipherSuites; |
| extern char *SSLECDHCurve; |
| extern bool SSLPreferServerCiphers; |
| extern int ssl_min_protocol_version; |
| extern int ssl_max_protocol_version; |
| |
| enum ssl_protocol_versions |
| { |
| PG_TLS_ANY = 0, |
| PG_TLS1_VERSION, |
| PG_TLS1_1_VERSION, |
| PG_TLS1_2_VERSION, |
| PG_TLS1_3_VERSION, |
| }; |
| |
| /* |
| * prototypes for functions in be-secure-common.c |
| */ |
| extern int run_ssl_passphrase_command(const char *prompt, bool is_server_start, |
| char *buf, int size); |
| extern bool check_ssl_key_file_permissions(const char *ssl_key_file, |
| bool isServerStart); |
| |
| #endif /* LIBPQ_H */ |