p2p2 0.22.0 → 0.27.0

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.
@@ -1,78 +0,0 @@
1
- module P2p2
2
- class P2pdWorker
3
-
4
- def initialize( p2pd_port, p2pd_tmp_dir )
5
- p2pd = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
6
- p2pd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 )
7
- p2pd.bind( Socket.pack_sockaddr_in( p2pd_port, '0.0.0.0' ) )
8
-
9
- @p2pd = p2pd
10
- @p2pd_tmp_dir = p2pd_tmp_dir
11
- end
12
-
13
- def looping
14
- puts 'looping'
15
-
16
- loop do
17
- rs, _ = IO.select( [ @p2pd ] )
18
- read_p2pd( rs.first )
19
- end
20
- rescue Interrupt => e
21
- puts e.class
22
- quit!
23
- end
24
-
25
- def quit!
26
- exit
27
- end
28
-
29
- private
30
-
31
- def read_p2pd( p2pd )
32
- data, addrinfo, rflags, *controls = p2pd.recvmsg
33
- return if ( data.bytesize == 1 ) || ( data.bytesize > 255 ) || ( data =~ /\/|\.|\ / )
34
-
35
- from_addr = addrinfo.to_sockaddr
36
- room_path = File.join( @p2pd_tmp_dir, data.gsub( "\u0000" , '' ) )
37
-
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 }"
46
- write_room( room_path, from_addr )
47
- return
48
- end
49
-
50
- op_addr = IO.binread( room_path )
51
- op_addrinfo = Addrinfo.new( op_addr )
52
-
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
60
- end
61
-
62
- def write_room( room_path, data )
63
- begin
64
- IO.binwrite( room_path, data )
65
- rescue Errno::EISDIR, Errno::ENAMETOOLONG, Errno::ENOENT, ArgumentError => e
66
- puts "binwrite #{ e.class } #{ Time.new }"
67
- end
68
- end
69
-
70
- def send_pack( data, target_addr )
71
- begin
72
- @p2pd.sendmsg( data, 0, target_addr )
73
- rescue IO::WaitWritable, Errno::EINTR => e
74
- puts "#{ Time.new } sendmsg ignore #{ e.class }"
75
- end
76
- end
77
- end
78
- end