Normalize WebRTCDataChannel properties.

This commit is contained in:
Fabio Alessandrelli 2019-06-04 21:52:02 +02:00
parent 0bccf96c73
commit 61cd8ed441

View file

@ -205,30 +205,45 @@ String WebRTCDataChannelJS::get_label() const {
} }
/* clang-format off */ /* clang-format off */
#define _JS_GET(PROP) \ #define _JS_GET(PROP, DEF) \
EM_ASM_INT({ \ EM_ASM_INT({ \
var dict = Module.IDHandler.get($0); \ var dict = Module.IDHandler.get($0); \
if (!dict || !dict["channel"]) { \ if (!dict || !dict["channel"]) { \
return 0; \ return DEF; \
}; \ } \
return dict["channel"].PROP; \ var out = dict["channel"].PROP; \
return out === null ? DEF : out; \
}, _js_id) }, _js_id)
/* clang-format on */ /* clang-format on */
bool WebRTCDataChannelJS::is_ordered() const { bool WebRTCDataChannelJS::is_ordered() const {
return _JS_GET(ordered); return _JS_GET(ordered, true);
} }
int WebRTCDataChannelJS::get_id() const { int WebRTCDataChannelJS::get_id() const {
return _JS_GET(id); return _JS_GET(id, 65535);
} }
int WebRTCDataChannelJS::get_max_packet_life_time() const { int WebRTCDataChannelJS::get_max_packet_life_time() const {
return _JS_GET(maxPacketLifeTime); // Can't use macro, webkit workaround.
/* clang-format off */
return EM_ASM_INT({
var dict = Module.IDHandler.get($0);
if (!dict || !dict["channel"]) {
return 65535;
}
if (dict["channel"].maxRetransmitTime !== undefined) {
// Guess someone didn't appreciate the standardization process.
return dict["channel"].maxRetransmitTime;
}
var out = dict["channel"].maxPacketLifeTime;
return out === null ? 65535 : out;
}, _js_id);
/* clang-format on */
} }
int WebRTCDataChannelJS::get_max_retransmits() const { int WebRTCDataChannelJS::get_max_retransmits() const {
return _JS_GET(maxRetransmits); return _JS_GET(maxRetransmits, 65535);
} }
String WebRTCDataChannelJS::get_protocol() const { String WebRTCDataChannelJS::get_protocol() const {
@ -236,7 +251,7 @@ String WebRTCDataChannelJS::get_protocol() const {
} }
bool WebRTCDataChannelJS::is_negotiated() const { bool WebRTCDataChannelJS::is_negotiated() const {
return _JS_GET(negotiated); return _JS_GET(negotiated, false);
} }
WebRTCDataChannelJS::WebRTCDataChannelJS() { WebRTCDataChannelJS::WebRTCDataChannelJS() {