Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4674902

(fmspec) deficiencies in RMI (JRMP) wire protocol specification

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P4 P4
    • None
    • 1.4.0
    • core-libs
    • Fix Understood
    • sparc
    • solaris_8

      The Java Remote Method Invocation Specification's Chapter 10, "RMI Wire
      Protocol", which is really the specification for the JRMP wire protocol,
      includes the following deficiencies:

      - The "Version" component of the connection header sent by the client is
      specified (in section 10.2.1) to be the literal sequence of octets 0x00 0x01.
      In reality, however, this sequence has always been 0x00 0x02 since RMI first
      became part of Java (in JDK 1.1), so it appears as if the spec is only
      specifying an earlier version of the protocol than has always been provided.
      The spec should be updated to specify that 0x00 0x02 is the only value of
      "Version" supported, because no FCS version of RMI (JRMP) has ever supported
      0x00 0x01.

      - The "endpoint negotiation" for the StreamProtocol and the MultiplexProtocol is described tangentially and vaguely in this text from section 10.2.1:

          For the StreamProtocol and the MultiplexProtocol, the server must respond
          with a a [sic] byte 0x4e acknowledging support for the protocol, and an
          EndpointIdentifier that contains the host name and port number that the
          server can see is being used by the client. The client can use this
          information to determine its host name if it is otherwise unable to do that
          for security reasons. The client must then respond with another
          EndpointIdentifier that contains the client's default endpoint for accepting
          connections. This can be used by a server in the MultiplexProtocol case to
          identify the client.

          For the StreamProtocol, after this endpoint negotiation...

      The wire format of these EndointIdentifier entities is not specified (in
      reality, the format is the host IP string in DataOutput.writeUTF format followed
      by the port number in DataOutput.writeInt format). Also, this piece of the
      protocol is not well integrated into the surrounding description, such as in the
      grammars for "Out" or "In". In particular, section 10.2.2 "Format of an Input
      Stream" makes no mention of it at all (it needs to be implied from 10.2.1), so
      an isolated look at that section would seem to indicate that "ProtocolAck"
      should always be directly followed by "Returns".

            Unassigned Unassigned
            peterjones Peter Jones (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Imported:
              Indexed: