-# A simple IPC server for executing arbitrary Ruby program.
+# A simple IPC server executing arbitrary Ruby program.
+
# The protocol is based on Assuan protocol of GnuPG.
# http://www.gnupg.org/(en)/related_software/libassuan/index.html
def dispatch(line)
case line.chomp
when /\AD /
- return @buf << unescape($')
+ @buf << unescape($')
when /\A(\S+)\s*/
c = $1
r = $'
def dispatch_eval(c, r)
r = deq_data if r.empty?
- p r
open('|-') do |f|
if f
d = f.read
Process.wait
- send_data(d)
+ send_data(d) if d
if $?.success?
puts("OK\r\n")
else
end
def send_data(d)
+ d = escape(d)
begin
- r = [d.length, 998].min # 998 = 1000 - CRLF
- (0 ... r).each do |i|
- r -= 2 if d[i] =~ /[%\r\n]/
- end
- puts("D #{escape(d[0 ... r])}\r\n")
- d = d[r .. -1]
+ len = [d.length, 998].min # 998 = 1000 - "D "
+ puts("D #{d[0 ... len]}\r\n")
+ d = d[len .. -1]
end until d.empty?
end