-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcef.js
94 lines (86 loc) · 1.38 KB
/
cef.js
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
84
85
86
87
88
89
90
91
92
93
94
const FRX = /[a-zA-Z][a-zA-Z0-9]+=/;
const CEP_FIELDS = [
"version",
"deviceVendor",
"deviceProduct",
"deviceVersion",
"deviceEventClassID",
"name",
"severity",
"extension"
]
function splitHeaders(text) {
var arr = [], map = {};
var scape = false;
var fields = 7;
var curr = "";
text.split("").forEach(ch=>{
if(!fields) {
curr += ch;
}
else {
if(ch=="|") {
if(scape) {
scape = false;
curr += ch;
}
else {
arr.push(curr);
curr = "";
fields--;
}
}
else if(ch=="\\") {
curr += ch;
scape = !scape;
}
else {
scape = false;
curr += ch;
}
}
});
if(curr.length)
arr.push(curr);
CEP_FIELDS.forEach((f,i)=>map[f]=arr[i]);
return map;
}
function splitFields(msg) {
let tokens = msg.split(" ");
let map = {};
let token = null;
while(tokens.length) {
if(!token) {
token = tokens.shift();
if(token.indexOf('=')>=0) {
let kv = token.split("=");
token = kv[0];
map[token] = kv[1];
}
else {
map[token] = "";
}
}
else {
let val = tokens.shift();
if(val.indexOf('=')<0) {
map[token] += ` ${val}`;
}
else {
token = null;
tokens.unshift(val);
}
}
}
return map;
}
module.exports = {
parse(text) {
var headers = splitHeaders(text);
var fields = splitFields(headers.extension || "");
return {
headers : headers,
fields : fields
}
}
}