
interface finder/0.2 {
	  /** 
	   * Register client with Finder.  Once client has been registered
	   * Xrl registrations may proceed.  Once Xrl registrations have
	   * have been completed the client needs to be enabled for the 
	   * Finder to respond to queries about the client.
	   *
	   * Fails if instance_name is already registered, or another instance
	   * of the same class is registered as a singleton. The client
	   * must support the finder_client interface in order to be
	   * able to process messages from the finder.
	   */
	  register_finder_client ? instance_name:txt			      \
				 & class_name:txt			      \
				 & singleton:bool			      \
				 & in_cookie:txt			      \
				 -> out_cookie:txt;

	  unregister_finder_client ? instance_name:txt;

	  /**
	   * Enable resolution of Xrls associated with target.  Disabling
	   * Xrls at present does not cause clients to flush state associated
	   * with target so cached entries in clients are unaffected by this
	   * Xrl.
	   * 
	   * Caller must be client that registered Xrl.
	   */
	  set_finder_client_enabled ? instance_name:txt			      \
				    & enabled:bool;

	  /**
	   * Get enabled state information associated with finder client.
	   */
	  finder_client_enabled ? instance_name:txt -> enabled:bool;

	  /** 
	   * Add resolved Xrl into system, fails if xrl is already
	   * registered. 
	   */
	  add_xrl ? xrl:txt			      			      \
		  & protocol_name:txt					      \
		  & protocol_args:txt					      \
		  -> resolved_xrl_method_name:txt;

	  /**
	   * Remove xrl
	   */
	  remove_xrl ? xrl:txt;

	  /**
	   * Resolve Xrl
	   */
	   resolve_xrl ? xrl:txt -> resolutions:list<txt>;

	  /**
	   * Get list of registered Xrl targets 
	   */
	  get_xrl_targets -> target_names:list<txt>;

	  /**
	   * Get list of Xrls registered by target
	   */
	  get_xrls_registered_by ? target_name:txt -> xrls:list<txt>;

	  /**
	   * Get list of IPv4 hosts that clients should accept IPC requests
	   * from.
	   */
	   get_ipv4_permitted_hosts -> ipv4s:list<ipv4>;

	  /**
	   * Get list of IPv4 nets that clients should accept IPC requests
	   * from.
	   */
	   get_ipv4_permitted_nets -> ipv4nets:list<ipv4net>;

	  /**
	   * Get list of IPv6 hosts that clients should accept IPC requests
	   * from.
	   */
	   get_ipv6_permitted_hosts -> ipv6s:list<ipv6>;

	  /**
	   * Get list of IPv6 nets that clients should accept IPC requests
	   * from.
	   */
	   get_ipv6_permitted_nets -> ipv6nets:list<ipv6net>;
}
