1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 'use strict'
- module.exports = forwarded
- function forwarded (req) {
- if (!req) {
- throw new TypeError('argument req is required')
- }
-
- var proxyAddrs = parse(req.headers['x-forwarded-for'] || '')
- var socketAddr = req.connection.remoteAddress
- var addrs = [socketAddr].concat(proxyAddrs)
-
- return addrs
- }
- function parse (header) {
- var end = header.length
- var list = []
- var start = header.length
-
- for (var i = header.length - 1; i >= 0; i--) {
- switch (header.charCodeAt(i)) {
- case 0x20:
- if (start === end) {
- start = end = i
- }
- break
- case 0x2c:
- if (start !== end) {
- list.push(header.substring(start, end))
- }
- start = end = i
- break
- default:
- start = i
- break
- }
- }
-
- if (start !== end) {
- list.push(header.substring(start, end))
- }
- return list
- }
|