| 'use strict' | 
|   | 
| var utils = exports | 
|   | 
| var util = require('util') | 
|   | 
| function ProtocolError (code, message) { | 
|   this.code = code | 
|   this.message = message | 
| } | 
| util.inherits(ProtocolError, Error) | 
| utils.ProtocolError = ProtocolError | 
|   | 
| utils.error = function error (code, message) { | 
|   return new ProtocolError(code, message) | 
| } | 
|   | 
| utils.reverse = function reverse (object) { | 
|   var result = [] | 
|   | 
|   Object.keys(object).forEach(function (key) { | 
|     result[object[key] | 0] = key | 
|   }) | 
|   | 
|   return result | 
| } | 
|   | 
| // weight [1, 36] <=> priority [0, 7] | 
| // This way weight=16 is preserved and has priority=3 | 
| utils.weightToPriority = function weightToPriority (weight) { | 
|   return ((Math.min(35, (weight - 1)) / 35) * 7) | 0 | 
| } | 
|   | 
| utils.priorityToWeight = function priorityToWeight (priority) { | 
|   return (((priority / 7) * 35) | 0) + 1 | 
| } | 
|   | 
| // Copy-Paste from node | 
| exports.addHeaderLine = function addHeaderLine (field, value, dest) { | 
|   field = field.toLowerCase() | 
|   if (/^:/.test(field)) { | 
|     dest[field] = value | 
|     return | 
|   } | 
|   | 
|   switch (field) { | 
|     // Array headers: | 
|     case 'set-cookie': | 
|       if (dest[field] !== undefined) { | 
|         dest[field].push(value) | 
|       } else { | 
|         dest[field] = [ value ] | 
|       } | 
|       break | 
|   | 
|     /* eslint-disable max-len */ | 
|     // list is taken from: | 
|     /* eslint-enable max-len */ | 
|     case 'content-type': | 
|     case 'content-length': | 
|     case 'user-agent': | 
|     case 'referer': | 
|     case 'host': | 
|     case 'authorization': | 
|     case 'proxy-authorization': | 
|     case 'if-modified-since': | 
|     case 'if-unmodified-since': | 
|     case 'from': | 
|     case 'location': | 
|     case 'max-forwards': | 
|       // drop duplicates | 
|       if (dest[field] === undefined) { | 
|         dest[field] = value | 
|       } | 
|       break | 
|   | 
|     case 'cookie': | 
|       // make semicolon-separated list | 
|       if (dest[field] !== undefined) { | 
|         dest[field] += '; ' + value | 
|       } else { | 
|         dest[field] = value | 
|       } | 
|       break | 
|   | 
|     default: | 
|       // make comma-separated list | 
|       if (dest[field] !== undefined) { | 
|         dest[field] += ', ' + value | 
|       } else { | 
|         dest[field] = value | 
|       } | 
|   } | 
| } |