mnet 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/mnet/version.rb +1 -1
- data/lib/mnet.rb +18 -4
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 426aa10a38e121d68b9a895f6ca52c30b8f074b1dfc355e457602198a35e94f9
|
|
4
|
+
data.tar.gz: 4847c3712519daa9bc2f97c57c662436966aa60dd44c23016d4676aad2356742
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9cd167304267f4665d3df1429d2214453926f4981ff791649e2eaf5cf0a75185e1290df774cea5b65508ebf7d1ae5028532cbe963e0c8ad9ff60ce3d44d4257e
|
|
7
|
+
data.tar.gz: 738fbf86f844faf9eef17b0fbc55de691fa6734bbd399188cf692dbb3c6f0d811354e653b4041272f0be4a07501c5230eb0912ead10eed99098d29177945a029
|
data/lib/mnet/version.rb
CHANGED
data/lib/mnet.rb
CHANGED
|
@@ -26,8 +26,8 @@ require "mnet/version"
|
|
|
26
26
|
require "kcp"
|
|
27
27
|
|
|
28
28
|
module Mnet
|
|
29
|
-
MAGIC = "
|
|
30
|
-
MAGIC_LEN =
|
|
29
|
+
MAGIC = "\x12\xE9\x97".b
|
|
30
|
+
MAGIC_LEN = 3
|
|
31
31
|
SESSION_ID_LEN = 16
|
|
32
32
|
|
|
33
33
|
# Conservative MTU for mobile networks / VPN tunnels (mosh uses 1280).
|
|
@@ -75,12 +75,12 @@ module Mnet
|
|
|
75
75
|
|
|
76
76
|
def pack(session_id, seq, ack, type, flags, window, payload = "".b)
|
|
77
77
|
[MAGIC, session_id, seq, ack, type, flags, window, payload]
|
|
78
|
-
.pack("
|
|
78
|
+
.pack("a3a16Q>Q>CCNa*")
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def unpack(data)
|
|
82
82
|
return nil if data.bytesize < HEADER_LEN
|
|
83
|
-
magic, sid, seq, ack, type, flags, window = data.unpack("
|
|
83
|
+
magic, sid, seq, ack, type, flags, window = data.unpack("a3a16Q>Q>CCN")
|
|
84
84
|
return nil unless magic == MAGIC
|
|
85
85
|
Packet.new(sid, seq, ack, type, flags, window,
|
|
86
86
|
data.byteslice(HEADER_LEN, data.bytesize - HEADER_LEN) || "".b)
|
|
@@ -140,6 +140,15 @@ module Mnet
|
|
|
140
140
|
def sync=(_value)
|
|
141
141
|
end
|
|
142
142
|
|
|
143
|
+
# 返回对端真实地址(Addrinfo)。Session/KcpSession 没有内核 socket,远端地址
|
|
144
|
+
# 由 @peer_addr 跟踪(含切网迁移后的新地址),供 LSocket#io.remote_address 等使用。
|
|
145
|
+
def remote_address
|
|
146
|
+
return nil unless @peer_addr
|
|
147
|
+
Addrinfo.udp(@peer_addr[0], @peer_addr[1])
|
|
148
|
+
rescue SocketError
|
|
149
|
+
nil
|
|
150
|
+
end
|
|
151
|
+
|
|
143
152
|
# Hook overridden by KcpSession to pull decoded bytes out of the engine.
|
|
144
153
|
def pump_recv
|
|
145
154
|
end
|
|
@@ -274,6 +283,11 @@ module Mnet
|
|
|
274
283
|
end
|
|
275
284
|
end
|
|
276
285
|
|
|
286
|
+
# 桥接 socketpair 本身拿不到远端地址,把 remote_address 委托回 session,
|
|
287
|
+
# 这样 SSLServer#io.remote_address 等仍能取到对端真实 ip:port。
|
|
288
|
+
session = self
|
|
289
|
+
app.define_singleton_method(:remote_address) { session.remote_address }
|
|
290
|
+
|
|
277
291
|
@bridge_io = app
|
|
278
292
|
end
|
|
279
293
|
end
|