diff --git a/packages/grpc-js/package.json b/packages/grpc-js/package.json index c866a57f..7276e8c4 100644 --- a/packages/grpc-js/package.json +++ b/packages/grpc-js/package.json @@ -1,6 +1,6 @@ { "name": "@grpc/grpc-js", - "version": "0.7.6", + "version": "0.7.7", "description": "gRPC Library for Node - pure JS implementation", "homepage": "https://grpc.io/", "repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js", diff --git a/packages/grpc-js/src/call-stream.ts b/packages/grpc-js/src/call-stream.ts index 70c728e0..443d5ebf 100644 --- a/packages/grpc-js/src/call-stream.ts +++ b/packages/grpc-js/src/call-stream.ts @@ -353,7 +353,11 @@ export class Http2CallStream implements Call { } private handleTrailers(headers: http2.IncomingHttpHeaders) { - this.trace('received HTTP/2 trailing headers frame'); + let headersString = ''; + for (const header of Object.keys(headers)) { + headersString += '\t\t' + header + ': ' + headers[header] + '\n' + } + this.trace('Received server trailers:\n' + headersString); let metadata: Metadata; try { metadata = Metadata.fromHttp2Headers(headers); @@ -366,6 +370,7 @@ export class Http2CallStream implements Call { const receivedStatus = Number(metadataMap['grpc-status']); if (receivedStatus in Status) { code = receivedStatus; + this.trace('received status code ' + receivedStatus + ' from server'); } metadata.remove('grpc-status'); } @@ -373,6 +378,7 @@ export class Http2CallStream implements Call { if (typeof metadataMap['grpc-message'] === 'string') { details = decodeURI(metadataMap['grpc-message']); metadata.remove('grpc-message'); + this.trace('received status details string "' + details + '" from server'); } const status: StatusObject = { code, details, metadata }; let finalStatus; @@ -407,7 +413,11 @@ export class Http2CallStream implements Call { subchannel.addDisconnectListener(this.disconnectListener); subchannel.callRef(); stream.on('response', (headers, flags) => { - this.trace('received HTTP/2 headers frame'); + let headersString = ''; + for (const header of Object.keys(headers)) { + headersString += '\t\t' + header + ': ' + headers[header] + '\n' + } + this.trace('Received server headers:\n' + headersString); switch (headers[':status']) { // TODO(murgatroid99): handle 100 and 101 case 400: @@ -568,6 +578,7 @@ export class Http2CallStream implements Call { } cancelWithStatus(status: Status, details: string): void { + this.trace('cancelWithStatus code: ' + status + ' details: "' + details + '"'); this.destroyHttp2Stream(); this.endCall({ code: status, details, metadata: new Metadata() }); } diff --git a/packages/grpc-js/src/compression-filter.ts b/packages/grpc-js/src/compression-filter.ts index 0949840f..6f40ee4b 100644 --- a/packages/grpc-js/src/compression-filter.ts +++ b/packages/grpc-js/src/compression-filter.ts @@ -169,8 +169,8 @@ export class CompressionFilter extends BaseFilter implements Filter { private receiveCompression: CompressionHandler = new IdentityHandler(); async sendMetadata(metadata: Promise): Promise { const headers: Metadata = await metadata; - headers.set('grpc-encoding', 'identity'); headers.set('grpc-accept-encoding', 'identity,deflate,gzip'); + headers.set('accept-encoding', 'identity,gzip'); return headers; } diff --git a/packages/grpc-js/src/resolver-dns.ts b/packages/grpc-js/src/resolver-dns.ts index 4da295e1..82727a42 100644 --- a/packages/grpc-js/src/resolver-dns.ts +++ b/packages/grpc-js/src/resolver-dns.ts @@ -298,10 +298,16 @@ class DnsResolver implements Resolver { IPV6_REGEX.exec(target) || IPV6_BRACKET_REGEX.exec(target); if (ipMatch) { + if (ipMatch[2]) { + return ipMatch[1] + ':' + ipMatch[2]; + } return ipMatch[1]; } const dnsMatch = DNS_REGEX.exec(target); if (dnsMatch) { + if (dnsMatch[2]) { + return dnsMatch[1] + ':' + dnsMatch[2]; + } return dnsMatch[1]; } throw new Error(`Failed to parse target ${target}`); diff --git a/packages/grpc-js/src/subchannel.ts b/packages/grpc-js/src/subchannel.ts index d9581ee2..64799a49 100644 --- a/packages/grpc-js/src/subchannel.ts +++ b/packages/grpc-js/src/subchannel.ts @@ -298,8 +298,6 @@ export class Subchannel { return checkServerIdentity(sslTargetNameOverride, cert); }; connectionOptions.servername = sslTargetNameOverride; - } else { - connectionOptions.servername = getDefaultAuthority(this.channelTarget); } if (socket) { connectionOptions.socket = socket; @@ -589,6 +587,11 @@ export class Subchannel { headers[HTTP2_HEADER_PATH] = callStream.getMethod(); headers[HTTP2_HEADER_TE] = 'trailers'; const http2Stream = this.session!.request(headers); + let headersString = ''; + for (const header of Object.keys(headers)) { + headersString += '\t\t' + header + ': ' + headers[header] + '\n' + } + trace('Starting stream with headers\n' + headersString); callStream.attachHttp2Stream(http2Stream, this); }