class Dashed::Button

Constants

SNAPLENGTH
TIMEOUT

Attributes

last_press[R]
mac_address[R]
timeout[RW]

Public Class Methods

new(mac_address, interface, timeout = TIMEOUT) click to toggle source
# File lib/dashed/button.rb, line 13
def initialize(mac_address, interface, timeout = TIMEOUT)
  @mac_address = mac_address
  @interface = interface
  @timeout = timeout
  @last_press = nil
end

Public Instance Methods

on_press() { || ... } click to toggle source
# File lib/dashed/button.rb, line 20
def on_press
  capture.each_packet do |raw_packet|
    packet = Packet.new(raw_packet)
    if packet.host_mac_address == mac_address && !duplicate_arp?
      @last_press = Time.now
      yield if block_given?
    end
  end
end

Private Instance Methods

capture() click to toggle source
# File lib/dashed/button.rb, line 32
def capture
  return @capture if @capture

  @capture = PCAPRUB::Pcap.open_live(@interface, SNAPLENGTH, true, 0)
  @capture.setfilter("arp")
end
duplicate_arp?() click to toggle source
# File lib/dashed/button.rb, line 39
def duplicate_arp?
  last_press && (last_press - Time.now).abs < 45
end