Skip to content

Commit

Permalink
Reformatting to more conventional indentation.
Browse files Browse the repository at this point in the history
  • Loading branch information
threedaymonk committed Mar 5, 2010
1 parent 872ce6f commit 20d9dd1
Show file tree
Hide file tree
Showing 9 changed files with 294 additions and 299 deletions.
1 change: 0 additions & 1 deletion lib/net/rtmp.rb
Expand Up @@ -17,4 +17,3 @@ def connect
end
end
end

175 changes: 87 additions & 88 deletions lib/net/rtmp/amf.rb
Expand Up @@ -3,95 +3,94 @@
require 'stringio'

module Net
class RTMP
class AMF
EndOfPacket = Class.new

DECODE_DATA_TYPE = {
0x00 => :number,
0x01 => :boolean,
0x02 => :string,
0x03 => :object,
0x04 => :movieclip,
0x05 => :null,
0x06 => :undefined,
0x07 => :reference,
0x08 => :ecma_array,
0x09 => :object_end,
0x0a => :strict_array,
0x0b => :date,
0x0c => :long_string,
0x0d => :unsupported,
0x0e => :record_set,
0x0f => :xml_object,
0x10 => :typed_object
}
ENCODE_DATA_TYPE = DECODE_DATA_TYPE.invert

def initialize
@elements = []
end

def parse(data)
@elements = recursive_parse(Bytestream.new(StringIO.new(data)))
end
class RTMP
class AMF
EndOfPacket = Class.new

DECODE_DATA_TYPE = {
0x00 => :number,
0x01 => :boolean,
0x02 => :string,
0x03 => :object,
0x04 => :movieclip,
0x05 => :null,
0x06 => :undefined,
0x07 => :reference,
0x08 => :ecma_array,
0x09 => :object_end,
0x0a => :strict_array,
0x0b => :date,
0x0c => :long_string,
0x0d => :unsupported,
0x0e => :record_set,
0x0f => :xml_object,
0x10 => :typed_object
}
ENCODE_DATA_TYPE = DECODE_DATA_TYPE.invert

def initialize
@elements = []
end

def parse(data)
@elements = recursive_parse(Bytestream.new(StringIO.new(data)))
end

def to_a
@elements
end

private
def recursive_parse(bytestream)
elements = []
until bytestream.eof? || (e = next_element(bytestream)) == EndOfPacket
elements << e
end
elements
end

def next_element(bytestream)
data_type = DECODE_DATA_TYPE[read_data_type(bytestream)]
value = __send__("read_#{data_type}", bytestream)
value
end

def read_data_type(bytestream)
bytestream.read_uint8
end

def read_length_prefixed_data(bytestream)
length = bytestream.read_uint16_be
bytestream.read(length)
end

alias_method :read_string, :read_length_prefixed_data
alias_method :read_long_string, :read_length_prefixed_data

def read_number(bytestream)
bytestream.read_double_be
end

def read_boolean(bytestream)
bytestream.read_uint8 != 0
end

def read_object(bytestream)
hash = {}
until (key = read_length_prefixed_data(bytestream)) == ''
hash[key] = next_element(bytestream)
end
hash
end

def read_null(_)
nil
end

def read_object_end(_)
EndOfPacket
end

def to_a
@elements
end

private

def recursive_parse(bytestream)
elements = []
until bytestream.eof? || (e = next_element(bytestream)) == EndOfPacket
elements << e
end
elements
end

def next_element(bytestream)
data_type = DECODE_DATA_TYPE[read_data_type(bytestream)]
value = __send__("read_#{data_type}", bytestream)
value
end

def read_data_type(bytestream)
bytestream.read_uint8
end

def read_length_prefixed_data(bytestream)
length = bytestream.read_uint16_be
bytestream.read(length)
end

alias_method :read_string, :read_length_prefixed_data
alias_method :read_long_string, :read_length_prefixed_data

def read_number(bytestream)
bytestream.read_double_be
end

def read_boolean(bytestream)
bytestream.read_uint8 != 0
end

def read_object(bytestream)
hash = {}
until (key = read_length_prefixed_data(bytestream)) == ''
hash[key] = next_element(bytestream)
end
hash
end

def read_null(_)
nil
end

def read_object_end(_)
EndOfPacket
end

end
end
end
131 changes: 65 additions & 66 deletions lib/net/rtmp/connection.rb
Expand Up @@ -2,85 +2,84 @@
require 'net/rtmp/errors'

module Net
class RTMP
class Connection
HEADER_BYTE = "\x03"
HANDSHAKE_LENGTH = 1536
class RTMP
class Connection
HEADER_BYTE = "\x03"
HANDSHAKE_LENGTH = 1536

def initialize(socket)
@socket = WrappedSocket.new(socket)
@packets = {}
@headers = {}
end
def initialize(socket)
@socket = WrappedSocket.new(socket)
@packets = {}
@headers = {}
end

def handshake
@socket.write("\x03" + random_string(HANDSHAKE_LENGTH))
shared = @socket.read(2 * HANDSHAKE_LENGTH + 1)[(HANDSHAKE_LENGTH + 1)..-1]
@socket.write(shared)
end
def handshake
@socket.write("\x03" + random_string(HANDSHAKE_LENGTH))
shared = @socket.read(2 * HANDSHAKE_LENGTH + 1)[(HANDSHAKE_LENGTH + 1)..-1]
@socket.write(shared)
end

def get_data
header = Packet::Header.new
header.parse(@socket)
if packet = @packets[header.oid]
packet.endow(header)
else
if previous_header = @headers[header.oid]
header.inherit(previous_header)
def get_data
header = Packet::Header.new
header.parse(@socket)
if packet = @packets[header.oid]
packet.endow(header)
else
if previous_header = @headers[header.oid]
header.inherit(previous_header)
end
packet = @packets[header.oid] = Packet.new(header)
end
@headers[header.oid] = header
packet << @socket.read(packet.bytes_to_fetch)
if packet.complete?
@packets.delete(header.oid)
yield packet
end
end
packet = @packets[header.oid] = Packet.new(header)
end
@headers[header.oid] = header
packet << @socket.read(packet.bytes_to_fetch)
if packet.complete?
@packets.delete(header.oid)
yield packet
end
end

def need_data?
@packets.any?
end
def need_data?
@packets.any?
end

def fetch(&blk)
get_data(&blk)
while need_data?
get_data(&blk)
end
end
def fetch(&blk)
get_data(&blk)
while need_data?
get_data(&blk)
end
end

def send(packet)
packet.generate do |chunk|
@socket.write(chunk)
end
end
def send(packet)
packet.generate do |chunk|
@socket.write(chunk)
end
end

private
private
def random_string(length)
(0...length).map{ rand(256) }.pack('C*')
end

def random_string(length)
(0...length).map{ rand(256) }.pack('C*')
end
class WrappedSocket
def initialize(socket)
@socket = socket
end

class WrappedSocket
def initialize(socket)
@socket = socket
end
def read(length=nil)
if length
data = @socket.read(length)
raise NoMoreData if data.nil?
return data
else
return @socket.read
end
end

def read(length=nil)
if length
data = @socket.read(length)
raise NoMoreData if data.nil?
return data
else
return @socket.read
def write(data)
@socket.write(data)
end
end
end

def write(data)
@socket.write(data)
end
end

end
end
end

0 comments on commit 20d9dd1

Please sign in to comment.