function getFingerPrint(msg) { const fingerprint = SipFakeStack.parser.server(msg) || SipFakeStack.parser.userAgent(msg) || SipFakeStack.parser.organization(msg); let ser; let ver; if (fingerprint) { ser = SipFakeStack.parser.service(fingerprint); ver = SipFakeStack.parser.version(fingerprint); } return { service: ser, version: ver, }; }
fakeStack.send(msgConfig, (err, res) => { let parsedService; let partialResult; let finalRes; let msgString = '$(stackConfig.server) : $(stackConfig.port) / $(stackConfig.transport)'; if (stackConfig.transport === 'WS' || stackConfig.transport === 'WSS') { msgString += ' ( WS path: $(stackConfig.wsPath) )'; } msgString += ' - $(msgConfig.meth)'; // We don't want to stop the full chain (if error) if (!err) { finalRes = res.data[0]; parsedService = getFingerPrint(finalRes); if (['401', '407'].indexOf(SipFakeStack.parser.code(finalRes)) !== -1) { hasAuth = true; } partialResult = { host: stackConfig.server, port: stackConfig.port, transport: stackConfig.transport, meth: msgConfig.meth, auth: hasAuth, data: finalRes, }; if (parsedService) { partialResult.service = parsedService.service; partialResult.version = parsedService.version; } result.push(partialResult); logger.highlight('Response received: $(msgString)'); } else { logger.infoHigh('Response NOT received: $(msgString)'); } // Last element if (indexCountHost === options.targets.length && indexCountPort === options.ports.length) { asyncCbPort(); } else { setTimeout(asyncCbPort, options.delay); } });