@@ -8,7 +8,6 @@ const { async_id_symbol } = process.binding('async_wrap');
88const http = require ( 'http' ) ;
99const binding = process . binding ( 'http2' ) ;
1010const assert = require ( 'assert' ) ;
11- const { Buffer } = require ( 'buffer' ) ;
1211const EventEmitter = require ( 'events' ) ;
1312const net = require ( 'net' ) ;
1413const tls = require ( 'tls' ) ;
@@ -60,8 +59,13 @@ const {
6059 enroll,
6160 unenroll
6261} = require ( 'timers' ) ;
62+ const {
63+ createWriteWrap,
64+ writeGeneric,
65+ writevGeneric
66+ } = require ( 'internal/stream_base_commons' ) ;
6367
64- const { ShutdownWrap, WriteWrap } = process . binding ( 'stream_wrap' ) ;
68+ const { ShutdownWrap } = process . binding ( 'stream_wrap' ) ;
6569const { constants, nameForErrorCode } = binding ;
6670
6771const NETServer = net . Server ;
@@ -1395,28 +1399,6 @@ class ClientHttp2Session extends Http2Session {
13951399 }
13961400}
13971401
1398- function createWriteReq ( req , handle , data , encoding ) {
1399- switch ( encoding ) {
1400- case 'utf8' :
1401- case 'utf-8' :
1402- return handle . writeUtf8String ( req , data ) ;
1403- case 'ascii' :
1404- return handle . writeAsciiString ( req , data ) ;
1405- case 'ucs2' :
1406- case 'ucs-2' :
1407- case 'utf16le' :
1408- case 'utf-16le' :
1409- return handle . writeUcs2String ( req , data ) ;
1410- case 'latin1' :
1411- case 'binary' :
1412- return handle . writeLatin1String ( req , data ) ;
1413- case 'buffer' :
1414- return handle . writeBuffer ( req , data ) ;
1415- default :
1416- return handle . writeBuffer ( req , Buffer . from ( data , encoding ) ) ;
1417- }
1418- }
1419-
14201402function trackWriteState ( stream , bytes ) {
14211403 const session = stream [ kSession ] ;
14221404 stream [ kState ] . writeQueueSize += bytes ;
@@ -1637,16 +1619,12 @@ class Http2Stream extends Duplex {
16371619 if ( ! this . headersSent )
16381620 this [ kProceed ] ( ) ;
16391621
1640- const handle = this [ kHandle ] ;
1641- const req = new WriteWrap ( ) ;
1622+ const req = createWriteWrap ( this [ kHandle ] , afterDoStreamWrite ) ;
16421623 req . stream = this [ kID ] ;
1643- req . handle = handle ;
16441624 req . callback = cb ;
1645- req . oncomplete = afterDoStreamWrite ;
1646- req . async = false ;
1647- const err = createWriteReq ( req , handle , data , encoding ) ;
1648- if ( err )
1649- return this . destroy ( errors . errnoException ( err , 'write' , req . error ) , cb ) ;
1625+
1626+ writeGeneric ( this , req , data , encoding , cb ) ;
1627+
16501628 trackWriteState ( this , req . bytes ) ;
16511629 }
16521630
@@ -1674,22 +1652,12 @@ class Http2Stream extends Duplex {
16741652 if ( ! this . headersSent )
16751653 this [ kProceed ] ( ) ;
16761654
1677- const handle = this [ kHandle ] ;
1678- const req = new WriteWrap ( ) ;
1655+ var req = createWriteWrap ( this [ kHandle ] , afterDoStreamWrite ) ;
16791656 req . stream = this [ kID ] ;
1680- req . handle = handle ;
16811657 req . callback = cb ;
1682- req . oncomplete = afterDoStreamWrite ;
1683- req . async = false ;
1684- const chunks = new Array ( data . length << 1 ) ;
1685- for ( var i = 0 ; i < data . length ; i ++ ) {
1686- const entry = data [ i ] ;
1687- chunks [ i * 2 ] = entry . chunk ;
1688- chunks [ i * 2 + 1 ] = entry . encoding ;
1689- }
1690- const err = handle . writev ( req , chunks ) ;
1691- if ( err )
1692- return this . destroy ( errors . errnoException ( err , 'write' , req . error ) , cb ) ;
1658+
1659+ writevGeneric ( this , req , data , cb ) ;
1660+
16931661 trackWriteState ( this , req . bytes ) ;
16941662 }
16951663
0 commit comments