net.i2p.addressbook

## Class AddressBook

- java.lang.Object
- - net.i2p.addressbook.AddressBook

- All Implemented Interfaces:
    Iterable<Map.Entry<String,HostTxtEntry>>

      class AddressBook
      extends Object
      implements Iterable<Map.Entry<String,HostTxtEntry>>

  An address book for storing human readable names mapped to base64 i2p destinations. AddressBooks can be created from local and remote files, merged together, and written out to local files. Methods are NOT thread-safe.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `(package private) static long` | `MAX_SUB_SIZE` Maximum permitted size of a hosts subscription file - 5MB or around 8000 hosts

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AddressBook(File file)` Construct an AddressBook from the contents of the file at file.
    `AddressBook(Map<String,HostTxtEntry> addresses)` Construct an AddressBook from the contents of the Map addresses.
    `AddressBook(String testsubfile)` Test only.
    `AddressBook(Subscription subscription, String proxyHost, int proxyPort)` Construct an AddressBook from the Subscription subscription.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `delete()` Delete the temp file or clear the map.
    `String` | `getLocation()` Return the location of the file this AddressBook was constructed from.
    `static boolean` | `isValidKey(String host)` Basic validation of the hostname.
    `Iterator<Map.Entry<String,HostTxtEntry>>` | `iterator()` Return an iterator over the addresses in the AddressBook.
    `void` | `merge(AddressBook other, boolean overwrite, Log log)` Merge this AddressBook with AddressBook other, writing messages about new addresses or conflicts to log.
    `String` | `toString()` Return a string representation of the origin of the AddressBook.
    `void` | `write()` Write this AddressBook out to the file it was read from.
    `void` | `write(File file)` Write the contents of this AddressBook out to the File file.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach, spliterator`

- - ### Field Detail

    - #### MAX_SUB_SIZE

          static final long MAX_SUB_SIZE

      Maximum permitted size of a hosts subscription file - 5MB or around 8000 hosts
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### AddressBook

          public AddressBook(File file)

      Construct an AddressBook from the contents of the file at file. If the file cannot be read, construct an empty AddressBook. This reads the entire file into memory. The resulting map is modifiable and may be a merge target.
      Parameters:
        `file` - A File pointing at a file with lines in the format "key=value", where key is a human readable name, and value is a base64 i2p destination.

    - #### AddressBook

          public AddressBook(Map<String,HostTxtEntry> addresses)

      Construct an AddressBook from the contents of the Map addresses.
      Parameters:
        `addresses` - A Map containing human readable addresses as keys, mapped to base64 i2p destinations.

    - #### AddressBook

          public AddressBook(String testsubfile)

      Test only.
      Parameters:
        `testsubfile` - path to a file containing the simulated fetch of a subscription

    - #### AddressBook

          public AddressBook(Subscription subscription,
                             String proxyHost,
                             int proxyPort)

      Construct an AddressBook from the Subscription subscription. If the address book at subscription has not changed since the last time it was read or cannot be read, return an empty AddressBook. Set a maximum size of the remote book to make it a little harder for a malicious book-sender. Yes, the EepGet fetch() is done in this constructor. This stores the subscription in a temporary file and does not read the whole thing into memory. An AddressBook created with this constructor may not be modified or written using write(). It may be a merge source (an parameter for another AddressBook's merge()) but may not be a merge target (this.merge() will throw an exception).
      Parameters:
        `subscription` - A Subscription instance pointing at a remote address book.
        `proxyHost` - hostname of proxy
        `proxyPort` - port number of proxy

  - ### Method Detail

    - #### delete

          public void delete()

      Delete the temp file or clear the map.

    - #### getLocation

          public String getLocation()

      Return the location of the file this AddressBook was constructed from.
      Returns:
        A String representing either an abstract path, or a url, depending on how the instance was constructed. Will be null if created with the Map constructor.

    - #### isValidKey

          public static boolean isValidKey(String host)

      Basic validation of the hostname. Already converted to lower case by HostTxtParser.parse()
      Parameters:
        `host` - the hostname to validate
      Returns:
        true if the hostname is valid, false otherwise

    - #### iterator

          public Iterator<Map.Entry<String,HostTxtEntry>> iterator()

      Return an iterator over the addresses in the AddressBook.
      Specified by:
        `iterator` in interface `Iterable<Map.Entry<String,HostTxtEntry>>`

    - #### merge

          public void merge(AddressBook other,
                            boolean overwrite,
                            Log log)

      Merge this AddressBook with AddressBook other, writing messages about new addresses or conflicts to log. Addresses in AddressBook other that are not in this AddressBook are added to this AddressBook. In case of a conflict, addresses in this AddressBook take precedence
      Parameters:
        `other` - An AddressBook to merge with.
        `overwrite` - True to overwrite
        `log` - The log to write messages about new addresses or conflicts to. May be null.
      Throws:
        `IllegalStateException` - if this was created with the Subscription constructor.

    - #### toString

          public String toString()

      Return a string representation of the origin of the AddressBook.
      Overrides:
        `toString` in class `Object`
      Returns:
        A String representing the origin of the AddressBook.

    - #### write

          public void write()

      Write this AddressBook out to the file it was read from. Requires that AddressBook was constructed from a file on the local filesystem. If the file cannot be writen to, this method will silently fail.
      Throws:
        `IllegalStateException` - if this was not created with the File constructor.

    - #### write

          public void write(File file)

      Write the contents of this AddressBook out to the File file. If the file cannot be writen to, this method will silently fail.
      Parameters:
        `file` - The file to write the contents of this AddressBook too.
      Throws:
        `IllegalStateException` - if this was created with the Subscription constructor.