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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * libpq_be.h
  4.  *   This file contains definitions for structures and
  5.  *   externs for functions used by the POSTGRES backend.
  6.  *
  7.  *
  8.  * Copyright (c) 1994, Regents of the University of California
  9.  *
  10.  * $Id: libpq-be.h,v 1.14.2.1 1999/07/30 19:36:33 scrappy Exp $
  11.  *
  12.  *-------------------------------------------------------------------------
  13.  */
  14. #ifndef LIBPQ_BE_H
  15. #define LIBPQ_BE_H
  16. #include <sys/types.h>
  17. #include "libpq/hba.h"
  18. /* Protocol v0 password packet. */
  19. typedef struct PasswordPacketV0
  20. {
  21. uint32 unused;
  22. char data[288]; /* User and password as strings. */
  23. } PasswordPacketV0;
  24. /*
  25.  * Password packet.  The length of the password can be changed without
  26.  * affecting anything.
  27.  */
  28. typedef struct PasswordPacket
  29. {
  30. char passwd[100]; /* The password. */
  31. } PasswordPacket;
  32. /* Error message packet. */
  33. typedef struct ErrorMessagePacket
  34. {
  35. char data[1 + 100]; /* 'E' + the message. */
  36. } ErrorMessagePacket;
  37. /* Authentication request packet. */
  38. typedef struct AuthRequestPacket
  39. {
  40. char data[1 + sizeof(AuthRequest) + 2]; /* 'R' + the request +
  41.  * optional salt. */
  42. } AuthRequestPacket;
  43. /* These are used by the packet handling routines. */
  44. typedef enum
  45. {
  46. Idle,
  47. ReadingPacketLength,
  48. ReadingPacket,
  49. WritingPacket
  50. } PacketState;
  51. typedef int (*PacketDoneProc) (void *arg, PacketLen pktlen, void *pktdata);
  52. typedef struct Packet
  53. {
  54. PacketState state; /* What's in progress. */
  55. PacketLen len; /* Actual length */
  56. int nrtodo; /* Bytes still to transfer */
  57. char    *ptr; /* Buffer pointer */
  58. PacketDoneProc iodone; /* I/O complete callback */
  59. void    *arg; /* Argument to callback */
  60. /*
  61.  * We declare the data buffer as a union of the allowed packet types,
  62.  * mainly to ensure that enough space is allocated for the largest
  63.  * one.
  64.  */
  65. union
  66. {
  67. /* These are outgoing so have no packet length prepended. */
  68. ErrorMessagePacket em;
  69. AuthRequestPacket ar;
  70. /* These are incoming and have a packet length prepended. */
  71. StartupPacket si;
  72. CancelRequestPacket canc;
  73. PasswordPacketV0 pwv0;
  74. PasswordPacket pw;
  75. } pkt;
  76. } Packet;
  77. /*
  78.  * This is used by the postmaster in its communication with frontends. It is
  79.  * contains all state information needed during this communication before the
  80.  * backend is run.
  81.  */
  82. typedef struct Port
  83. {
  84. int sock; /* File descriptor */
  85. Packet pktInfo; /* For the packet handlers */
  86. SockAddr laddr; /* local addr (us) */
  87. SockAddr raddr; /* remote addr (them) */
  88. char salt[2]; /* Password salt */
  89. /*
  90.  * Information that needs to be held during the fe/be authentication
  91.  * handshake.
  92.  */
  93. ProtocolVersion proto;
  94. char database[SM_DATABASE + 1];
  95. char user[SM_USER + 1];
  96. char options[SM_OPTIONS + 1];
  97. char tty[SM_TTY + 1];
  98. char auth_arg[MAX_AUTH_ARG];
  99. UserAuth auth_method;
  100. } Port;
  101. extern ProtocolVersion FrontendProtocol;
  102. /*
  103.  * prototypes for functions in pqpacket.c
  104.  */
  105. void PacketReceiveSetup(Packet *pkt, PacketDoneProc iodone, void *arg);
  106. int PacketReceiveFragment(Packet *pkt, int sock);
  107. void PacketSendSetup(Packet *pkt, int nbytes, PacketDoneProc iodone, void *arg);
  108. int PacketSendFragment(Packet *pkt, int sock);
  109. void PacketSendError(Packet *pkt, char *errormsg);
  110. #endif  /* LIBPQ_BE_H */