module SSDP
Constants
- DEFAULTS
- HEADER_MATCH
Public Class Methods
create_broadcaster()
click to toggle source
# File lib/ssdp.rb, line 59 def create_broadcaster broadcaster = UDPSocket.new broadcaster.setsockopt Socket::SOL_SOCKET, Socket::SO_BROADCAST, true broadcaster.setsockopt Socket::IPPROTO_IP, Socket::IP_MULTICAST_TTL, 1 broadcaster end
create_listener(options)
click to toggle source
# File lib/ssdp.rb, line 45 def create_listener(options) listener = UDPSocket.new listener.do_not_reverse_lookup = true membership = IPAddr.new(options[:broadcast]).hton + IPAddr.new(options[:bind]).hton listener.setsockopt Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, membership listener.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true if defined? Socket::SO_REUSEPORT listener.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEPORT, true end listener.bind options[:bind], options[:port] listener end
parse_ssdp(message)
click to toggle source
# File lib/ssdp.rb, line 26 def parse_ssdp(message) message.gsub! "\r\n", "\n" header, body = message.split "\n\n" header = header.split "\n" status = header.shift params = {} header.each do |line| match = HEADER_MATCH.match line next if match.nil? value = match[2] value = (value[1, value.length - 2] || '') if value.start_with?('"') && value.end_with?('"') params[match[1]] = value end { :status => status, :params => params, :body => body } end
Private Instance Methods
create_broadcaster()
click to toggle source
# File lib/ssdp.rb, line 59 def create_broadcaster broadcaster = UDPSocket.new broadcaster.setsockopt Socket::SOL_SOCKET, Socket::SO_BROADCAST, true broadcaster.setsockopt Socket::IPPROTO_IP, Socket::IP_MULTICAST_TTL, 1 broadcaster end
create_listener(options)
click to toggle source
# File lib/ssdp.rb, line 45 def create_listener(options) listener = UDPSocket.new listener.do_not_reverse_lookup = true membership = IPAddr.new(options[:broadcast]).hton + IPAddr.new(options[:bind]).hton listener.setsockopt Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, membership listener.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true if defined? Socket::SO_REUSEPORT listener.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEPORT, true end listener.bind options[:bind], options[:port] listener end
parse_ssdp(message)
click to toggle source
# File lib/ssdp.rb, line 26 def parse_ssdp(message) message.gsub! "\r\n", "\n" header, body = message.split "\n\n" header = header.split "\n" status = header.shift params = {} header.each do |line| match = HEADER_MATCH.match line next if match.nil? value = match[2] value = (value[1, value.length - 2] || '') if value.start_with?('"') && value.end_with?('"') params[match[1]] = value end { :status => status, :params => params, :body => body } end