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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mnet/version.rb +1 -1
  3. data/lib/mnet.rb +18 -4
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28c7a4caaa839184e561f720b57548ce98528405577180cd36419aaaad7f573d
4
- data.tar.gz: 88a321feeed9a003e4dac10dceefa786d179d064b54c048235aaf0433ae95dd8
3
+ metadata.gz: 426aa10a38e121d68b9a895f6ca52c30b8f074b1dfc355e457602198a35e94f9
4
+ data.tar.gz: 4847c3712519daa9bc2f97c57c662436966aa60dd44c23016d4676aad2356742
5
5
  SHA512:
6
- metadata.gz: 1de03ebb7e9318e8e4b8867246c38ab80fa1570ce15465cfa0e649075db61dbf2e956e632b86c8693c1f5512570877e061e03e77bbc978427c3af6da13c22e90
7
- data.tar.gz: a5c553a57c24bf513111b10656eef1bc2e48faa9fb79a8aae8ced04ab3c372a2718c7573e200d6feeb901cb83db8daf7f846d05e563d37f197c5214081bd739c
6
+ metadata.gz: 9cd167304267f4665d3df1429d2214453926f4981ff791649e2eaf5cf0a75185e1290df774cea5b65508ebf7d1ae5028532cbe963e0c8ad9ff60ce3d44d4257e
7
+ data.tar.gz: 738fbf86f844faf9eef17b0fbc55de691fa6734bbd399188cf692dbb3c6f0d811354e653b4041272f0be4a07501c5230eb0912ead10eed99098d29177945a029
data/lib/mnet/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mnet
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.3'
5
5
  end
data/lib/mnet.rb CHANGED
@@ -26,8 +26,8 @@ require "mnet/version"
26
26
  require "kcp"
27
27
 
28
28
  module Mnet
29
- MAGIC = "MNET".b
30
- MAGIC_LEN = 4
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("a4a16Q>Q>CCNa*")
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("a4a16Q>Q>CCN")
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mnet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - mnet developers