code: func (m *Internal) EventFire(args *structs.EventFireRequest,
  	reply *structs.EventFireResponse) error {
  	if done, err := m.srv.forward("Internal.EventFire", args, args, reply); done {
  		return err
  	}
  
  	// Check ACLs
  	rule, err := m.srv.ResolveToken(args.Token)
  	if err != nil {
  		return err
  	}
  
  	if rule != nil && !rule.EventWrite(args.Name) {
  		m.srv.logger.Printf("[WARN] consul: user event %q blocked by ACLs", args.Name)
  		return acl.ErrPermissionDenied
  	}
  
  	// Set the query meta data
  	m.srv.setQueryMeta(&reply.QueryMeta)
  
  	// Add the consul prefix to the event name
  	eventName := userEventName(args.Name)
  
  	// Fire the event on all LAN segments
  	segments := m.srv.LANSegments()
  	var errs error
  	for name, segment := range segments {
  		err := segment.UserEvent(eventName, args.Payload, false)
  		if err != nil {
  			err = fmt.Errorf("error broadcasting event to segment %q: %v", name, err)
  			errs = multierror.Append(errs, err)
  		}
  	}
  	return errs
  }
docs: // EventFire is a bit of an odd endpoint, but it allows for a cross-DC RPC
  // call to fire an event. The primary use case is to enable user events being
  // triggered in a remote DC.