1 /*------------------------------------------------------------------------- 2 * 3 * libpq.h 4 * POSTGRES LIBPQ buffer structure definitions. 5 * 6 * 7 * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group 8 * Portions Copyright (c) 1994, Regents of the University of California 9 * 10 * src/include/libpq/libpq.h 11 * 12 *------------------------------------------------------------------------- 13 */ 14 #ifndef LIBPQ_H 15 #define LIBPQ_H 16 17 #include <sys/types.h> 18 #include <netinet/in.h> 19 20 #include "lib/stringinfo.h" 21 #include "libpq/libpq-be.h" 22 #include "storage/latch.h" 23 24 25 typedef struct 26 { 27 void (*comm_reset) (void); 28 int (*flush) (void); 29 int (*flush_if_writable) (void); 30 bool (*is_send_pending) (void); 31 int (*putmessage) (char msgtype, const char *s, size_t len); 32 void (*putmessage_noblock) (char msgtype, const char *s, size_t len); 33 void (*startcopyout) (void); 34 void (*endcopyout) (bool errorAbort); 35 } PQcommMethods; 36 37 extern PGDLLIMPORT PQcommMethods *PqCommMethods; 38 39 #define pq_comm_reset() (PqCommMethods->comm_reset()) 40 #define pq_flush() (PqCommMethods->flush()) 41 #define pq_flush_if_writable() (PqCommMethods->flush_if_writable()) 42 #define pq_is_send_pending() (PqCommMethods->is_send_pending()) 43 #define pq_putmessage(msgtype, s, len) \ 44 (PqCommMethods->putmessage(msgtype, s, len)) 45 #define pq_putmessage_noblock(msgtype, s, len) \ 46 (PqCommMethods->putmessage_noblock(msgtype, s, len)) 47 #define pq_startcopyout() (PqCommMethods->startcopyout()) 48 #define pq_endcopyout(errorAbort) (PqCommMethods->endcopyout(errorAbort)) 49 50 /* 51 * External functions. 52 */ 53 54 /* 55 * prototypes for functions in pqcomm.c 56 */ 57 extern int StreamServerPort(int family, char *hostName, 58 unsigned short portNumber, char *unixSocketDir, 59 pgsocket ListenSocket[], int MaxListen); 60 extern int StreamConnection(pgsocket server_fd, Port *port); 61 extern void StreamClose(pgsocket sock); 62 extern void TouchSocketFiles(void); 63 extern void RemoveSocketFiles(void); 64 extern void pq_init(void); 65 extern int pq_getbytes(char *s, size_t len); 66 extern int pq_getstring(StringInfo s); 67 extern void pq_startmsgread(void); 68 extern void pq_endmsgread(void); 69 extern bool pq_is_reading_msg(void); 70 extern int pq_getmessage(StringInfo s, int maxlen); 71 extern int pq_getbyte(void); 72 extern int pq_peekbyte(void); 73 extern int pq_getbyte_if_available(unsigned char *c); 74 extern bool pq_buffer_has_data(void); 75 extern int pq_putbytes(const char *s, size_t len); 76 77 /* 78 * prototypes for functions in be-secure.c 79 */ 80 extern char *ssl_cert_file; 81 extern char *ssl_key_file; 82 extern char *ssl_ca_file; 83 extern char *ssl_crl_file; 84 85 extern int (*pq_putmessage_hook) (char msgtype, const char *s, size_t len); 86 extern int (*pq_flush_hook) (void); 87 88 extern int secure_initialize(void); 89 extern bool secure_loaded_verify_locations(void); 90 extern void secure_destroy(void); 91 extern int secure_open_server(Port *port); 92 extern void secure_close(Port *port); 93 extern ssize_t secure_read(Port *port, void *ptr, size_t len); 94 extern ssize_t secure_write(Port *port, void *ptr, size_t len); 95 extern ssize_t secure_raw_read(Port *port, void *ptr, size_t len); 96 extern ssize_t secure_raw_write(Port *port, const void *ptr, size_t len); 97 98 extern bool ssl_loaded_verify_locations; 99 100 extern WaitEventSet *FeBeWaitSet; 101 102 /* GUCs */ 103 extern char *SSLCipherSuites; 104 extern char *SSLECDHCurve; 105 extern bool SSLPreferServerCiphers; 106 107 #endif /* LIBPQ_H */ 108