virtual bool shouldAdd(const dtn::data::MetaBundle &meta) const throw (dtn::storage::BundleSelectorException) { // filter fragments if requested if (meta.isFragment() && _fragment_filter) { return false; } if (_endpoints.find(meta.destination) == _endpoints.end()) { return false; } // filter own bundles if (!_loopback) { if (_endpoints.find(meta.source) != _endpoints.end()) { return false; } } IBRCOMMON_LOGGER_DEBUG_TAG(Registration::TAG, 30) << "search bundle in the list of delivered bundles: " << meta.toString() << IBRCOMMON_LOGGER_ENDL; if (_queue.has(meta)) { return false; } return true; };
void SQLiteBundleSet::add(const dtn::data::MetaBundle &bundle) throw () { try { // insert bundle id into database SQLiteDatabase::Statement st(_sqldb._database, SQLiteDatabase::_sql_queries[SQLiteDatabase::BUNDLE_SET_ADD]); sqlite3_bind_int64(*st, 1, _set_id); sqlite3_bind_text(*st, 2, bundle.source.getString().c_str(), static_cast<int>(bundle.source.getString().length()), SQLITE_TRANSIENT); sqlite3_bind_int64(*st, 3, bundle.timestamp.get<uint64_t>()); sqlite3_bind_int64(*st, 4, bundle.sequencenumber.get<uint64_t>()); if (bundle.isFragment()) { sqlite3_bind_int64(*st, 5, bundle.fragmentoffset.get<uint64_t>()); sqlite3_bind_int64(*st, 6, bundle.getPayloadLength()); } else { sqlite3_bind_int64(*st, 5, -1); sqlite3_bind_int64(*st, 6, -1); } sqlite3_bind_int64(*st, 7, bundle.expiretime.get<uint64_t>()); st.step(); // update expiretime, if necessary new_expire_time(bundle.expiretime); // add bundle to the bloomfilter bundle.addTo(_bf); } catch (const SQLiteDatabase::SQLiteQueryException&) { // error } }