Skip to content

Commit

Permalink
Fixed the cert recieval code so it won't auto-investigate an already-…
Browse files Browse the repository at this point in the history
…known server, and added ponging.
  • Loading branch information
danopia committed Oct 28, 2009
1 parent 6995103 commit ce8c78d
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 57 deletions.
4 changes: 2 additions & 2 deletions wave.danopia.net/app/views/waves/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
<% end -%>

<p><em>Participants:</em> <%=h wave.participants.join(', ') %></p>
<p><em>Digest:</em> <%=h wave.contents.select{|item| item.is_a? String}.join(', ') %></p>
<p><em>Digest:</em> <%=h wave.contents.select{|item| item.is_a? String}.join(' ') %></p>

<p>Have <%=h wave.deltas.size %> updates</p>
<p>Have <%=h wave.real_deltas.size %> updates</p>

<% end -%>
16 changes: 14 additions & 2 deletions wave.danopia.net/lib/sails_remote.rb
Original file line number Diff line number Diff line change
Expand Up @@ -656,9 +656,21 @@ def local?
end

# Determines if the wave has a complete history
def complete?
#
# Pass true as the argument to request more history if incomplete; pass a
# Hash and it'll set key packet-id to the current Wave.
def complete?(request_more=false)
@deltas.each_value do |delta|
return false if delta.is_a?(FakeDelta) && delta.version != 0
if delta.is_a?(FakeDelta) && delta.version != 0

if request_more
puts "Requesting more deltas for #{self.path}"
id = @provider.sock.send_xml 'iq', 'get', self.host, "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><items node=\"wavelet\"><delta-history xmlns=\"http://waveprotocol.org/protocol/0.2/waveserver\" start-version=\"0\" start-version-hash=\"#{encode64(self[0].hash)}\" end-version=\"#{self.newest_version}\" end-version-hash=\"#{encode64(self.newest.hash)}\" wavelet-name=\"#{self.conv_root_path}\"/></items></pubsub>"
request_more[id] = wave if request_more.is_a? Hash
end

return false
end
end
true
end
Expand Down
110 changes: 57 additions & 53 deletions xmpp_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
require 'wave_proto'
require 'wave.danopia.net/lib/sails_remote'

sleep 2

def encode64(data)
Base64.encode64(data).gsub("\n", '')
end
Expand Down Expand Up @@ -60,25 +58,25 @@ def sock.send_xml(name, type, to, contents, id=nil)

wave = Wave.new(provider, 'R0PIDtU751vF')

delta = Delta.new(wave, "me@danopia.net")
delta.operations << AddUserOp.new("me@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << AddUserOp.new("me@#{provider.domain}")
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta.operations << AddUserOp.new("test@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << AddUserOp.new("test@#{provider.domain}")
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << MutateOp.new('main', ["(\004",
{2=>{0=>"line", 1=>{0=>"by", 1=>'me@danopia.net'}}}," \001",
{2=>{0=>"line", 1=>{0=>"by", 1=>"me@#{provider.domain}"}}}," \001",
{1=>"This is a test."}])
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta.operations << RemoveUserOp.new("test@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << RemoveUserOp.new("test@#{provider.domain}")
delta.freeze
wave << delta

Expand All @@ -88,22 +86,22 @@ def sock.send_xml(name, type, to, contents, id=nil)

wave = Wave.new(provider, 'BHW1z9FOWKua')

delta = Delta.new(wave, "me@danopia.net")
delta.operations << AddUserOp.new('me@danopia.net') # Add myself to the conv_root_path
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << AddUserOp.new("me@#{provider.domain}") # Add myself to the conv_root_path
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << AddUserOp.new('echoe@killerswan.com') # Add an echoey to the wave
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << RemoveUserOp.new('echoe@killerswan.com')
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << AddUserOp.new('echoey@killerswan.com')
delta.freeze
wave << delta
Expand All @@ -114,28 +112,28 @@ def sock.send_xml(name, type, to, contents, id=nil)

wave = Wave.new(provider, 'ASDFASDFASDF')

delta = Delta.new(wave, "me@danopia.net")
delta.operations << AddUserOp.new('me@danopia.net') # Add myself to the conv_root_path
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << AddUserOp.new("me@#{provider.domain}") # Add myself to the conv_root_path
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << AddUserOp.new('echoe@danopia.net') # Add an echoey to the wave
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << RemoveUserOp.new('echoe@danopia.net')
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << AddUserOp.new('echoey@danopia.net')
delta.freeze
wave << delta

delta = Delta.new(wave, "me@danopia.net")
delta.operations << AddUserOp.new('danopia@danopia.net')
delta = Delta.new(wave, "me@#{provider.domain}")
delta.operations << AddUserOp.new("danopia@#{provider.domain}")
delta.propagate # !
wave << delta

Expand Down Expand Up @@ -256,9 +254,9 @@ def sock.send_xml(name, type, to, contents, id=nil)
if (packet/'certificate').any?
puts "Got a cert from #{from}"

server = provider[from.downcase]
server = provider.servers[from.downcase]
unless server
server = Server.new(from.downcase, from.downcase)
server = Server.new(provider, (packet/'signature')['domain'], from.downcase)
provider << server
end

Expand Down Expand Up @@ -330,47 +328,53 @@ def sock.send_xml(name, type, to, contents, id=nil)
ids.delete id
puts "Got history for #{wave.name}"

delta = nil
(packet/'pubsub/items/item/applied-delta').each do |update|
#p decode64(update.inner_text)
delta = Delta.parse(provider, wave.conv_root_path, decode64(update.inner_text), true)
puts "Got a delta, version #{delta.version}"
wave.apply delta
end

wave.apply delta if delta # apply the latest only for less output
end

when [:message, :normal], [:message, :none]
subtype = packet.children.first.name

if subtype == 'received'
server = provider.servers[from.downcase]
if !server
puts "Unknown server."

elsif server.state == :details
server.state = :ponged
puts "#{from} ponged, attempting to send my cert (state = :ponged)"
packet.children.each do |message|
subtype = message.name
if subtype == 'received'
server = provider.servers[from.downcase]
if !server
puts "Unknown server."

elsif server.state == :details
server.state = :ponged
puts "#{from} ponged, attempting to send my cert (state = :ponged)"

sock.send_xml 'iq', 'set', from, "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><publish node=\"signer\"><item><signature xmlns=\"http://waveprotocol.org/protocol/0.2/waveserver\" domain=\"#{provider.domain}\" algorithm=\"SHA256\"><certificate><![CDATA[#{provider.certificate}]]></certificate></signature></item></publish></pubsub>"

sock.send_xml 'iq', 'set', from, "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><publish node=\"signer\"><item><signature xmlns=\"http://waveprotocol.org/protocol/0.2/waveserver\" domain=\"#{provider.domain}\" algorithm=\"SHA256\"><certificate><![CDATA[#{provider.certificate}]]></certificate></signature></item></publish></pubsub>"
else
puts "#{from} ACK'ed our previous packet."
end

elsif subtype == 'request'

else
puts "#{from} ACK'ed our previous packet."
end
if (packet/'event/items/item/wavelet-update').any?
wave = nil
(packet/'event/items/item/wavelet-update').each do |update|
delta = Delta.parse(provider, update['wavelet-name'], decode64(update.inner_text), true)
puts "Got delta version #{delta.version}"
wave = delta.wave
end

wave.apply(wave.newest) if wave.complete?(ids)
end

sock.send_xml 'message', 'normal', from, '<received xmlns="urn:xmpp:receipts"/>', id

elsif subtype == 'ping'
puts "Got a ping from #{from}"

elsif subtype == 'request'
wave = nil
(packet/'event/items/item/wavelet-update').each do |update|
delta = Delta.parse(provider, update['wavelet-name'], WaveProtoBuffer.parse(:applied_delta, decode64(update.inner_text)), true)
puts "Got delta version #{delta.version}"
wave = delta.wave
end

if wave.complete?
wave.apply wave.newest
else
puts "Requesting more deltas"
id = sock.send_xml 'iq', 'get', from, "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><items node=\"wavelet\"><delta-history xmlns=\"http://waveprotocol.org/protocol/0.2/waveserver\" start-version=\"0\" start-version-hash=\"#{encode64(wave[0].hash)}\" end-version=\"#{wave.newest_version}\" end-version-hash=\"#{encode64(wave.newest.hash)}\" wavelet-name=\"#{wave.conv_root_path}\"/></items></pubsub>"
ids[id] = wave
end

end

Expand Down

0 comments on commit ce8c78d

Please sign in to comment.