Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F99913539
mdns-server.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Jan 27, 06:22
Size
4 KB
Mime Type
text/x-c++
Expires
Wed, Jan 29, 06:22 (2 d)
Engine
blob
Format
Raw Data
Handle
23803077
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
mdns-server.js
View Options
"use strict"
;
var
__importDefault
=
(
this
&&
this
.
__importDefault
)
||
function
(
mod
)
{
return
(
mod
&&
mod
.
__esModule
)
?
mod
:
{
"default"
:
mod
};
};
Object
.
defineProperty
(
exports
,
"__esModule"
,
{
value
:
true
});
exports
.
Server
=
void
0
;
const
array_flatten_1
=
__importDefault
(
require
(
"array-flatten"
));
const
es6_1
=
__importDefault
(
require
(
"fast-deep-equal/es6"
));
const
multicast_dns_1
=
__importDefault
(
require
(
"multicast-dns"
));
const
dns_equal_1
=
__importDefault
(
require
(
"dns-equal"
));
class
Server
{
constructor
(
opts
,
errorCallback
)
{
this
.
registry
=
{};
this
.
mdns
=
(
0
,
multicast_dns_1
.
default
)(
opts
);
this
.
mdns
.
setMaxListeners
(
0
);
this
.
mdns
.
on
(
'query'
,
this
.
respondToQuery
.
bind
(
this
));
this
.
errorCallback
=
errorCallback
!==
null
&&
errorCallback
!==
void
0
?
errorCallback
:
function
(
err
)
{
throw
err
;
};
}
register
(
records
)
{
const
shouldRegister
=
(
record
)
=>
{
var
subRegistry
=
this
.
registry
[
record
.
type
];
if
(
!
subRegistry
)
{
subRegistry
=
this
.
registry
[
record
.
type
]
=
[];
}
else
if
(
subRegistry
.
some
(
this
.
isDuplicateRecord
(
record
)))
{
return
;
}
subRegistry
.
push
(
record
);
};
if
(
Array
.
isArray
(
records
))
{
records
.
forEach
(
shouldRegister
);
}
else
{
shouldRegister
(
records
);
}
}
unregister
(
records
)
{
const
shouldUnregister
=
(
record
)
=>
{
let
type
=
record
.
type
;
if
(
!
(
type
in
this
.
registry
))
{
return
;
}
this
.
registry
[
type
]
=
this
.
registry
[
type
].
filter
((
i
)
=>
i
.
name
!==
record
.
name
);
};
if
(
Array
.
isArray
(
records
))
{
records
.
forEach
(
shouldUnregister
);
}
else
{
shouldUnregister
(
records
);
}
}
respondToQuery
(
query
)
{
let
self
=
this
;
query
.
questions
.
forEach
((
question
)
=>
{
var
type
=
question
.
type
;
var
name
=
question
.
name
;
var
answers
=
type
===
'ANY'
?
array_flatten_1
.
default
.
depth
(
Object
.
keys
(
self
.
registry
).
map
(
self
.
recordsFor
.
bind
(
self
,
name
)),
1
)
:
self
.
recordsFor
(
name
,
type
);
if
(
answers
.
length
===
0
)
return
;
var
additionals
=
[];
if
(
type
!==
'ANY'
)
{
answers
.
forEach
((
answer
)
=>
{
if
(
answer
.
type
!==
'PTR'
)
return
;
additionals
=
additionals
.
concat
(
self
.
recordsFor
(
answer
.
data
,
'SRV'
))
.
concat
(
self
.
recordsFor
(
answer
.
data
,
'TXT'
));
});
additionals
.
filter
(
function
(
record
)
{
return
record
.
type
===
'SRV'
;
})
.
map
(
function
(
record
)
{
return
record
.
data
.
target
;
})
.
filter
(
this
.
unique
())
.
forEach
(
function
(
target
)
{
additionals
=
additionals
.
concat
(
self
.
recordsFor
(
target
,
'A'
))
.
concat
(
self
.
recordsFor
(
target
,
'AAAA'
));
});
}
self
.
mdns
.
respond
({
answers
:
answers
,
additionals
:
additionals
},
(
err
)
=>
{
if
(
err
)
{
this
.
errorCallback
(
err
);
}
});
});
}
recordsFor
(
name
,
type
)
{
if
(
!
(
type
in
this
.
registry
))
{
return
[];
}
return
this
.
registry
[
type
].
filter
((
record
)
=>
{
var
_name
=
~
name
.
indexOf
(
'.'
)
?
record
.
name
:
record
.
name
.
split
(
'.'
)[
0
];
return
(
0
,
dns_equal_1
.
default
)(
_name
,
name
);
});
}
isDuplicateRecord
(
a
)
{
return
(
b
)
=>
{
return
a
.
type
===
b
.
type
&&
a
.
name
===
b
.
name
&&
(
0
,
es6_1
.
default
)(
a
.
data
,
b
.
data
);
};
}
unique
()
{
var
set
=
[];
return
(
obj
)
=>
{
if
(
~
set
.
indexOf
(
obj
))
return
false
;
set
.
push
(
obj
);
return
true
;
};
}
}
exports
.
Server
=
Server
;
exports
.
default
=
Server
;
//# sourceMappingURL=mdns-server.js.map
Event Timeline
Log In to Comment