pqcomm.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:5k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * pqcomm.h
  4.  * Definitions common to frontends and backends.
  5.  *
  6.  * NOTE: for historical reasons, this does not correspond to pqcomm.c.
  7.  * pqcomm.c's routines are declared in libpq.h.
  8.  *
  9.  * Copyright (c) 1994, Regents of the University of California
  10.  *
  11.  * $Id: pqcomm.h,v 1.36 1999/05/25 22:42:51 momjian Exp $
  12.  *
  13.  *-------------------------------------------------------------------------
  14.  */
  15. #ifndef PQCOMM_H
  16. #define PQCOMM_H
  17. #include "postgres.h"
  18. #include <stdio.h>
  19. #include <sys/types.h>
  20. #ifdef WIN32
  21. #include <winsock.h>
  22. #else
  23. #include <sys/socket.h>
  24. #include <sys/un.h>
  25. #include <netinet/in.h>
  26. #endif
  27. /*
  28.  * Internal send/receive buffers in libpq.
  29.  */
  30. #define PQ_BUFFER_SIZE 8192
  31. /* Define a generic socket address type. */
  32. typedef union SockAddr
  33. {
  34. struct sockaddr sa;
  35. struct sockaddr_in in;
  36. #ifndef WIN32
  37. struct sockaddr_un un;
  38. #endif
  39. } SockAddr;
  40. /* Configure the UNIX socket address for the well known port. */
  41. #if defined(SUN_LEN)
  42. #define UNIXSOCK_PATH(sun,port) 
  43. (sprintf((sun).sun_path, "/tmp/.s.PGSQL.%d", (port)), SUN_LEN(&(sun)))
  44. #else
  45. #define UNIXSOCK_PATH(sun,port) 
  46. (sprintf((sun).sun_path, "/tmp/.s.PGSQL.%d", (port)), 
  47.  strlen((sun).sun_path)+ offsetof(struct sockaddr_un, sun_path))
  48. #endif
  49. /*
  50.  * We do this because sun_len is in BSD's struct, while others don't.
  51.  * We never actually set BSD's sun_len, and I can't think of a
  52.  * platform-safe way of doing it, but the code still works. bjm
  53.  */
  54. /*
  55.  * These manipulate the frontend/backend protocol version number.
  56.  *
  57.  * The major number should be incremented for incompatible changes.  The minor
  58.  * number should be incremented for compatible changes (eg. additional
  59.  * functionality).
  60.  *
  61.  * If a backend supports version m.n of the protocol it must actually support
  62.  * versions m.0..n].  Backend support for version m-1 can be dropped after a
  63.  * `reasonable' length of time.
  64.  *
  65.  * A frontend isn't required to support anything other than the current
  66.  * version.
  67.  */
  68. #define PG_PROTOCOL_MAJOR(v) ((v) >> 16)
  69. #define PG_PROTOCOL_MINOR(v) ((v) & 0x0000ffff)
  70. #define PG_PROTOCOL(m,n) (((m) << 16) | (n))
  71. /* The earliest and latest frontend/backend protocol version supported. */
  72. #define PG_PROTOCOL_EARLIEST PG_PROTOCOL(0,0)
  73. #define PG_PROTOCOL_LATEST PG_PROTOCOL(2,0)
  74. /*
  75.  * All packets sent to the postmaster start with the length.  This is omitted
  76.  * from the different packet definitions specified below.
  77.  */
  78. typedef uint32 PacketLen;
  79. /*
  80.  * Startup message parameters sizes.  These must not be changed without changing
  81.  * the protcol version.  These are all strings that are '' terminated only if
  82.  * there is room.
  83.  */
  84. #define SM_DATABASE 64
  85. #define SM_USER 32
  86. #define SM_OPTIONS 64
  87. #define SM_UNUSED 64
  88. #define SM_TTY 64
  89. typedef uint32 ProtocolVersion; /* Fe/Be protocol version nr. */
  90. typedef struct StartupPacket
  91. {
  92. ProtocolVersion protoVersion; /* Protocol version */
  93. char database[SM_DATABASE]; /* Database name */
  94. char user[SM_USER]; /* User name */
  95. char options[SM_OPTIONS]; /* Optional additional args */
  96. char unused[SM_UNUSED]; /* Unused */
  97. char tty[SM_TTY]; /* Tty for debug output */
  98. } StartupPacket;
  99. /* These are the authentication requests sent by the backend. */
  100. #define AUTH_REQ_OK 0 /* User is authenticated  */
  101. #define AUTH_REQ_KRB4 1 /* Kerberos V4 */
  102. #define AUTH_REQ_KRB5 2 /* Kerberos V5 */
  103. #define AUTH_REQ_PASSWORD 3 /* Password */
  104. #define AUTH_REQ_CRYPT 4 /* Encrypted password */
  105. typedef uint32 AuthRequest;
  106. /* This next section is to maintain compatibility with protocol v0.0. */
  107. #define STARTUP_MSG 7 /* Initialise a connection */
  108. #define STARTUP_KRB4_MSG 10 /* krb4 session follows */
  109. #define STARTUP_KRB5_MSG 11 /* krb5 session follows */
  110. #define STARTUP_PASSWORD_MSG 14 /* Password follows */
  111. typedef ProtocolVersion MsgType;
  112. /* A client can also send a cancel-current-operation request to the postmaster.
  113.  * This is uglier than sending it directly to the client's backend, but it
  114.  * avoids depending on out-of-band communication facilities.
  115.  */
  116. /* The cancel request code must not match any protocol version number
  117.  * we're ever likely to use.  This random choice should do.
  118.  */
  119. #define CANCEL_REQUEST_CODE PG_PROTOCOL(1234,5678)
  120. typedef struct CancelRequestPacket
  121. {
  122. /* Note that each field is stored in network byte order! */
  123. MsgType cancelRequestCode; /* code to identify a cancel
  124.  * request */
  125. uint32 backendPID; /* PID of client's backend */
  126. uint32 cancelAuthCode; /* secret key to authorize cancel */
  127. } CancelRequestPacket;
  128. #endif  /* PQCOMM_H */