p2p2 0.24.0 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/p2p2/p1.rb +1 -1
- data/lib/p2p2/p1_worker.rb +50 -56
- data/lib/p2p2/p2.rb +1 -1
- data/lib/p2p2/p2_worker.rb +48 -50
- data/lib/p2p2/p2pd.rb +1 -1
- data/lib/p2p2/version.rb +1 -1
- data/p2p2.gemspec +1 -1
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b2e5798d8439e44d3acbb68a9a8749a1d7dc69c43a5f6effea95f6360185a0a
|
4
|
+
data.tar.gz: a306f7dfe4be190712e7317de0f7324135e16075a39af9d7d3408aa3ab978bd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8542ffdd4ed556d9a7d0aa3fbbf3f8da180610bb6a3d8bf04567bb4bc75852f45fd6821c748490e42cf85d51fdaa0b7abf62a49eff50e38565584523de79c07a
|
7
|
+
data.tar.gz: a6f98e9fb4116a19e473ed46e4767e54bf4113bb7e91da6970f64ba75f0f5fbf4f1a5f2118d6dff970640aecf9ad39cc34854ed0e317ef740c77589d1b60ba21
|
data/lib/p2p2/p1.rb
CHANGED
data/lib/p2p2/p1_worker.rb
CHANGED
@@ -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 ] =
|
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
|
|
@@ -532,19 +549,13 @@ module P2p2
|
|
532
549
|
return
|
533
550
|
end
|
534
551
|
|
552
|
+
now = Time.new
|
553
|
+
|
535
554
|
# 传ctlmsg
|
536
555
|
while @tund_info[ :ctlmsgs ].any?
|
537
556
|
to_addr, data = @tund_info[ :ctlmsgs ].first
|
538
557
|
|
539
|
-
|
540
|
-
tund.sendmsg( data, 0, to_addr )
|
541
|
-
rescue IO::WaitWritable, Errno::EINTR
|
542
|
-
return
|
543
|
-
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
544
|
-
puts "#{ Time.new } #{ e.class }, close tund"
|
545
|
-
close_tund( tund )
|
546
|
-
sleep HEARTBEAT_INTERVAL
|
547
|
-
new_a_tund
|
558
|
+
unless send_data( tund, data, to_addr )
|
548
559
|
return
|
549
560
|
end
|
550
561
|
|
@@ -560,22 +571,15 @@ module P2p2
|
|
560
571
|
data = dst_ext[ :wmems ][ pack_id ]
|
561
572
|
|
562
573
|
if data
|
563
|
-
|
564
|
-
tund.sendmsg( data, 0, @tund_info[ :tun_addr ] )
|
565
|
-
rescue IO::WaitWritable, Errno::EINTR
|
566
|
-
return
|
567
|
-
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
568
|
-
puts "#{ Time.new } #{ e.class }, close tund"
|
569
|
-
close_tund( tund )
|
570
|
-
sleep HEARTBEAT_INTERVAL
|
571
|
-
new_a_tund
|
574
|
+
unless send_data( tund, data, @tund_info[ :tun_addr ] )
|
572
575
|
return
|
573
576
|
end
|
577
|
+
|
578
|
+
dst_ext[ :last_continue_at ] = now
|
574
579
|
end
|
575
580
|
end
|
576
581
|
|
577
582
|
@tund_info[ :resendings ].shift
|
578
|
-
return
|
579
583
|
end
|
580
584
|
|
581
585
|
# 若写后达到上限,暂停取写前
|
@@ -591,8 +595,7 @@ module P2p2
|
|
591
595
|
|
592
596
|
# 取写前
|
593
597
|
if @tund_info[ :caches ].any?
|
594
|
-
|
595
|
-
from = :caches
|
598
|
+
datas = @tund_info[ :caches ]
|
596
599
|
elsif @tund_info[ :chunks ].any?
|
597
600
|
path = File.join( @tund_chunk_dir, @tund_info[ :chunks ].shift )
|
598
601
|
|
@@ -613,48 +616,39 @@ module P2p2
|
|
613
616
|
data = data[ ( 12 + pack_size )..-1 ]
|
614
617
|
end
|
615
618
|
|
616
|
-
@tund_info[ :caches ] = caches
|
617
|
-
dst_local_port, pack_id, data = caches.first
|
618
|
-
from = :caches
|
619
|
+
datas = @tund_info[ :caches ] = caches
|
619
620
|
elsif @tund_info[ :wbuffs ].any?
|
620
|
-
|
621
|
-
from = :wbuffs
|
621
|
+
datas = @tund_info[ :wbuffs ]
|
622
622
|
else
|
623
623
|
@writes.delete( tund )
|
624
624
|
return
|
625
625
|
end
|
626
626
|
|
627
|
-
|
627
|
+
while datas.any?
|
628
|
+
dst_local_port, pack_id, data = datas.first
|
629
|
+
dst_ext = @tund_info[ :dst_exts ][ dst_local_port ]
|
628
630
|
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
631
|
+
if dst_ext
|
632
|
+
if pack_id <= CONFUSE_UNTIL
|
633
|
+
data = @custom.encode( data )
|
634
|
+
# puts "debug1 encoded pack #{ pack_id }"
|
635
|
+
end
|
634
636
|
|
635
|
-
|
637
|
+
data = [ [ pack_id, dst_local_port ].pack( 'Q>n' ), data ].join
|
636
638
|
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
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
|
647
648
|
end
|
648
649
|
|
649
|
-
|
650
|
-
now = Time.new
|
651
|
-
dst_ext[ :relay_pack_id ] = pack_id
|
652
|
-
dst_ext[ :wmems ][ pack_id ] = data
|
653
|
-
dst_ext[ :send_ats ][ pack_id ] = now
|
654
|
-
dst_ext[ :last_continue_at ] = now
|
650
|
+
datas.shift
|
655
651
|
end
|
656
|
-
|
657
|
-
@tund_info[ from ].shift
|
658
652
|
end
|
659
653
|
|
660
654
|
##
|
data/lib/p2p2/p2.rb
CHANGED
data/lib/p2p2/p2_worker.rb
CHANGED
@@ -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 ] =
|
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
|
|
@@ -558,17 +573,13 @@ module P2p2
|
|
558
573
|
return
|
559
574
|
end
|
560
575
|
|
576
|
+
now = Time.new
|
577
|
+
|
561
578
|
# 传ctlmsg
|
562
579
|
while @tun_info[ :ctlmsgs ].any?
|
563
580
|
to_addr, data = @tun_info[ :ctlmsgs ].first
|
564
581
|
|
565
|
-
|
566
|
-
tun.sendmsg( data, 0, to_addr )
|
567
|
-
rescue IO::WaitWritable, Errno::EINTR
|
568
|
-
return
|
569
|
-
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
570
|
-
puts "#{ Time.new } #{ e.class }, close tun"
|
571
|
-
close_tun( tun )
|
582
|
+
unless send_data( tun, data, to_addr )
|
572
583
|
return
|
573
584
|
end
|
574
585
|
|
@@ -584,20 +595,15 @@ module P2p2
|
|
584
595
|
data = src_ext[ :wmems ][ pack_id ]
|
585
596
|
|
586
597
|
if data
|
587
|
-
|
588
|
-
tun.sendmsg( data, 0, @tun_info[ :tund_addr ] )
|
589
|
-
rescue IO::WaitWritable, Errno::EINTR
|
590
|
-
return
|
591
|
-
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
592
|
-
puts "#{ Time.new } #{ e.class }, close tun"
|
593
|
-
close_tun( tun )
|
598
|
+
unless send_data( tun, data, @tun_info[ :tund_addr ] )
|
594
599
|
return
|
595
600
|
end
|
601
|
+
|
602
|
+
src_ext[ :last_continue_at ] = now
|
596
603
|
end
|
597
604
|
end
|
598
605
|
|
599
606
|
@tun_info[ :resendings ].shift
|
600
|
-
return
|
601
607
|
end
|
602
608
|
|
603
609
|
# 若写后达到上限,暂停取写前
|
@@ -613,8 +619,7 @@ module P2p2
|
|
613
619
|
|
614
620
|
# 取写前
|
615
621
|
if @tun_info[ :caches ].any?
|
616
|
-
|
617
|
-
from = :caches
|
622
|
+
datas = @tun_info[ :caches ]
|
618
623
|
elsif @tun_info[ :chunks ].any?
|
619
624
|
path = File.join( @tun_chunk_dir, @tun_info[ :chunks ].shift )
|
620
625
|
|
@@ -635,46 +640,39 @@ module P2p2
|
|
635
640
|
data = data[ ( 18 + pack_size )..-1 ]
|
636
641
|
end
|
637
642
|
|
638
|
-
@tun_info[ :caches ] = caches
|
639
|
-
src_id, pack_id, data = caches.first
|
640
|
-
from = :caches
|
643
|
+
datas = @tun_info[ :caches ] = caches
|
641
644
|
elsif @tun_info[ :wbuffs ].any?
|
642
|
-
|
643
|
-
from = :wbuffs
|
645
|
+
datas = @tun_info[ :wbuffs ]
|
644
646
|
else
|
645
647
|
@writes.delete( tun )
|
646
648
|
return
|
647
649
|
end
|
648
650
|
|
649
|
-
|
651
|
+
while datas.any?
|
652
|
+
src_id, pack_id, data = datas.first
|
653
|
+
src_ext = @tun_info[ :src_exts ][ src_id ]
|
650
654
|
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
655
|
+
if src_ext
|
656
|
+
if pack_id <= CONFUSE_UNTIL
|
657
|
+
data = @custom.encode( data )
|
658
|
+
# puts "debug1 encoded pack #{ pack_id }"
|
659
|
+
end
|
656
660
|
|
657
|
-
|
661
|
+
data = [ [ pack_id, src_id ].pack( 'Q>Q>' ), data ].join
|
658
662
|
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
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
|
667
672
|
end
|
668
673
|
|
669
|
-
|
670
|
-
now = Time.new
|
671
|
-
src_ext[ :relay_pack_id ] = pack_id
|
672
|
-
src_ext[ :wmems ][ pack_id ] = data
|
673
|
-
src_ext[ :send_ats ][ pack_id ] = now
|
674
|
-
src_ext[ :last_continue_at ] = now
|
674
|
+
datas.shift
|
675
675
|
end
|
676
|
-
|
677
|
-
@tun_info[ from ].shift
|
678
676
|
end
|
679
677
|
|
680
678
|
##
|
data/lib/p2p2/p2pd.rb
CHANGED
data/lib/p2p2/version.rb
CHANGED
data/p2p2.gemspec
CHANGED
@@ -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.
|
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-
|
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
|
-
|
53
|
-
rubygems_version: 2.7.7
|
52
|
+
rubygems_version: 3.1.2
|
54
53
|
signing_key:
|
55
54
|
specification_version: 4
|
56
55
|
summary: p2p
|