52. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 10/24/2017 6:38:26 AM Central Daylight Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

52.1 Files compared

# Location File Last Modified
1 CHAMP_VA1.zip\CHAMP_VA1\node_modules\mocha-phantomjs\node_modules\phantomjs\node_modules\request\node_modules\tunnel-agent index.js Mon Oct 16 21:06:50 2017 UTC
2 CHAMP_VA1.zip\CHAMP_VA1\node_modules\mocha-phantomjs\node_modules\phantomjs\node_modules\request\node_modules\tunnel-agent index.js Mon Oct 23 19:54:58 2017 UTC

52.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 3 482
Changed 2 4
Inserted 0 0
Removed 0 0

52.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

52.4 Active regular expressions

No regular expressions were active.

52.5 Comparison detail

  1   'use stric t'
  2  
  3   var net =  require('n et')
  4     , tls =  require('t ls')
  5     , http =  require(' http')
  6     , https  = require( 'https')
  7     , events  = require ('events')
  8     , assert  = require ('assert')
  9     , util =  require(' util')
  10     ;
  11  
  12   exports.ht tpOverHttp  = httpOve rHttp
  13   exports.ht tpsOverHtt p = httpsO verHttp
  14   exports.ht tpOverHttp s = httpOv erHttps
  15   exports.ht tpsOverHtt ps = https OverHttps
  16  
  17  
  18   function h ttpOverHtt p(options)  {
  19     var agen t = new Tu nnelingAge nt(options )
  20     agent.re quest = ht tp.request
  21     return a gent
  22   }
  23  
  24   function h ttpsOverHt tp(options ) {
  25     var agen t = new Tu nnelingAge nt(options )
  26     agent.re quest = ht tp.request
  27     agent.cr eateSocket  = createS ecureSocke t
  28       agent.defa ultPort =  PORT
  29     return a gent
  30   }
  31  
  32   function h ttpOverHtt ps(options ) {
  33     var agen t = new Tu nnelingAge nt(options )
  34     agent.re quest = ht tps.reques t
  35     return a gent
  36   }
  37  
  38   function h ttpsOverHt tps(option s) {
  39     var agen t = new Tu nnelingAge nt(options )
  40     agent.re quest = ht tps.reques t
  41     agent.cr eateSocket  = createS ecureSocke t
  42       agent.defa ultPort =  PORT
  43     return a gent
  44   }
  45  
  46  
  47   function T unnelingAg ent(option s) {
  48     var self  = this
  49     self.opt ions = opt ions || {}
  50     self.pro xyOptions  = self.opt ions.proxy  || {}
  51     self.max Sockets =  self.optio ns.maxSock ets || htt p.Agent.de faultMaxSo ckets
  52     self.req uests = []
  53     self.soc kets = []
  54  
  55     self.on( 'free', fu nction onF ree(socket , host, po rt) {
  56       for (v ar i = 0,  len = self .requests. length; i  < len; ++i ) {
  57         var  pending =  self.reque sts[i]
  58         if ( pending.ho st === hos t && pendi ng.port == = port) {
  59           //  Detect th e request  to connect  same orig in server,
  60           //  reuse the  connectio n.
  61           se lf.request s.splice(i , 1)
  62           pe nding.requ est.onSock et(socket)
  63           re turn
  64         }
  65       }
  66       socket .destroy()
  67       self.r emoveSocke t(socket)
  68     })
  69   }
  70   util.inher its(Tunnel ingAgent,  events.Eve ntEmitter)
  71  
  72   TunnelingA gent.proto type.addRe quest = fu nction add Request(re q, options ) {
  73     var self  = this
  74  
  75      // Lega cy API: ad dRequest(r eq, host,  port, path )
  76     if (type of options  === 'stri ng') {
  77       option s = {
  78         host : options,
  79         port : argument s[2],
  80         path : argument s[3]
  81       };
  82     }
  83  
  84     if (self .sockets.l ength >= t his.maxSoc kets) {
  85       // We  are over l imit so we 'll add it  to the qu eue.
  86       self.r equests.pu sh({host:  options.ho st, port:  options.po rt, reques t: req})
  87       return
  88     }
  89  
  90     // If we  are under  maxSocket s create a  new one.
  91     self.cre ateConnect ion({host:  options.h ost, port:  options.p ort, reque st: req})
  92   }
  93  
  94   TunnelingA gent.proto type.creat eConnectio n = functi on createC onnection( pending) {
  95     var self  = this
  96  
  97     self.cre ateSocket( pending, f unction(so cket) {
  98       socket .on('free' , onFree)
  99       socket .on('close ', onClose OrRemove)
  100       socket .on('agent Remove', o nCloseOrRe move)
  101       pendin g.request. onSocket(s ocket)
  102  
  103       functi on onFree( ) {
  104         self .emit('fre e', socket , pending. host, pend ing.port)
  105       }
  106  
  107       functi on onClose OrRemove(e rr) {
  108         self .removeSoc ket(socket )
  109         sock et.removeL istener('f ree', onFr ee)
  110         sock et.removeL istener('c lose', onC loseOrRemo ve)
  111         sock et.removeL istener('a gentRemove ', onClose OrRemove)
  112       }
  113     })
  114   }
  115  
  116   TunnelingA gent.proto type.creat eSocket =  function c reateSocke t(options,  cb) {
  117     var self  = this
  118     var plac eholder =  {}
  119     self.soc kets.push( placeholde r)
  120  
  121     var conn ectOptions  = mergeOp tions({},  self.proxy Options, 
  122       { meth od: 'CONNE CT'
  123       , path : options. host + ':'  + options .port
  124       , agen t: false
  125       }
  126     )
  127     if (conn ectOptions .proxyAuth ) {
  128       connec tOptions.h eaders = c onnectOpti ons.header s || {}
  129       connec tOptions.h eaders['Pr oxy-Author ization']  = 'Basic '  +
  130           ne w Buffer(c onnectOpti ons.proxyA uth).toStr ing('base6 4')
  131     }
  132  
  133     debug('m aking CONN ECT reques t')
  134     var conn ectReq = s elf.reques t(connectO ptions)
  135     connectR eq.useChun kedEncodin gByDefault  = false / / for v0.6
  136     connectR eq.once('r esponse',  onResponse ) // for v 0.6
  137     connectR eq.once('u pgrade', o nUpgrade)    // for v 0.6
  138     connectR eq.once('c onnect', o nConnect)    // for v 0.7 or lat er
  139     connectR eq.once('e rror', onE rror)
  140     connectR eq.end()
  141  
  142     function  onRespons e(res) {
  143       // Ver y hacky. T his is nec essary to  avoid http -parser le aks.
  144       res.up grade = tr ue
  145     }
  146  
  147     function  onUpgrade (res, sock et, head)  {
  148       // Hac ky.
  149       proces s.nextTick (function( ) {
  150         onCo nnect(res,  socket, h ead)
  151       })
  152     }
  153  
  154     function  onConnect (res, sock et, head)  {
  155       connec tReq.remov eAllListen ers()
  156       socket .removeAll Listeners( )
  157  
  158       if (re s.statusCo de === 200 ) {
  159         asse rt.equal(h ead.length , 0)
  160         debu g('tunneli ng connect ion has es tablished' )
  161         self .sockets[s elf.socket s.indexOf( placeholde r)] = sock et
  162         cb(s ocket)
  163       } else  {
  164         debu g('tunneli ng socket  could not  be establi shed, stat usCode=%d' , res.stat usCode)
  165         var  error = ne w Error('t unneling s ocket coul d not be e stablished , ' + 'sta tusCode='  + res.stat usCode)
  166         erro r.code = ' ECONNRESET '
  167         opti ons.reques t.emit('er ror', erro r)
  168         self .removeSoc ket(placeh older)
  169       }
  170     }
  171  
  172     function  onError(c ause) {
  173       connec tReq.remov eAllListen ers()
  174  
  175       debug( 'tunneling  socket co uld not be  establish ed, cause= %s\n', cau se.message , cause.st ack)
  176       var er ror = new  Error('tun neling soc ket could  not be est ablished,  ' + 'cause =' + cause .message)
  177       error. code = 'EC ONNRESET'
  178       option s.request. emit('erro r', error)
  179       self.r emoveSocke t(placehol der)
  180     }
  181   }
  182  
  183   TunnelingA gent.proto type.remov eSocket =  function r emoveSocke t(socket)  {
  184     var pos  = this.soc kets.index Of(socket)
  185     if (pos  === -1) re turn
  186     
  187     this.soc kets.splic e(pos, 1)
  188  
  189     var pend ing = this .requests. shift()
  190     if (pend ing) {
  191       // If  we have pe nding requ ests and a  socket ge ts closed  a new one
  192       // nee ds to be c reated to  take over  in the poo l for the  one that c losed.
  193       this.c reateConne ction(pend ing)
  194     }
  195   }
  196  
  197   function c reateSecur eSocket(op tions, cb)  {
  198     var self  = this
  199     Tunnelin gAgent.pro totype.cre ateSocket. call(self,  options,  function(s ocket) {
  200       // 0 i s dummy po rt for v0. 6
  201       var se cureSocket  = tls.con nect(0, me rgeOptions ({}, self. options, 
  202         { se rvername:  options.ho st
  203         , so cket: sock et
  204         }
  205       ))
  206       self.s ockets[sel f.sockets. indexOf(so cket)] = s ecureSocke t
  207       cb(sec ureSocket)
  208     })
  209   }
  210  
  211  
  212   function m ergeOption s(target)  {
  213     for (var  i = 1, le n = argume nts.length ; i < len;  ++i) {
  214       var ov errides =  arguments[ i]
  215       if (ty peof overr ides === ' object') {
  216         var  keys = Obj ect.keys(o verrides)
  217         for  (var j = 0 , keyLen =  keys.leng th; j < ke yLen; ++j)  {
  218           va r k = keys [j]
  219           if  (override s[k] !== u ndefined)  {
  220              target[k]  = override s[k]
  221           }
  222         }
  223       }
  224     }
  225     return t arget
  226   }
  227  
  228  
  229   var debug
  230   if (proces s.env.NODE _DEBUG &&  /\btunnel\ b/.test(pr ocess.env. NODE_DEBUG )) {
  231     debug =  function()  {
  232       var ar gs = Array .prototype .slice.cal l(argument s)
  233       if (ty peof args[ 0] === 'st ring') {
  234         args [0] = 'TUN NEL: ' + a rgs[0]
  235       } else  {
  236         args .unshift(' TUNNEL:')
  237       }
  238       consol e.error.ap ply(consol e, args)
  239     }
  240   } else {
  241     debug =  function()  {}
  242   }
  243   exports.de bug = debu g // for t est