|
|
@@ -11112,6 +11112,71 @@ function nt(u, e) {
|
|
11112
|
11112
|
ye("callback_query_onlines", {onlines: u.join(","), offlines: e.join(",")})
|
|
11113
|
11113
|
}
|
|
11114
|
11114
|
|
|
|
11115
|
+const onlineCache = {}
|
|
|
11116
|
+
|
|
|
11117
|
+// Query onlines
|
|
|
11118
|
+async function myQueryOnline(id) {
|
|
|
11119
|
+ const last_online = onlineCache[id]
|
|
|
11120
|
+ if (last_online && new Date().getTime() - last_online < 20 * 1000) {
|
|
|
11121
|
+ return true
|
|
|
11122
|
+ }
|
|
|
11123
|
+ // 映射 方便后期更新
|
|
|
11124
|
+ const maps = {
|
|
|
11125
|
+ uri: P4(),
|
|
|
11126
|
+ ws: j4,
|
|
|
11127
|
+ conn_type: ne.DEFAULT_CONN,
|
|
|
11128
|
+ nat_type: pt.SYMMETRIC,
|
|
|
11129
|
+ token: Pt(),
|
|
|
11130
|
+ version: se,
|
|
|
11131
|
+ licence_key: Io(),
|
|
|
11132
|
+ rendezvousPunchHoleRequest: Ku,
|
|
|
11133
|
+ rendezvousPunchHoleResponse_Failure: Z0
|
|
|
11134
|
+ }
|
|
|
11135
|
+
|
|
|
11136
|
+ const s = new maps.ws(maps.uri, !0, "rendezvous");
|
|
|
11137
|
+ await s.open();
|
|
|
11138
|
+ const punch_hole_request = maps.rendezvousPunchHoleRequest.fromPartial({
|
|
|
11139
|
+ id: id,
|
|
|
11140
|
+ licence_key: maps.licence_key,
|
|
|
11141
|
+ conn_type: maps.conn_type,
|
|
|
11142
|
+ nat_type: maps.nat_type,
|
|
|
11143
|
+ token: maps.token,
|
|
|
11144
|
+ version: maps.version
|
|
|
11145
|
+ });
|
|
|
11146
|
+ s.sendRendezvous({punch_hole_request: punch_hole_request});
|
|
|
11147
|
+ const msg = await s.next();
|
|
|
11148
|
+ s.close();
|
|
|
11149
|
+ let online = false
|
|
|
11150
|
+ const phr = msg.punch_hole_response, rr = msg.relay_response;
|
|
|
11151
|
+ if (phr) {
|
|
|
11152
|
+ online = true
|
|
|
11153
|
+ if (phr != null && phr.other_failure) {
|
|
|
11154
|
+ online = false
|
|
|
11155
|
+ return online
|
|
|
11156
|
+ }
|
|
|
11157
|
+ if (phr.failure != maps.rendezvousPunchHoleResponse_Failure.UNRECOGNIZED) switch (phr == null ? void 0 : phr.failure) {
|
|
|
11158
|
+ case maps.rendezvousPunchHoleResponse_Failure.ID_NOT_EXIST:
|
|
|
11159
|
+ case maps.rendezvousPunchHoleResponse_Failure.OFFLINE:
|
|
|
11160
|
+ case maps.rendezvousPunchHoleResponse_Failure.LICENSE_MISMATCH:
|
|
|
11161
|
+ case maps.rendezvousPunchHoleResponse_Failure.LICENSE_OVERUSE:
|
|
|
11162
|
+ online = false
|
|
|
11163
|
+ break
|
|
|
11164
|
+ }
|
|
|
11165
|
+ } else if (rr) {
|
|
|
11166
|
+ online = true
|
|
|
11167
|
+ if (!rr.version) {
|
|
|
11168
|
+ online = false
|
|
|
11169
|
+ return online
|
|
|
11170
|
+ }
|
|
|
11171
|
+ }
|
|
|
11172
|
+ if (online) {
|
|
|
11173
|
+ onlineCache[id] = new Date().getTime()
|
|
|
11174
|
+ } else if (onlineCache[id]) {
|
|
|
11175
|
+ delete onlineCache[id]
|
|
|
11176
|
+ }
|
|
|
11177
|
+ return online
|
|
|
11178
|
+}
|
|
|
11179
|
+
|
|
11115
|
11180
|
async function wn(u) {
|
|
11116
|
11181
|
let e = [];
|
|
11117
|
11182
|
try {
|
|
|
@@ -11121,28 +11186,46 @@ async function wn(u) {
|
|
11121
|
11186
|
return
|
|
11122
|
11187
|
}
|
|
11123
|
11188
|
if (e.length === 0) return;
|
|
11124
|
|
- const i = bn(), o = new j4(i, !0, "query onlines");
|
|
11125
|
|
- try {
|
|
11126
|
|
- await o.open();
|
|
11127
|
|
- const a = Ju.fromPartial({id: N4(), peers: e});
|
|
11128
|
|
- o.sendRendezvous({online_request: a})
|
|
11129
|
|
- } catch (a) {
|
|
11130
|
|
- console.error("Failed to query onlines, ", a), nt([], e), o.close();
|
|
11131
|
|
- return
|
|
11132
|
|
- }
|
|
11133
|
|
- for (let a = 0; a < 2; a++) {
|
|
11134
|
|
- const t = await Ro(o, 3e3);
|
|
11135
|
|
- if (!t || (t == null ? void 0 : t.key_exchange) || (t == null ? void 0 : t.online_response) === void 0) continue;
|
|
11136
|
|
- const s = t.online_response.states;
|
|
11137
|
|
- let l = [], E = [];
|
|
11138
|
|
- for (let c = 0; c < e.length; c++) {
|
|
11139
|
|
- const C = 1 << 7 - c % 8;
|
|
11140
|
|
- (s[Math.floor(c / 8)] & C) === C ? l.push(e[c]) : E.push(e[c])
|
|
|
11189
|
+
|
|
|
11190
|
+ if (window.webclient_magic_queryonline) {
|
|
|
11191
|
+ const onlines = []
|
|
|
11192
|
+ const offlines = []
|
|
|
11193
|
+ for (let i = 0; i < e.length; i++) {
|
|
|
11194
|
+ let online = await myQueryOnline(e[i])
|
|
|
11195
|
+ if (online) {
|
|
|
11196
|
+ onlines.push(e[i])
|
|
|
11197
|
+ } else {
|
|
|
11198
|
+ offlines.push(e[i])
|
|
|
11199
|
+ }
|
|
11141
|
11200
|
}
|
|
11142
|
|
- nt(l, E), o.close();
|
|
11143
|
|
- return
|
|
|
11201
|
+ console.log("onlines: ", onlines, "offlines: ", offlines)
|
|
|
11202
|
+ nt(onlines, offlines)
|
|
|
11203
|
+ } else {
|
|
|
11204
|
+ const i = bn(), o = new j4(i, !0, "query onlines");
|
|
|
11205
|
+ try {
|
|
|
11206
|
+ await o.open();
|
|
|
11207
|
+ const a = Ju.fromPartial({id: N4(), peers: e});
|
|
|
11208
|
+ o.sendRendezvous({online_request: a})
|
|
|
11209
|
+ } catch (a) {
|
|
|
11210
|
+ console.error("Failed to query onlines, ", a), nt([], e), o.close();
|
|
|
11211
|
+ return
|
|
|
11212
|
+ }
|
|
|
11213
|
+ for (let a = 0; a < 2; a++) {
|
|
|
11214
|
+ const t = await Ro(o, 3e3);
|
|
|
11215
|
+ if (!t || (t == null ? void 0 : t.key_exchange) || (t == null ? void 0 : t.online_response) === void 0) continue;
|
|
|
11216
|
+ const s = t.online_response.states;
|
|
|
11217
|
+ let l = [], E = [];
|
|
|
11218
|
+ for (let c = 0; c < e.length; c++) {
|
|
|
11219
|
+ const C = 1 << 7 - c % 8;
|
|
|
11220
|
+ (s[Math.floor(c / 8)] & C) === C ? l.push(e[c]) : E.push(e[c])
|
|
|
11221
|
+ }
|
|
|
11222
|
+ nt(l, E), o.close();
|
|
|
11223
|
+ return
|
|
|
11224
|
+ }
|
|
|
11225
|
+ o.close(), console.error("Failed to query online states, no online response")
|
|
11144
|
11226
|
}
|
|
11145
|
|
- o.close(), console.error("Failed to query online states, no online response")
|
|
|
11227
|
+
|
|
|
11228
|
+
|
|
11146
|
11229
|
}
|
|
11147
|
11230
|
|
|
11148
|
11231
|
window.curConn = void 0;
|