p2p2 0.20.0 → 0.25.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5621af269a434cac452523cfccd1816c1246b37936296df09e5db7a28ed0701b
4
- data.tar.gz: 718b2f29404d97724b21638fcdd8f683ac1e987cc94b482e38252dc5485afd8e
3
+ metadata.gz: 2b2e5798d8439e44d3acbb68a9a8749a1d7dc69c43a5f6effea95f6360185a0a
4
+ data.tar.gz: a306f7dfe4be190712e7317de0f7324135e16075a39af9d7d3408aa3ab978bd5
5
5
  SHA512:
6
- metadata.gz: 680e7ad7a8fbbaf4f5d020d6cbf988db7ba225ff38fce951069c9bbb211923ed54165a05440842ce929861ea32d94caa4683b424a51cedade77ff9bb2ade2d6a
7
- data.tar.gz: 9a188e36e5f5fa650b8074d263dcc16a7578ea6b9a5135faf9fb73af17695f2c9af33f14d1aaed81fe113b55f37f3653d325826bfb32c3cbfed8797e096d41dc
6
+ metadata.gz: 8542ffdd4ed556d9a7d0aa3fbbf3f8da180610bb6a3d8bf04567bb4bc75852f45fd6821c748490e42cf85d51fdaa0b7abf62a49eff50e38565584523de79c07a
7
+ data.tar.gz: a6f98e9fb4116a19e473ed46e4767e54bf4113bb7e91da6970f64ba75f0f5fbf4f1a5f2118d6dff970640aecf9ad39cc34854ed0e317ef740c77589d1b60ba21
@@ -6,7 +6,7 @@ require 'p2p2/version'
6
6
  require 'socket'
7
7
 
8
8
  ##
9
- # P2p2::P1 - 内网里的任意应用,访问另一个内网里的应用服务端。p1端。
9
+ # P2p2::P1 - p2p通道,p1端。
10
10
  #
11
11
  module P2p2
12
12
  class P1
@@ -99,14 +99,14 @@ module P2p2
99
99
  else
100
100
  @tund_info[ :dst_exts ].each do | dst_local_port, dst_ext |
101
101
  if dst_ext[ :dst ].closed? && ( now - dst_ext[ :last_continue_at ] > EXPIRE_AFTER )
102
- puts "#{ Time.new } expire dst ext #{ dst_local_port }"
102
+ puts "#{ Time.new } expire dst ext"
103
103
  del_dst_ext( dst_local_port )
104
104
  end
105
105
  end
106
106
  end
107
107
 
108
108
  @dst_infos.each do | dst, dst_info |
109
- if dst_info[ :last_recv_at ].nil? && ( now - dst_info[ :created_at ] > EXPIRE_NEW )
109
+ if now - dst_info[ :last_continue_at ] > EXPIRE_AFTER
110
110
  puts "#{ Time.new } expire dst"
111
111
  set_is_closing( dst )
112
112
  end
@@ -118,7 +118,7 @@ module P2p2
118
118
  # puts "debug2 heartbeat"
119
119
  add_tund_ctlmsg( pack_a_heartbeat )
120
120
  next_tick
121
- elsif now - @tund_info[ :last_recv_at ] > EXPIRE_NEW
121
+ elsif now - @tund_info[ :created_at ] > EXPIRE_NEW
122
122
  # no tun addr
123
123
  puts "#{ Time.new } expire new tund"
124
124
  set_is_closing( @tund )
@@ -374,6 +374,25 @@ module P2p2
374
374
  end
375
375
  end
376
376
 
377
+ ##
378
+ # send data
379
+ #
380
+ def send_data( tund, data, to_addr )
381
+ begin
382
+ tund.sendmsg( data, 0, to_addr )
383
+ rescue IO::WaitWritable, Errno::EINTR
384
+ return false
385
+ rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::ENETDOWN => e
386
+ puts "#{ Time.new } #{ e.class }, close tund"
387
+ close_tund( tund )
388
+ sleep HEARTBEAT_INTERVAL
389
+ new_a_tund
390
+ return false
391
+ end
392
+
393
+ true
394
+ end
395
+
377
396
  ##
378
397
  # close dst
379
398
  #
@@ -475,15 +494,14 @@ module P2p2
475
494
  #
476
495
  def write_dst( dst )
477
496
  dst_info = @dst_infos[ dst ]
478
- data = dst_info[ :cache ]
479
- from = :cache
497
+ from, data = :cache, dst_info[ :cache ]
480
498
 
481
499
  if data.empty?
482
500
  if dst_info[ :chunks ].any?
483
501
  path = File.join( @dst_chunk_dir, dst_info[ :chunks ].shift )
484
502
 
485
503
  begin
486
- dst_info[ :cache ] = data = IO.binread( path )
504
+ data = dst_info[ :cache ] = IO.binread( path )
487
505
  File.delete( path )
488
506
  rescue Errno::ENOENT => e
489
507
  puts "#{ Time.new } read #{ path } #{ e.class }"
@@ -491,8 +509,7 @@ module P2p2
491
509
  return
492
510
  end
493
511
  else
494
- data = dst_info[ :wbuff ]
495
- from = :wbuff
512
+ from, data = :wbuff, dst_info[ :wbuff ]
496
513
  end
497
514
  end
498
515
 
@@ -519,6 +536,7 @@ module P2p2
519
536
  # puts "debug2 write dst #{ written }"
520
537
  data = data[ written..-1 ]
521
538
  dst_info[ from ] = data
539
+ dst_info[ :last_continue_at ] = Time.new
522
540
  end
523
541
 
524
542
  ##
@@ -531,13 +549,13 @@ module P2p2
531
549
  return
532
550
  end
533
551
 
552
+ now = Time.new
553
+
534
554
  # 传ctlmsg
535
555
  while @tund_info[ :ctlmsgs ].any?
536
556
  to_addr, data = @tund_info[ :ctlmsgs ].first
537
557
 
538
- begin
539
- tund.sendmsg( data, 0, to_addr )
540
- rescue IO::WaitWritable, Errno::EINTR
558
+ unless send_data( tund, data, to_addr )
541
559
  return
542
560
  end
543
561
 
@@ -553,16 +571,15 @@ module P2p2
553
571
  data = dst_ext[ :wmems ][ pack_id ]
554
572
 
555
573
  if data
556
- begin
557
- tund.sendmsg( data, 0, @tund_info[ :tun_addr ] )
558
- rescue IO::WaitWritable, Errno::EINTR
574
+ unless send_data( tund, data, @tund_info[ :tun_addr ] )
559
575
  return
560
576
  end
577
+
578
+ dst_ext[ :last_continue_at ] = now
561
579
  end
562
580
  end
563
581
 
564
582
  @tund_info[ :resendings ].shift
565
- return
566
583
  end
567
584
 
568
585
  # 若写后达到上限,暂停取写前
@@ -578,8 +595,7 @@ module P2p2
578
595
 
579
596
  # 取写前
580
597
  if @tund_info[ :caches ].any?
581
- dst_local_port, pack_id, data = @tund_info[ :caches ].first
582
- from = :caches
598
+ datas = @tund_info[ :caches ]
583
599
  elsif @tund_info[ :chunks ].any?
584
600
  path = File.join( @tund_chunk_dir, @tund_info[ :chunks ].shift )
585
601
 
@@ -600,42 +616,39 @@ module P2p2
600
616
  data = data[ ( 12 + pack_size )..-1 ]
601
617
  end
602
618
 
603
- @tund_info[ :caches ] = caches
604
- dst_local_port, pack_id, data = caches.first
605
- from = :caches
619
+ datas = @tund_info[ :caches ] = caches
606
620
  elsif @tund_info[ :wbuffs ].any?
607
- dst_local_port, pack_id, data = @tund_info[ :wbuffs ].first
608
- from = :wbuffs
621
+ datas = @tund_info[ :wbuffs ]
609
622
  else
610
623
  @writes.delete( tund )
611
624
  return
612
625
  end
613
626
 
614
- dst_ext = @tund_info[ :dst_exts ][ dst_local_port ]
627
+ while datas.any?
628
+ dst_local_port, pack_id, data = datas.first
629
+ dst_ext = @tund_info[ :dst_exts ][ dst_local_port ]
615
630
 
616
- if dst_ext
617
- if pack_id <= CONFUSE_UNTIL
618
- data = @custom.encode( data )
619
- # puts "debug1 encoded pack #{ pack_id }"
620
- end
631
+ if dst_ext
632
+ if pack_id <= CONFUSE_UNTIL
633
+ data = @custom.encode( data )
634
+ # puts "debug1 encoded pack #{ pack_id }"
635
+ end
621
636
 
622
- data = [ [ pack_id, dst_local_port ].pack( 'Q>n' ), data ].join
637
+ data = [ [ pack_id, dst_local_port ].pack( 'Q>n' ), data ].join
623
638
 
624
- begin
625
- tund.sendmsg( data, 0, @tund_info[ :tun_addr ] )
626
- rescue IO::WaitWritable, Errno::EINTR
627
- return
639
+ unless send_data( tund, data, @tund_info[ :tun_addr ] )
640
+ return
641
+ end
642
+
643
+ # puts "debug2 written pack #{ pack_id }"
644
+ dst_ext[ :relay_pack_id ] = pack_id
645
+ dst_ext[ :wmems ][ pack_id ] = data
646
+ dst_ext[ :send_ats ][ pack_id ] = now
647
+ dst_ext[ :last_continue_at ] = now
628
648
  end
629
649
 
630
- # puts "debug2 written pack #{ pack_id }"
631
- now = Time.new
632
- dst_ext[ :relay_pack_id ] = pack_id
633
- dst_ext[ :wmems ][ pack_id ] = data
634
- dst_ext[ :send_ats ][ pack_id ] = now
635
- dst_ext[ :last_continue_at ] = now
650
+ datas.shift
636
651
  end
637
-
638
- @tund_info[ from ].shift
639
652
  end
640
653
 
641
654
  ##
@@ -661,7 +674,7 @@ module P2p2
661
674
 
662
675
  # puts "debug2 read dst #{ data.inspect }"
663
676
  dst_info = @dst_infos[ dst ]
664
- dst_info[ :last_recv_at ] = Time.new
677
+ dst_info[ :last_continue_at ] = Time.new
665
678
 
666
679
  if @tund.closed?
667
680
  puts "#{ Time.new } tund closed, close dst"
@@ -739,8 +752,7 @@ module P2p2
739
752
  cache: '', # 块读出缓存
740
753
  chunks: [], # 块队列,写前达到块大小时结一个块 filename
741
754
  spring: 0, # 块后缀,结块时,如果块队列不为空,则自增,为空,则置为0
742
- created_at: Time.new, # 创建时间
743
- last_recv_at: nil, # 上一次收到流量的时间,过期关闭
755
+ last_continue_at: Time.new, # 上一次发生流量的时间
744
756
  is_closing: false # 是否准备关闭
745
757
  }
746
758
  add_read( dst, :dst )
@@ -757,7 +769,7 @@ module P2p2
757
769
  is_src_closed: false, # src是否已关闭
758
770
  biggest_src_pack_id: 0, # src最大包号码
759
771
  completed_pack_id: 0, # 完成到几(对面收到几)
760
- last_continue_at: Time.new # 创建,或者上一次收到连续流量,或者发出新包的时间
772
+ last_continue_at: Time.new # 上一次发生流量的时间
761
773
  }
762
774
  end
763
775
 
@@ -6,7 +6,7 @@ require 'p2p2/version'
6
6
  require 'socket'
7
7
 
8
8
  ##
9
- # P2p2::P2 - 内网里的任意应用,访问另一个内网里的应用服务端。p2端。
9
+ # P2p2::P2 - p2p通道,p2端。
10
10
  #
11
11
  module P2p2
12
12
  class P2
@@ -100,14 +100,14 @@ module P2p2
100
100
  else
101
101
  @tun_info[ :src_exts ].each do | src_id, src_ext |
102
102
  if src_ext[ :src ].closed? && ( now - src_ext[ :last_continue_at ] > EXPIRE_AFTER )
103
- puts "#{ Time.new } expire src ext #{ src_id }"
103
+ puts "#{ Time.new } expire src ext"
104
104
  del_src_ext( src_id )
105
105
  end
106
106
  end
107
107
  end
108
108
 
109
109
  @src_infos.each do | src, src_info |
110
- if src_info[ :last_recv_at ].nil? && ( now - src_info[ :created_at ] > EXPIRE_NEW )
110
+ if now - src_info[ :last_continue_at ] > EXPIRE_AFTER
111
111
  puts "#{ Time.new } expire src"
112
112
  set_is_closing( src )
113
113
  end
@@ -119,7 +119,7 @@ module P2p2
119
119
  # puts "debug2 heartbeat"
120
120
  add_tun_ctlmsg( pack_a_heartbeat )
121
121
  next_tick
122
- elsif now - @tun_info[ :last_recv_at ] > EXPIRE_NEW
122
+ elsif now - @tun_info[ :created_at ] > EXPIRE_NEW
123
123
  # no tund addr
124
124
  puts "#{ Time.new } expire new tun"
125
125
  set_is_closing( @tun )
@@ -263,7 +263,7 @@ module P2p2
263
263
  @tun = tun
264
264
  @tun_info = tun_info
265
265
  add_read( tun, :tun )
266
- add_tun_ctlmsg( @room, @p2pd_addr )
266
+ add_tun_ctlmsg( [ '2', @room ].join, @p2pd_addr )
267
267
  end
268
268
 
269
269
  ##
@@ -402,6 +402,23 @@ module P2p2
402
402
  end
403
403
  end
404
404
 
405
+ ##
406
+ # send data
407
+ #
408
+ def send_data( tun, data, to_addr )
409
+ begin
410
+ tun.sendmsg( data, 0, to_addr )
411
+ rescue IO::WaitWritable, Errno::EINTR
412
+ return false
413
+ rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::ENETDOWN => e
414
+ puts "#{ Time.new } #{ e.class }, close tun"
415
+ close_tun( tun )
416
+ return false
417
+ end
418
+
419
+ true
420
+ end
421
+
405
422
  ##
406
423
  # close src
407
424
  #
@@ -503,15 +520,14 @@ module P2p2
503
520
  #
504
521
  def write_src( src )
505
522
  src_info = @src_infos[ src ]
506
- data = src_info[ :cache ]
507
- from = :cache
523
+ from, data = :cache, src_info[ :cache ]
508
524
 
509
525
  if data.empty?
510
526
  if src_info[ :chunks ].any?
511
527
  path = File.join( @src_chunk_dir, src_info[ :chunks ].shift )
512
528
 
513
529
  begin
514
- src_info[ :cache ] = data = IO.binread( path )
530
+ data = src_info[ :cache ] = IO.binread( path )
515
531
  File.delete( path )
516
532
  rescue Errno::ENOENT => e
517
533
  puts "#{ Time.new } read #{ path } #{ e.class }"
@@ -519,8 +535,7 @@ module P2p2
519
535
  return
520
536
  end
521
537
  else
522
- data = src_info[ :wbuff ]
523
- from = :wbuff
538
+ from, data = :wbuff, src_info[ :wbuff ]
524
539
  end
525
540
  end
526
541
 
@@ -546,6 +561,7 @@ module P2p2
546
561
  # puts "debug2 write src #{ written }"
547
562
  data = data[ written..-1 ]
548
563
  src_info[ from ] = data
564
+ src_info[ :last_continue_at ] = Time.new
549
565
  end
550
566
 
551
567
  ##
@@ -557,13 +573,13 @@ module P2p2
557
573
  return
558
574
  end
559
575
 
576
+ now = Time.new
577
+
560
578
  # 传ctlmsg
561
579
  while @tun_info[ :ctlmsgs ].any?
562
580
  to_addr, data = @tun_info[ :ctlmsgs ].first
563
581
 
564
- begin
565
- tun.sendmsg( data, 0, to_addr )
566
- rescue IO::WaitWritable, Errno::EINTR
582
+ unless send_data( tun, data, to_addr )
567
583
  return
568
584
  end
569
585
 
@@ -579,16 +595,15 @@ module P2p2
579
595
  data = src_ext[ :wmems ][ pack_id ]
580
596
 
581
597
  if data
582
- begin
583
- tun.sendmsg( data, 0, @tun_info[ :tund_addr ] )
584
- rescue IO::WaitWritable, Errno::EINTR
598
+ unless send_data( tun, data, @tun_info[ :tund_addr ] )
585
599
  return
586
600
  end
601
+
602
+ src_ext[ :last_continue_at ] = now
587
603
  end
588
604
  end
589
605
 
590
606
  @tun_info[ :resendings ].shift
591
- return
592
607
  end
593
608
 
594
609
  # 若写后达到上限,暂停取写前
@@ -604,8 +619,7 @@ module P2p2
604
619
 
605
620
  # 取写前
606
621
  if @tun_info[ :caches ].any?
607
- src_id, pack_id, data = @tun_info[ :caches ].first
608
- from = :caches
622
+ datas = @tun_info[ :caches ]
609
623
  elsif @tun_info[ :chunks ].any?
610
624
  path = File.join( @tun_chunk_dir, @tun_info[ :chunks ].shift )
611
625
 
@@ -626,42 +640,39 @@ module P2p2
626
640
  data = data[ ( 18 + pack_size )..-1 ]
627
641
  end
628
642
 
629
- @tun_info[ :caches ] = caches
630
- src_id, pack_id, data = caches.first
631
- from = :caches
643
+ datas = @tun_info[ :caches ] = caches
632
644
  elsif @tun_info[ :wbuffs ].any?
633
- src_id, pack_id, data = @tun_info[ :wbuffs ].first
634
- from = :wbuffs
645
+ datas = @tun_info[ :wbuffs ]
635
646
  else
636
647
  @writes.delete( tun )
637
648
  return
638
649
  end
639
650
 
640
- src_ext = @tun_info[ :src_exts ][ src_id ]
651
+ while datas.any?
652
+ src_id, pack_id, data = datas.first
653
+ src_ext = @tun_info[ :src_exts ][ src_id ]
641
654
 
642
- if src_ext
643
- if pack_id <= CONFUSE_UNTIL
644
- data = @custom.encode( data )
645
- # puts "debug1 encoded pack #{ pack_id }"
646
- end
655
+ if src_ext
656
+ if pack_id <= CONFUSE_UNTIL
657
+ data = @custom.encode( data )
658
+ # puts "debug1 encoded pack #{ pack_id }"
659
+ end
647
660
 
648
- data = [ [ pack_id, src_id ].pack( 'Q>Q>' ), data ].join
661
+ data = [ [ pack_id, src_id ].pack( 'Q>Q>' ), data ].join
649
662
 
650
- begin
651
- tun.sendmsg( data, 0, @tun_info[ :tund_addr ] )
652
- rescue IO::WaitWritable, Errno::EINTR
653
- return
663
+ unless send_data( tun, data, @tun_info[ :tund_addr ] )
664
+ return
665
+ end
666
+
667
+ # puts "debug2 written pack #{ pack_id }"
668
+ src_ext[ :relay_pack_id ] = pack_id
669
+ src_ext[ :wmems ][ pack_id ] = data
670
+ src_ext[ :send_ats ][ pack_id ] = now
671
+ src_ext[ :last_continue_at ] = now
654
672
  end
655
673
 
656
- # puts "debug2 written pack #{ pack_id }"
657
- now = Time.new
658
- src_ext[ :relay_pack_id ] = pack_id
659
- src_ext[ :wmems ][ pack_id ] = data
660
- src_ext[ :send_ats ][ pack_id ] = now
661
- src_ext[ :last_continue_at ] = now
674
+ datas.shift
662
675
  end
663
-
664
- @tun_info[ from ].shift
665
676
  end
666
677
 
667
678
  ##
@@ -685,16 +696,15 @@ module P2p2
685
696
  # puts "debug1 accept a src #{ addrinfo.inspect } #{ id }"
686
697
 
687
698
  @src_infos[ src ] = {
688
- id: id, # id
689
- biggest_pack_id: 0, # 最大包号码
690
- rbuffs: [], # p1端dst未准备好,暂存流量 [ pack_id, data ]
691
- wbuff: '', # 写前
692
- cache: '', # 块读出缓存
693
- chunks: [], # 块队列,写前达到块大小时结一个块 filename
694
- spring: 0, # 块后缀,结块时,如果块队列不为空,则自增,为空,则置为0
695
- created_at: Time.new, # 创建时间
696
- last_recv_at: nil, # 上一次收到流量的时间,过期关闭
697
- is_closing: false # 是否准备关闭
699
+ id: id, # id
700
+ biggest_pack_id: 0, # 最大包号码
701
+ rbuffs: [], # p1端dst未准备好,暂存流量 [ pack_id, data ]
702
+ wbuff: '', # 写前
703
+ cache: '', # 块读出缓存
704
+ chunks: [], # 块队列,写前达到块大小时结一个块 filename
705
+ spring: 0, # 块后缀,结块时,如果块队列不为空,则自增,为空,则置为0
706
+ last_continue_at: Time.new, # 上一次发生流量的时间
707
+ is_closing: false # 是否准备关闭
698
708
  }
699
709
 
700
710
  add_read( src, :src )
@@ -714,7 +724,7 @@ module P2p2
714
724
  is_dst_closed: false, # dst是否已关闭
715
725
  biggest_dst_pack_id: 0, # dst最大包号码
716
726
  completed_pack_id: 0, # 完成到几(对面收到几)
717
- last_continue_at: Time.new # 创建,或者上一次收到连续流量,或者发出新包的时间
727
+ last_continue_at: Time.new # 上一次发生流量的时间
718
728
  }
719
729
 
720
730
  @tun_info[ :src_exts ][ id ] = src_ext
@@ -738,7 +748,7 @@ module P2p2
738
748
 
739
749
  # puts "debug2 read src #{ data.inspect }"
740
750
  src_info = @src_infos[ src ]
741
- src_info[ :last_recv_at ] = Time.new
751
+ src_info[ :last_continue_at ] = Time.new
742
752
  src_id = src_info[ :id ]
743
753
  src_ext = @tun_info[ :src_exts ][ src_id ]
744
754
 
@@ -5,7 +5,7 @@ require 'p2p2/version'
5
5
  require 'socket'
6
6
 
7
7
  ##
8
- # P2p2::P2pd - 内网里的任意应用,访问另一个内网里的应用服务端。配对服务器端。
8
+ # P2p2::P2pd - 配对服务。
9
9
  #
10
10
  # 包结构
11
11
  # ======
@@ -32,17 +32,21 @@ module P2p2
32
32
  data, addrinfo, rflags, *controls = p2pd.recvmsg
33
33
  return if ( data.bytesize == 1 ) || ( data.bytesize > 255 ) || ( data =~ /\/|\.|\ / )
34
34
 
35
+ if data[0] == '2'
36
+ is_p2 = true
37
+ data = data[ 1..-1 ]
38
+ else
39
+ is_p2 = false
40
+ end
41
+
35
42
  from_addr = addrinfo.to_sockaddr
36
43
  room_path = File.join( @p2pd_tmp_dir, data.gsub( "\u0000" , '' ) )
37
44
 
38
- unless File.exist?( room_path )
39
- puts "#{ Time.new } create #{ room_path } #{ addrinfo.inspect }"
40
- write_room( room_path, from_addr )
41
- return
42
- end
43
-
44
- if Time.new - File.mtime( room_path ) > EXPIRE_AFTER
45
- puts "#{ Time.new } overwrite #{ room_path } #{ addrinfo.inspect }"
45
+ if is_p2
46
+ unless File.exist?( room_path )
47
+ return
48
+ end
49
+ else
46
50
  write_room( room_path, from_addr )
47
51
  return
48
52
  end
@@ -50,13 +54,9 @@ module P2p2
50
54
  op_addr = IO.binread( room_path )
51
55
  op_addrinfo = Addrinfo.new( op_addr )
52
56
 
53
- if ( addrinfo.ip_address == op_addrinfo.ip_address ) || ( addrinfo.ip_port == op_addrinfo.ip_port )
54
- write_room( room_path, from_addr )
55
- else
56
- puts "#{ Time.new } paired #{ addrinfo.inspect } #{ op_addrinfo.inspect }"
57
- send_pack( [ [ 0, PEER_ADDR ].pack( 'Q>C' ), op_addr ].join, from_addr )
58
- send_pack( [ [ 0, PEER_ADDR ].pack( 'Q>C' ), from_addr ].join, op_addr )
59
- end
57
+ puts "#{ Time.new } paired #{ addrinfo.inspect } #{ op_addrinfo.inspect }"
58
+ send_pack( [ [ 0, PEER_ADDR ].pack( 'Q>C' ), op_addr ].join, from_addr )
59
+ send_pack( [ [ 0, PEER_ADDR ].pack( 'Q>C' ), from_addr ].join, op_addr )
60
60
  end
61
61
 
62
62
  def write_room( room_path, data )
@@ -1,3 +1,3 @@
1
1
  module P2p2
2
- VERSION = '0.20.0'.freeze
2
+ VERSION = '0.25.0'.freeze
3
3
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["qqtakafan@gmail.com"]
11
11
 
12
12
  spec.summary = %q{p2p}
13
- spec.description = %q{内网里的任意应用,访问另一个内网里的应用服务端。}
13
+ spec.description = %q{p2p通道。nat穿透。}
14
14
  spec.homepage = "https://github.com/takafan/p2p2"
15
15
  spec.license = "MIT"
16
16
 
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: p2p2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.25.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - takafan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-03 00:00:00.000000000 Z
11
+ date: 2020-08-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: 内网里的任意应用,访问另一个内网里的应用服务端。
13
+ description: p2p通道。nat穿透。
14
14
  email:
15
15
  - qqtakafan@gmail.com
16
16
  executables: []
@@ -49,8 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  requirements: []
52
- rubyforge_project:
53
- rubygems_version: 2.7.6.2
52
+ rubygems_version: 3.1.2
54
53
  signing_key:
55
54
  specification_version: 4
56
55
  summary: p2p