mnet 0.1.1 → 0.1.4

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 +22 -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: f6bfc9f4f191ccc85bc0826dce0bb1db83e8b2cc7d3fc8876b1669f59c0f47bb
4
+ data.tar.gz: 7d7993715434586564f1b91ee3e186ca95a638e331794362a992865b6650eb14
5
5
  SHA512:
6
- metadata.gz: 1de03ebb7e9318e8e4b8867246c38ab80fa1570ce15465cfa0e649075db61dbf2e956e632b86c8693c1f5512570877e061e03e77bbc978427c3af6da13c22e90
7
- data.tar.gz: a5c553a57c24bf513111b10656eef1bc2e48faa9fb79a8aae8ced04ab3c372a2718c7573e200d6feeb901cb83db8daf7f846d05e563d37f197c5214081bd739c
6
+ metadata.gz: 9f57908a81e4eb68d7643f75253dabbcae45de9f8386169301914d15743d8f25d6d5ff89562d1e1bfe09874c8c453cbc48b3a56f1b7974c5427e35e09e97cade
7
+ data.tar.gz: 1dfb4adc41610b08ddf958a58e64e044352a0833aff09cb265aea4d7cd8c7f6a68047992a33e6adb3d74cbd125273a7a87380c81a79fbe56367469528fd769cc
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.4'
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
@@ -667,6 +681,10 @@ module Mnet
667
681
 
668
682
  @conv = id.unpack1("N") # KCP conv derived from the session id
669
683
  @engine = Kcp::Engine.new(@conv)
684
+ # KCP 默认 MTU 1400,但外层还要加 mnet header(42) + GCM nonce/tag(28)。
685
+ # 按 IP_MTU(1280) 反推,KCP 包最多 1280 - 42 - 28 = 1210,留点余量取 1200,
686
+ # 保证「KCP 包 + 封装」不超路径 MTU,避免被 IP 分片(分片常被 NAT/防火墙丢)。
687
+ @engine.mtu = 1200
670
688
 
671
689
  @m = Monitor.new
672
690
  @cv = @m.new_cond
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.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - mnet developers