tkellem 0.8.4 → 0.8.5
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.
- data/lib/tkellem/bouncer.rb +1 -0
- data/lib/tkellem/bouncer_connection.rb +41 -43
- data/lib/tkellem/irc_server.rb +19 -11
- data/lib/tkellem/version.rb +1 -1
- data/lib/tkellem.rb +23 -5
- metadata +2 -2
data/lib/tkellem/bouncer.rb
CHANGED
@@ -31,10 +31,12 @@ module BouncerConnection
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def post_init
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
failsafe(:post_init) do
|
35
|
+
if ssl
|
36
|
+
start_tls :verify_peer => false
|
37
|
+
else
|
38
|
+
ssl_handshake_completed
|
39
|
+
end
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
@@ -66,45 +68,39 @@ module BouncerConnection
|
|
66
68
|
end
|
67
69
|
|
68
70
|
def receive_line(line)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
@
|
84
|
-
|
85
|
-
@
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
@username
|
71
|
+
failsafe("message: {#{line}}") do
|
72
|
+
trace "from client: #{line}"
|
73
|
+
msg = IrcMessage.parse(line)
|
74
|
+
|
75
|
+
command = msg.command
|
76
|
+
if @user && command == 'PRIVMSG' && msg.args.first == '-tkellem'
|
77
|
+
msg_tkellem(IrcMessage.new(nil, 'TKELLEM', [msg.args.last]))
|
78
|
+
elsif command == 'TKELLEM'
|
79
|
+
msg_tkellem(msg)
|
80
|
+
elsif command == 'CAP'
|
81
|
+
# TODO: full support for CAP -- this just gets mobile colloquy connecting
|
82
|
+
if msg.args.first =~ /req/i
|
83
|
+
send_msg("CAP NAK")
|
84
|
+
end
|
85
|
+
elsif command == 'PASS' && @state == :auth
|
86
|
+
@password = msg.args.first
|
87
|
+
elsif command == 'NICK' && @state == :auth
|
88
|
+
@connecting_nick = msg.args.first
|
89
|
+
maybe_connect
|
90
|
+
elsif command == 'QUIT'
|
91
|
+
close_connection
|
92
|
+
elsif command == 'USER' && @state == :auth
|
93
|
+
unless @username
|
94
|
+
@username, @conn_info = msg.args.first.strip.split('@', 2).map { |a| a.downcase }
|
95
|
+
end
|
96
|
+
maybe_connect
|
97
|
+
elsif @state == :auth
|
98
|
+
error!("Protocol error. You must authenticate first.")
|
99
|
+
elsif @state == :connected
|
100
|
+
@bouncer.client_msg(self, msg)
|
101
|
+
else
|
102
|
+
say_as_tkellem("You must connect to an irc network to do that.")
|
92
103
|
end
|
93
|
-
maybe_connect
|
94
|
-
elsif @state == :auth
|
95
|
-
error!("Protocol error. You must authenticate first.")
|
96
|
-
elsif @state == :connected
|
97
|
-
@bouncer.client_msg(self, msg)
|
98
|
-
else
|
99
|
-
say_as_tkellem("You must connect to an irc network to do that.")
|
100
|
-
end
|
101
|
-
|
102
|
-
rescue => e
|
103
|
-
error "Error handling message: {#{msg}} #{e}"
|
104
|
-
e.backtrace.each { |l| error l }
|
105
|
-
begin
|
106
|
-
error! "Internal Tkellem error."
|
107
|
-
rescue
|
108
104
|
end
|
109
105
|
end
|
110
106
|
|
@@ -148,7 +144,9 @@ module BouncerConnection
|
|
148
144
|
end
|
149
145
|
|
150
146
|
def unbind
|
151
|
-
|
147
|
+
failsafe(:unbind) do
|
148
|
+
@bouncer.disconnect_client(self) if @bouncer
|
149
|
+
end
|
152
150
|
end
|
153
151
|
end
|
154
152
|
|
data/lib/tkellem/irc_server.rb
CHANGED
@@ -16,27 +16,35 @@ module IrcServerConnection
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def post_init
|
19
|
-
|
20
|
-
@
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
failsafe(:post_init) do
|
20
|
+
if @ssl
|
21
|
+
@bouncer.debug "starting TLS"
|
22
|
+
# TODO: support strict cert checks
|
23
|
+
start_tls :verify_peer => false
|
24
|
+
else
|
25
|
+
ssl_handshake_completed
|
26
|
+
end
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
28
30
|
def ssl_handshake_completed
|
29
|
-
|
31
|
+
failsafe(:ssl_handshake_completed) do
|
32
|
+
EM.next_tick { @bouncer.connection_established(self) }
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
36
|
def receive_line(line)
|
33
|
-
|
34
|
-
|
35
|
-
|
37
|
+
failsafe(:receive_line) do
|
38
|
+
trace "from server: #{line}"
|
39
|
+
msg = IrcMessage.parse(line)
|
40
|
+
@bouncer.server_msg(msg)
|
41
|
+
end
|
36
42
|
end
|
37
43
|
|
38
44
|
def unbind
|
39
|
-
|
45
|
+
failsafe(:unbind) do
|
46
|
+
@bouncer.disconnected!
|
47
|
+
end
|
40
48
|
end
|
41
49
|
end
|
42
50
|
|
data/lib/tkellem/version.rb
CHANGED
data/lib/tkellem.rb
CHANGED
@@ -4,11 +4,16 @@ module Tkellem
|
|
4
4
|
|
5
5
|
def self.logger=(new_logger)
|
6
6
|
@logger = new_logger
|
7
|
+
if @logger.is_a?(Logger)
|
8
|
+
@logger.formatter = proc do |severity, time, progname, msg|
|
9
|
+
obj, msg = msg if msg.is_a?(Array)
|
10
|
+
"#{time.strftime('%y-%m-%dT%H:%M:%S')} #{severity[0,3]} #{(obj && obj.log_name) || 'tkellem'} (#{obj && obj.object_id}): #{msg}\n"
|
11
|
+
end
|
12
|
+
end
|
7
13
|
end
|
8
14
|
def self.logger
|
9
15
|
return @logger if @logger
|
10
|
-
|
11
|
-
@logger.datetime_format = "%Y-%m-%d"
|
16
|
+
self.logger = Logger.new(STDERR)
|
12
17
|
@logger
|
13
18
|
end
|
14
19
|
|
@@ -20,18 +25,31 @@ module Tkellem
|
|
20
25
|
end
|
21
26
|
|
22
27
|
def log_name
|
23
|
-
|
28
|
+
nil
|
24
29
|
end
|
25
30
|
|
26
31
|
def trace(msg)
|
27
32
|
puts("TRACE: #{log_name}: #{msg}") if EasyLogger.trace
|
28
33
|
end
|
29
34
|
|
35
|
+
def failsafe(event)
|
36
|
+
yield
|
37
|
+
rescue => e
|
38
|
+
# if the failsafe rescue fails, we're in a really bad state and should probably just die
|
39
|
+
self.error "exception while handling #{event}"
|
40
|
+
self.error e.to_s
|
41
|
+
(e.backtrace || []).each { |line| self.error line }
|
42
|
+
end
|
43
|
+
|
30
44
|
::Logger::Severity.constants.each do |level|
|
31
45
|
next if level == "UNKNOWN"
|
32
46
|
module_eval(<<-EVAL, __FILE__, __LINE__)
|
33
|
-
def #{level.downcase}(msg)
|
34
|
-
|
47
|
+
def #{level.downcase}(msg, &block)
|
48
|
+
if block
|
49
|
+
EasyLogger.logger.#{level.downcase} { [self, block.call] }
|
50
|
+
else
|
51
|
+
EasyLogger.logger.#{level.downcase}([self, msg])
|
52
|
+
end
|
35
53
|
end
|
36
54
|
EVAL
|
37
55
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: tkellem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.8.
|
5
|
+
version: 0.8.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Brian Palmer
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-06-
|
13
|
+
date: 2011-06-18 00:00:00 -06:00
|
14
14
|
default_executable: tkellem
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|