Section 2. Control Connection Protocol Specification

Control Connection messages are used to establish and clear user
   sessions.  The first set of Control Connection messages are used to
   maintain the control connection itself.  The control connection is
   initiated by either the PNS or PAC after they establish the
   underlying TCP connection.  The procedure and configuration
   information required to determine which TCP connections are
   established is not covered by this protocol.
   The following Control Connection messages are all sent as user data
   on the established TCP connection between a given PNS-PAC pair.  Note
   that care has been taken to ensure that all word (2 octet) and
   longword (4 octet) values begin on appropriate boundaries.  All data
   is sent in network order (high order octets first).  Any "reserved"
   fields MUST be sent as 0 values to allow for protocol extensibility.
2.1.  Start-Control-Connection-Request
   The Start-Control-Connection-Request is a PPTP control message used
   to establish the control connection between a PNS and a PAC.  Each
   PNS-PAC pair requires a dedicated control connection to be
   established.  A control connection must be established before any
   other PPTP messages can be issued.  The establishment of the control
   connection can be initiated by either the PNS or PAC.  A procedure
   which handles the occurrence of a collision between PNS and PAC
   Start-Control-Connection-Requests is described in section 3.1.3.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             Length            |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Protocol Version        |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Framing Capabilities                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Bearer Capabilities                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Maximum Channels        |       Firmware Revision       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                     Host Name (64 octets)                     +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                   Vendor String (64 octets)                   +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      Length                   Total length in octets of this PPTP
                               message, including the entire PPTP
                               header.
      PPTP Message Type        1 for Control Message.
      Magic Cookie             0x1A2B3C4D. This constant value is used
                               as a sanity check on received messages
                               (see section 1.4).
      Control Message Type     1 for Start-Control-Connection-Request.
      Reserved0                This field MUST be 0.
      Protocol Version         The version of the PPTP protocol that the
                               sender wishes to use.
      Reserved1                This field MUST be 0.
   Framing Capabilities     A set of bits indicating the type of framing
                            that the sender of this message can provide.
                            The currently defined bit settings are:
                               1 - Asynchronous Framing supported
                               2 - Synchronous Framing supported
   Bearer Capabilities      A set of bits indicating the bearer
                            capabilities that the sender of this message
                            can provide.  The currently defined bit
                            settings are:
                               1 - Analog access supported
                               2 - Digital access supported
   Maximum Channels         The total number of individual PPP sessions
                            this PAC can support.  In Start-Control-
                            Connection-Requests issued by the PNS, this
                            value SHOULD be set to 0.  It MUST be
                            ignored by the PAC.
   Firmware Revision        This field contains the firmware revision
                            number of the issuing PAC, when issued by
                            the PAC, or the version of the PNS PPTP
                            driver if issued by the PNS.
   Host Name                A 64 octet field containing the DNS name of
                            the issuing PAC or PNS.  If less than 64
                            octets in length, the remainder of this
                            field SHOULD be filled with octets of value
                            0.
   Vendor Name              A 64 octet field containing a vendor
                            specific string describing the type of PAC
                            being used, or the type of PNS software
                            being used if this request is issued by the
                            PNS.  If less than 64 octets in length, the
                            remainder of this field SHOULD be filled
                            with octets of value 0.
2.2.  Start-Control-Connection-Reply
   The Start-Control-Connection-Reply is a PPTP control message sent in
   reply to a received Start-Control-Connection-Request message.  This
   message contains a result code indicating the result of the control
   connection establishment attempt.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             Length            |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Protocol Version        |  Result Code  |  Error Code   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Framing Capability                       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Bearer Capability                       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Maximum Channels        |       Firmware Revision       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                     Host Name (64 octets)                     +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                   Vendor String (64 octets)                   +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     2 for Start-Control-Connection-Reply.
   Reserved0                This field MUST be 0.
   Protocol Version         The version of the PPTP protocol that the
                            sender wishes to use.
   Result Code              Indicates the result of the command channel
                            establishment attempt.  Current valid Result
                            Code values are:
                                  1 - Successful channel establishment
                                  2 - General error -- Error Code
                                      indicates the problem
                                  3 - Command channel already exists;
                                  4 - Requester is not authorized to
                                      establish a command channel
                                  5 - The protocol version of the
                                      requester is not supported
   Error Code               This field is set to 0 unless a "General
                            Error" exists, in which case Result Code is
                            set to 2 and this field is set to the value
                            corresponding to the general error condition
                            as specified in section 2.2.
   Framing Capabilities     A set of bits indicating the type of framing
                            that the sender of this message can provide.
                            The currently defined bit settings are:
                                  1 - Asynchronous Framing supported
                                  2 - Synchronous Framing supported.
   Bearer Capabilities      A set of bits indicating the bearer
                            capabilities that the sender of this message
                            can provide.  The currently defined bit
                            settings are:
                                  1 - Analog access supported
                                  2 - Digital access supported
   Maximum Channels         The total number of individual PPP sessions
                            this PAC can support.  In a Start-Control-
                            Connection-Reply issued by the PNS, this
                            value SHOULD be set to 0 and it must be
                            ignored by the PAC. The PNS MUST NOT use
                            this value to try to track the remaining
                            number of PPP sessions that the PAC will
                            allow.
   Firmware Revision        This field contains the firmware revision
                            number of the issuing PAC, or the version of
                            the PNS PPTP driver if issued by the PNS.
   Host Name                A 64 octet field containing the DNS name of
                            the issuing PAC or PNS.  If less than 64
                            octets in length, the remainder of this
                            field SHOULD be filled with octets of value
                            0.
   Vendor Name              A 64 octet field containing a vendor
                            specific string describing the type of PAC
                            being used, or the type of PNS software
                            being used if this request is issued by the
                            PNS.  If less than 64 octets in length, the
                            remainder of this field SHOULD be filled
                            with octets of value 0.
2.3.  Stop-Control-Connection-Request
   The Stop-Control-Connection-Request is a PPTP control message sent by
   one peer of a PAC-PNS control connection to inform the other peer
   that the control connection should be closed.  In addition to closing
   the control connection, all active user calls are implicitly cleared.
   The reason for issuing this request is indicated in the Reason field.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             Length            |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Reason     |   Reserved1   |           Reserved2           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     3 for Stop-Control-Connection-Request.
   Reserved0                This field MUST be 0.
   Reason                   Indicates the reason for the control
                            connection being closed. Current valid
                            Reason values are:
                                  1 (None) - General request to clear
                                    control connection
                                  2 (Stop-Protocol) - Can't support
                                    peer's version of the protocol
                                  3 (Stop-Local-Shutdown) - Requester is
                                    being shut down
      Reserved1, Reserved2     These fields MUST be 0.
2.4.  Stop-Control-Connection-Reply
   The Stop-Control-Connection-Reply is a PPTP control message sent by
   one peer of a PAC-PNS control connection upon receipt of a Stop-
   Control-Connection-Request from the other peer.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Result Code  |   Error Code  |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     4 for Stop-Control-Connection-Reply.
   Reserved0                This field MUST be 0.
   Result Code              Indicates the result of the attempt to close
                            the control connection. Current valid Result
                            Code values are:
                                  1 (OK) - Control connection closed
                                  2 (General Error) - Control connection
                                    not closed for reason indicated in
                                    Error Code
   Error Code               This field is set to 0 unless a "General
                            Error" exists, in which case Result Code is
                            set to 2 and this field is set to the value
                            corresponding to the general error condition
                            as specified in section 2.2.
   Reserved1                This field MUST be 0.
2.5.  Echo-Request
   The Echo-Request is a PPTP control message sent by either peer of a
   PAC-PNS control connection. This control message is used as a "keep-
   alive" for the control connection.  The receiving peer issues an
   Echo-Reply to each Echo-Request received. As specified in section
   3.1.4, if the sender does not receive an Echo-Reply in response to an
   Echo-Request, it will eventually clear the control connection.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Identifier                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     5 for Echo-Request.
   Reserved0                This field MUST be 0.
   Identifier               A value set by the sender of the Echo-
                            Request that is used to match the reply with
                            the corresponding request.
2.6.  Echo-Reply
   The Echo-Reply is a PPTP control message sent by either peer of a
   PAC-PNS control connection in response to the receipt of an Echo-
   Request.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Identifier                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Result Code  |   Error Code  |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     6 for Echo-Reply.
   Reserved0                This field MUST be 0.
   Identifier               The contents of the identify field from the
                            received Echo-Request is copied to this
                            field.
   Result Code              Indicates the result of the receipt of the
                            Echo-Request. Current valid Result Code
                            values are:
                                  1 (OK) - The Echo-Reply is valid
                                  2 (General Error) - Echo-Request not
                                    accepted for the reason indicated in
                                    Error Code
   Error Code               This field is set to 0 unless a "General
                            Error" condition exists, in which case
                            Result Code is set to 2 and this field is
                            set to the value corresponding to the
                            general error condition as specified in
                            section 2.2.
   Reserved1                This field MUST be 0.
2.7.  Outgoing-Call-Request
   The Outgoing-Call-Request is a PPTP control message sent by the PNS
   to the PAC to indicate that an outbound call from the PAC is to be
   established.  This request provides the PAC with information required
   to make the call. It also provides information to the PAC that is
   used to regulate the transmission of data to the PNS for this session
   once it is established.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |      Call Serial Number       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Minimum BPS                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Maximum BPS                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Bearer Type                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Framing Type                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Packet Recv. Window Size    |    Packet Processing Delay    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Phone Number Length      |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                   Phone Number (64 octets)                    +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                    Subaddress (64 octets)                     +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     7 for Outgoing-Call-Request.
   Reserved0                This field MUST be 0.
   Call ID                  A unique identifier, unique to a particular
                            PAC-PNS pair assigned by the PNS to this
                            session.  It is used to multiplex and
                            demultiplex data sent over the tunnel
                            between the PNS and PAC involved in this
                            session.
   Call Serial Number       An identifier assigned by the PNS to this
                            session for the purpose of identifying this
                            particular session in logged session
                            information.  Unlike the Call ID, both the
                            PNS and PAC associate the same Call Serial
                            Number with a given session. The combination
                            of IP address and call serial number SHOULD
                            be unique.
   Minimum BPS              The lowest acceptable line speed (in
                            bits/second) for this session.
   Maximum BPS              The highest acceptable line speed (in
                            bits/second) for this session.
   Bearer Type              A value indicating the bearer capability
                            required for this outgoing call.  The
                            currently defined values are:
                                  1 - Call to be placed on an analog
                                      channel
                                  2 - Call to be placed on a digital
                                      channel
                                  3 - Call can be placed on any type of
                                      channel
   Framing Type             A value indicating the type of PPP framing
                            to be used for this outgoing call.
                                  1 - Call to use Asynchronous framing
                                  2 - Call to use Synchronous framing
                                  3 - Call can use either type of
                                      framing
   Packet Recv. Window Size The number of received data packets the PNS
                            will buffer for this session.
   Packet Processing Delay  A measure of the packet processing delay
                            that might be imposed on data sent to the
                            PNS from the PAC.  This value is specified
                            in units of 1/10 seconds.  For the PNS this
                            number should be very small.  See section
                            4.4 for a description of how this value is
                            determined and used.
   Phone Number Length      The actual number of valid digits in the
                            Phone Number field.
   Reserved1                This field MUST be 0.
   Phone Number             The number to be dialed to establish the
                            outgoing session.  For ISDN and analog calls
                            this field is an ASCII string.  If the Phone
                            Number is less than 64 octets in length, the
                            remainder of this field is filled with
                            octets of value 0.
   Subaddress               A 64 octet field used to specify additional
                            dialing information.  If the subaddress is
                            less than 64 octets long, the remainder of
                            this field is filled with octets of value 0.
2.8.  Outgoing-Call-Reply
   The Outgoing-Call-Reply is a PPTP control message sent by the PAC to
   the PNS in response to a received Outgoing-Call-Request message.  The
   reply indicates the result of the outgoing call attempt.  It also
   provides information to the PNS about particular parameters used for
   the call.  It provides information to allow the PNS to regulate the
   transmission of data to the PAC for this session.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |       Peer's Call ID          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Result Code  |  Error Code   |          Cause Code           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Connect Speed                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Packet Recv. Window Size    |    Packet Processing Delay    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Physical Channel ID                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     8 for Outgoing-Call-Reply.
   Reserved0                This field MUST be 0.
   Call ID                  A unique identifier for the tunnel, assigned
                            by the PAC to this session.  It is used to
                            multiplex and demultiplex data sent over the
                            tunnel between the PNS and PAC involved in
                            this session.
   Peer's Call ID           This field is set to the value received in
                            the Call ID field of the corresponding
                            Outgoing-Call-Request message.  It is used
                            by the PNS to match the Outgoing-Call-Reply
                            with the Outgoing-Call-Request it issued. It
                            also is used as the value sent in the GRE
                            header for mux/demuxing.
   Result Code              This value indicates the result of the
                            Outgoing-Call-Request attempt.  Currently
                            valid values are:
                                  1 (Connected) - Call established with
                                    no errors
                                  2 (General Error) - Outgoing Call not
                                    established for the reason indicated
                                    in Error Code
                                  3 (No Carrier) - Outgoing Call failed
                                    due to no carrier detected
                                  4 (Busy) - Outgoing Call failed due to
                                    detection of a busy signal
                                  5 (No Dial Tone) - Outgoing Call
                                    failed due to lack of a dial tone
                                  6 (Time-out) - Outgoing Call was not
                                    established within time allotted by
                                    PAC
                                  7 (Do Not Accept) - Outgoing Call
                                    administratively prohibited
   Error Code               This field is set to 0 unless a "General
                            Error" condition exists, in which case
                            Result Code is set to 2 and this field is
                            set to the value corresponding to the
                            general error condition as specified in
                            section 2.2.
   Cause Code               This field gives additional failure
                            information.  Its value can vary depending
                            upon the type of call attempted.  For ISDN
                            call attempts it is the Q.931 cause code.
   Connect Speed            The actual connection speed used, in
                            bits/second.
   Packet Recv. Window Size The number of received data packets the PAC
                            will buffer for this session.
   Packet Processing Delay  A measure of the packet processing delay
                            that might be imposed on data sent to the
                            PAC from the PNS.  This value is specified
                            in units of 1/10 seconds.  For the PAC, this
                            number is related to the size of the buffer
                            used to hold packets to be sent to the
                            client and to the speed of the link to the
                            client.  This value should be set to the
                            maximum delay that can normally occur
                            between the time a packet arrives at the PAC
                            and is delivered to the client.  See section
                            4.4 for an example of how this value is
                            determined and used.
   Physical Channel ID      This field is set by the PAC in a vendor-
                            specific manner to the physical channel
                            number used to place this call.  It is used
                            for logging purposes only.
2.9.  Incoming-Call-Request
   The Incoming-Call-Request is a PPTP control message sent by the PAC
   to the PNS to indicate that an inbound call is to be established from
   the PAC.  This request provides the PNS with parameter information
   for the incoming call.
   This message is the first in the "three-way handshake" used by PPTP
   for establishing incoming calls.  The PAC may defer answering the
   call until it has received an Incoming-Call-Reply from the PNS
   indicating that the call should be established. This mechanism allows
   the PNS to obtain sufficient information about the call before it is
   answered to determine whether the call should be answered or not.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |      Call Serial Number       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Call Bearer Type                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Physical Channel ID                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Dialed Number Length      |     Dialing Number Length     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                   Dialed Number (64 octets)                   +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                  Dialing Number (64 octets)                   +
      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                    Subaddress (64 octets)                     +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     9 for Incoming-Call-Request.
   Reserved0                This field MUST be 0.
   Call ID                  A unique identifier for this tunnel,
                            assigned by the PAC to this session.  It is
                            used to multiplex and demultiplex data sent
                            over the tunnel between the PNS and PAC
                            involved in this session.
   Call Serial Number       An identifier assigned by the PAC to this
                            session for the purpose of identifying this
                            particular session in logged session
                            information.  Unlike the Call ID, both the
                            PNS and PAC associate the same Call Serial
                            Number to a given session. The combination
                            of IP address and call serial number should
                            be unique.
   Bearer Type              A value indicating the bearer capability
                            used for this incoming call.  Currently
                            defined values are:
                                  1 - Call is on an analog channel
                                  2 - Call is on a digital channel
   Physical Channel ID      This field is set by the PAC in a vendor-
                            specific manner to the number of the
                            physical channel this call arrived on.
   Dialed Number Length     The actual number of valid digits in the
                            Dialed Number field.
   Dialing Number Length    The actual number of valid digits in the
                            Dialing Number field.
   Dialed Number            The number that was dialed by the caller.
                            For ISDN and analog calls this field is an
                            ASCII string.  If the Dialed Number is less
                            than 64 octets in length, the remainder of
                            this field is filled with octets of value 0.
   Dialing Number           The number from which the call was placed.
                            For ISDN and analog calls this field is an
                            ASCII string.  If the Dialing Number is less
                            than 64 octets in length, the remainder of
                            this field is filled with octets of value 0.
   Subaddress               A 64 octet field used to specify additional
                            dialing information.  If the subaddress is
                            less than 64 octets long, the remainder of
                            this field is filled with octets of value 0.
2.10.  Incoming-Call-Reply
   The Incoming-Call-Reply is a PPTP control message sent by the PNS to
   the PAC in response to a received Incoming-Call-Request message.  The
   reply indicates the result of the incoming call attempt.  It also
   provides information to allow the PAC to regulate the transmission of
   data to the PNS for this session.
   This message is the second in the three-way handshake used by PPTP
   for establishing incoming calls.  It indicates to the PAC whether the
   call should be answered or not.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |       Peer's Call ID          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Result Code  |  Error Code   |   Packet Recv. Window Size    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Packet Transmit Delay     |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     10 for Incoming-Call-Reply.
   Reserved0                This field MUST be 0.
   Call ID                  A unique identifier for this tunnel assigned
                            by the PNS to this session.  It is used to
                            multiplex and demultiplex data sent over the
                            tunnel between the PNS and PAC involved in
                            this session.
   Peer's Call ID           This field is set to the value received in
                            the Call ID field of the corresponding
                            Incoming-Call-Request message. It is used by
                            the PAC to match the Incoming-Call-Reply
                            with the Incoming-Call-Request it issued.
                            This value is included in the GRE header of
                            transmitted data packets for this session.
   Result Code              This value indicates the result of the
                            Incoming-Call-Request attempt.  Current
                            valid Result Code values are:
                                  1 (Connect) - The PAC should answer
                                    the incoming call
                                  2 (General Error) - The Incoming Call
                                    should not be established due to the
                                    reason indicated in Error Code
                                  3 (Do Not Accept) - The PAC should not
                                    accept the incoming call.  It should
                                    hang up or issue a busy indication
   Error Code               This field is set to 0 unless a "General
                            Error" condition exists, in which case
                            Result Code is set to 2 and this field is
                            set to the value corresponding to the
                            general error condition as specified in
                            section 2.2.
   Packet Recv. Window Size The number of received data packets the PAC
                            will buffer for this session.
   Packet Transmit Delay    A measure of the packet processing delay
                            that might be imposed on data sent to the
                            PAC from the PNS.  This value is specified
                            in units of 1/10 seconds.
   Reserved1                This field MUST be 0.
2.11.  Incoming-Call-Connected
   The Incoming-Call-Connected message is a PPTP control message sent by
   the PAC to the PNS in response to a received Incoming-Call-Reply.  It
   provides information to the PNS about particular parameters used for
   the call.  It also provides information to allow the PNS to regulate
   the transmission of data to the PAC for this session.
   This message is the third in the three-way handshake used by PPTP for
   establishing incoming calls.  It provides a mechanism for providing
   the PNS with additional information about the call that cannot, in
   general, be obtained at the time the Incoming-Call-Request is issued
   by the PAC.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Peer's Call ID          |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Connect Speed                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Packet Recv. Window Size    |     Packet Transmit Delay     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Framing Type                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     11 for Incoming-Call-Connected.
   Reserved0                This field MUST be 0.
   Peer's Call ID           This field is set to the value received in
                            the Call ID field of the corresponding
                            Incoming-Call-Reply message.  It is used by
                            the PNS to match the Incoming-Call-Connected
                            with the Incoming-Call-Reply it issued.
   Connect Speed            The actual connection speed used, in
                            bits/second.
   Packet Recv. Window Size The number of received data packets the PAC
                            will buffer for this session.
   Packet Transmit Delay    A measure of the packet processing delay
                            that might be imposed on data sent to the
                            PAC from the PNS.  This value is specified
                            in units of 1/10 seconds.
   Framing Type             A value indicating the type of PPP framing
                            being used by this incoming call.
                                  1 - Call uses asynchronous framing
                                  2 - Call uses synchronous framing
2.12.  Call-Clear-Request
   The Call-Clear-Request is a PPTP control message sent by the PNS to
   the PAC indicating that a particular call is to be disconnected.  The
   call being cleared can be either an incoming or outgoing call, in any
   state.  The PAC responds to this message with a Call-Disconnect-
   Notify message.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     12 for Call-Clear-Request.
   Reserved0                This field MUST be 0.
   Call ID                  The Call ID assigned by the PNS to this
                            call.  This value is used instead of the
                            Peer's Call ID because the latter may not be
                            known to the PNS if the call must be aborted
                            during call establishment.
   Reserved1                This field MUST be 0.
2.13.  Call-Disconnect-Notify
   The Call-Disconnect-Notify message is a PPTP control message sent by
   the PAC to the PNS.  It is issued whenever a call is disconnected,
   due to the receipt by the PAC of a Call-Clear-Request or for any
   other reason.  Its purpose is to inform the PNS of both the
   disconnection and the reason for it.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |  Result Code  |  Error Code   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Cause Code           |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +              Call Statistics (128 octets)                     +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     13 for Call-Disconnect-Notify.
   Reserved0                This field MUST be 0.
   Call ID                  The value of the Call ID assigned by the PAC
                            to this call.  This value is used instead of
                            the Peer's Call ID because the latter may
                            not be known to the PNS if the call must be
                            aborted during call establishment.
   Result Code              This value indicates the reason for the
                            disconnect. Current valid Result Code values
                            are:
                                  1 (Lost Carrier) - Call disconnected
                                    due to loss of carrier
                                  2 (General Error) - Call disconnected
                                    for the reason indicated in Error
                                    Code
                                  3 (Admin Shutdown) - Call disconnected
                                    for administrative reasons
                                  4 (Request) - Call disconnected due to
                                    received Call-Clear-Request
   Error Code               This field is set to 0 unless a "General
                            Error" condition exists, in which case the
                            Result Code is set to 2 and this field is
                            set to the value corresponding to the
                            general error condition as specified in
                            section 2.2.
   Cause Code               This field gives additional disconnect
                            information.  Its value varies depending on
                            the type of call being disconnected.  For
                            ISDN calls it is the Q.931 cause code.
   Call Statistics          This field is an ASCII string containing
                            vendor-specific call statistics that can be
                            logged for diagnostic purposes.  If the
                            length of the string is less than 128, the
                            remainder of the field is filled with octets
                            of value 0.
2.14.  WAN-Error-Notify
   The WAN-Error-Notify message is a PPTP control message sent by the
   PAC to the PNS to indicate WAN error conditions (conditions that
   occur on the interface supporting PPP).  The counters in this message
   are cumulative.  This message should only be sent when an error
   occurs, and not more than once every 60 seconds.  The counters are
   reset when a new call is established.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Peer's Call ID         |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          CRC Errors                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Framing Errors                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Hardware Overruns                       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Buffer Overruns                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Time-out Errors                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Alignment Errors                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     14 for WAN-Error-Notify.
   Reserved0                This field MUST be 0.
   Peer's Call ID           Th Call ID assigned by the PNS to this call.
   CRC Errors               Number of PPP frames received with CRC
                            errors since session was established.
   Framing Errors           Number of improperly framed PPP packets
                            received.
   Hardware Overruns        Number of receive buffer over-runs since
                            session was established.
   Buffer Overruns          Number of buffer over-runs detected since
                            session was established.
   Time-out Errors          Number of time-outs since call was
                            established.
   Alignment Errors         Number of alignment errors since call was
                            established.
2.15.  Set-Link-Info
   The Set-Link-Info message is a PPTP control message sent by the PNS
   to the PAC to set PPP-negotiated options.  Because these options can
   change at any time during the life of the call, the PAC must be able
   to update its internal call information dynamically and perform PPP
   negotiation on an active PPP session.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Peer's Call ID         |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Send ACCM                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Receive ACCM                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Length                   Total length in octets of this PPTP message,
                            including the entire PPTP header.
   PPTP Message Type        1 for Control Message.
   Magic Cookie             0x1A2B3C4D.
   Control Message Type     15 for Set-Link-Info.
   Reserved0                This field MUST be 0.
   Peer's Call ID           The value of the Call ID assigned by the PAC
                            to this call.
   Reserved1                This field MUST be 0.
   Send ACCM                The send ACCM value the client should use to
                            process outgoing PPP packets.  The default
                            value used by the client until this message
                            is received is 0XFFFFFFFF.  See [7].
   Receive ACCM             The receive ACCM value the client should use
                            to process incoming PPP packets. The default
                            value used by the client until this message
                            is received is 0XFFFFFFFF.  See [7].
2.16.  General Error Codes
   General error codes pertain to types of errors which are not specific
   to any particular PPTP request, but rather to protocol or message
   format errors.  If a PPTP reply indicates in its Result Code that a
   general error occurred, the General Error value should be examined to
   determined what the error was.  The currently defined General Error
   codes and their meanings are:
      0 (None)          - No general error
      1 (Not-Connected) - No control connection exists yet for this
                          PAC-PNS pair
      2 (Bad-Format)    - Length is wrong or Magic Cookie value is
                          incorrect
      3 (Bad-Value)     - One of the field values was out of range or
                          reserved field was non-zero
      4 (No-Resource)   - Insufficient resources to handle this command
                          now
      5 (Bad-Call ID)    - The Call ID is invalid in this context
      6 (PAC-Error)     - A generic vendor-specific error occurred in
                          the PAC