All files / node-coap/lib middlewares.js

100% Statements 38/38
100% Branches 14/14
100% Functions 5/5
100% Lines 37/37

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83                    1x 1x 1x 1x     820x 820x 818x   2x         817x 6x   811x 811x 809x   2x         26x 23x 7x       26x 7x 3x     7x 7x   19x         9x       25x 6x     19x 19x 9x   9x 2x   9x   10x         1x 1x 1x 1x  
'use strict'
 
/*
 * Copyright (c) 2013-2021 node-coap contributors.
 *
 * node-coap is licensed under an MIT +no-false-attribs license.
 * All rights not explicitly granted in the MIT license are reserved.
 * See the included LICENSE file for more details.
 */
 
var crypto   = require('crypto')
  , parse    = require('coap-packet').parse
  , or       = require('./helpers').or
  , isOption = require('./helpers').isOption
 
function parseRequest(request, next) {
  try {
    request.packet = parse(request.raw)
    next(null)
  } catch (err) {
    next(err)
  }
}
 
function handleServerRequest(request, next) {
  if (request.proxy) {
    return next()
  }
  try {
    request.server._handle(request.packet, request.rsinfo)
    next(null)
  } catch (err) {
    next(err)
  }
}
 
function proxyRequest(request, next) {
  for (var i = 0; i < request.packet.options.length; i++) {
    if (request.packet.options[i].name.toLowerCase() === 'proxy-uri') {
      request.proxy = request.packet.options[i].value.toString()
    }
  }
 
  if (request.proxy) {
    if (request.packet.token.length === 0) {
      request.packet.token = crypto.randomBytes(8)
    }
 
    request.server._proxiedRequests[request.packet.token.toString('hex')] = request
    request.server._sendProxied(request.packet, request.proxy, next)
  } else {
    next(null)
  }
}
 
function isObserve(packet) {
  return packet.options.map(isOption('Observe')).reduce(or, false)
}
 
function handleProxyResponse(request, next) {
  if (request.proxy) {
    return next(null)
  }
 
  var originalProxiedRequest = request.server._proxiedRequests[request.packet.token.toString('hex')]
  if ( originalProxiedRequest ) {
    request.server._sendReverseProxied(request.packet, originalProxiedRequest.rsinfo)
 
    if (!isObserve(request.packet))
      delete request.server._proxiedRequests[request.packet.token.toString('hex')]
 
    next(null)
  } else {
    next()
  }
}
 
 
exports.parseRequest = parseRequest
exports.handleServerRequest = handleServerRequest
exports.proxyRequest = proxyRequest
exports.handleProxyResponse = handleProxyResponse