def update_state
      current_state.dup.tap do |s|
        src = eval_parameter :src
        s[src] = next_state s[src]
      end
    end
def update_state
      current_state.dup.tap do |s|
        src = eval_parameter :src
        s[src] = next_state s[src]
      end
    end
Protocol is symmetrical.  Each endpoint has its own state.
 This is a bit clunky and maybe should be abstracted into a module?
 Or update parser.rb to differentiate between proto-shared and endpoint-separate state?