rsocket / rsocket-js

JavaScript implementation of RSocket
https://github.com/rsocket/rsocket-js
Apache License 2.0
604 stars 97 forks source link

Metadata (M) flag is not set from responder side when `metadata` has length #198

Open viglucci opened 2 years ago

viglucci commented 2 years ago

In _sendStreamPayload of RSocketMachineImpl, when flags is created, the flag for present Metadata (M) is not set, which causes the payload.metadata value to not be included in the encoded payload later in serializePayloadFrame.

https://github.com/rsocket/rsocket-js/blob/master/packages/rsocket-core/src/RSocketMachine.js#L885

Expected Behavior

Per spec, Metadata (M) flag must be set when the payload contains metadata.

Actual Behavior

Metadata (M) flag is not set, and the resulting encoded payload does not include metadata.

Steps to Reproduce

Attempt to send any metadata value on a payload from requestResponse or requestStream, the value received on the client will be null.

Possible Solution

if (metadata && metadata.length > 0) {
  // eslint-disable-next-line no-bitwise
  flags |= _RSocketFrame.FLAGS.METADATA;
}

Your Environment

sudongyuer commented 2 years ago

Thanks ~

sudongyuer commented 2 years ago

I use[ Buffer.from] api, and website metadata still null , i don't known why

genesys-ppotapov commented 2 years ago

@viglucci, @OlegDokuka, I see this issue is fixed in #200 two months ago. When do you plan to release fixed version?

viglucci commented 2 years ago

Hi @genesys-ppotapov, unfortunately, we can't give a firm timeline for our next release at the moment. We are working towards cutting some releases, both for the existing 0.x, as well as a 1.0.0-alpha, but I don't have any firm dates to share at this time.

genesys-ppotapov commented 2 years ago

@viglucci, I see. Thank you for the information.