libpq.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. #include <sys/types.h>
  17. #include <netinet/in.h>
  18. #include "lib/stringinfo.h"
  19. #include "libpq/libpq-be.h"
  20. #include "storage/latch.h"
  21. typedef struct
  22. {
  23. void (*comm_reset) (void);
  24. int (*flush) (void);
  25. int (*flush_if_writable) (void);
  26. bool (*is_send_pending) (void);
  27. int (*putmessage) (char msgtype, const char *s, size_t len);
  28. void (*putmessage_noblock) (char msgtype, const char *s, size_t len);
  29. void (*startcopyout) (void);
  30. void (*endcopyout) (bool errorAbort);
  31. } PQcommMethods;
  32. extern PGDLLIMPORT PQcommMethods *PqCommMethods;
  33. #define pq_comm_reset() (PqCommMethods->comm_reset())
  34. #define pq_flush() (PqCommMethods->flush())
  35. #define pq_flush_if_writable() (PqCommMethods->flush_if_writable())
  36. #define pq_is_send_pending() (PqCommMethods->is_send_pending())
  37. #define pq_putmessage(msgtype, s, len) \
  38. (PqCommMethods->putmessage(msgtype, s, len))
  39. #define pq_putmessage_noblock(msgtype, s, len) \
  40. (PqCommMethods->putmessage_noblock(msgtype, s, len))
  41. #define pq_startcopyout() (PqCommMethods->startcopyout())
  42. #define pq_endcopyout(errorAbort) (PqCommMethods->endcopyout(errorAbort))
  43. /*
  44. * External functions.
  45. */
  46. /*
  47. * prototypes for functions in pqcomm.c
  48. */
  49. extern int StreamServerPort(int family, char *hostName,
  50. unsigned short portNumber, char *unixSocketDir,
  51. pgsocket ListenSocket[], int MaxListen);
  52. extern int StreamConnection(pgsocket server_fd, Port *port);
  53. extern void StreamClose(pgsocket sock);
  54. extern void TouchSocketFiles(void);
  55. extern void RemoveSocketFiles(void);
  56. extern void pq_init(void);
  57. extern int pq_getbytes(char *s, size_t len);
  58. extern int pq_getstring(StringInfo s);
  59. extern void pq_startmsgread(void);
  60. extern void pq_endmsgread(void);
  61. extern bool pq_is_reading_msg(void);
  62. extern int pq_getmessage(StringInfo s, int maxlen);
  63. extern int pq_getbyte(void);
  64. extern int pq_peekbyte(void);
  65. extern int pq_getbyte_if_available(unsigned char *c);
  66. extern int pq_putbytes(const char *s, size_t len);
  67. /*
  68. * prototypes for functions in be-secure.c
  69. */
  70. extern char *ssl_cert_file;
  71. extern char *ssl_key_file;
  72. extern char *ssl_ca_file;
  73. extern char *ssl_crl_file;
  74. extern int (*pq_putmessage_hook) (char msgtype, const char *s, size_t len);
  75. extern int (*pq_flush_hook) (void);
  76. extern int secure_initialize(void);
  77. extern bool secure_loaded_verify_locations(void);
  78. extern void secure_destroy(void);
  79. extern int secure_open_server(Port *port);
  80. extern void secure_close(Port *port);
  81. extern ssize_t secure_read(Port *port, void *ptr, size_t len);
  82. extern ssize_t secure_write(Port *port, void *ptr, size_t len);
  83. extern ssize_t secure_raw_read(Port *port, void *ptr, size_t len);
  84. extern ssize_t secure_raw_write(Port *port, const void *ptr, size_t len);
  85. extern bool ssl_loaded_verify_locations;
  86. extern WaitEventSet *FeBeWaitSet;
  87. /* GUCs */
  88. extern char *SSLCipherSuites;
  89. extern char *SSLECDHCurve;
  90. extern bool SSLPreferServerCiphers;
  91. #endif /* LIBPQ_H */