/** "Remove matching deferred transmission entries." [DTN2] */
  void remove_from_deferred(final Bundle bundle, int actions) {

    ContactManager cm = BundleDaemon.getInstance().contactmgr();

    cm.get_lock().lock();
    try {
      final LinkSet links = cm.links();
      Iterator<Link> iter = links.iterator();

      while (iter.hasNext()) {
        Link link = iter.next();

        // "a bundle might be deleted immediately after being loaded
        // from storage, meaning that remove_from_deferred is called
        // before the deferred list is created (since the link isn't
        // fully set up yet). so just skip the link if there's no
        // router info, and therefore no deferred list" [DTN2]
        if (link.router_info() == null) {
          continue;
        }

        DeferredList deferred = deferred_list(link);
        ForwardingInfo info = deferred.find(bundle);
        if (info != null) {
          if ((info.action().getCode() & actions) > 0) {
            Log.d(
                TAG, String.format("removing bundle %s from link %s deferred list", bundle, link));
            deferred.del(bundle);
          }
        }
      }
    } finally {
      cm.get_lock().unlock();
    }
  }
  @Override
  public void initialize(DTNConfiguration dtn_config) {
    Iterator<RoutesSetting.RouteEntry> itr = dtn_config.routes_setting().route_entries().iterator();

    while (itr.hasNext()) {
      RoutesSetting.RouteEntry rentry = itr.next();

      EndpointIDPattern pattern = new EndpointIDPattern(rentry.dest());
      Link link = ContactManager.getInstance().find_link(rentry.link_id());
      route_table_.add_entry(new RouteEntry(pattern, link));
    }
  }