40 #define LOG(type, ...) \ 41 GNUNET_log (type, __VA_ARGS__) 47 LOG (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__) 54 #define LOG_SQLITE(db, msg, level, cmd) \ 56 GNUNET_log_from (level, "sqlite", _ ( \ 57 "`%s' failed at %s:%d with error: %s\n"), \ 58 cmd, __FILE__, __LINE__, sqlite3_errmsg (db)); \ 60 GNUNET_asprintf (msg, _ ("`%s' failed at %s:%u with error: %s"), cmd, \ 61 __FILE__, __LINE__, sqlite3_errmsg (db)); \ 73 static struct sqlite3 *
db;
179 GNUNET_TESTING_HOSTKEYFILESIZE);
234 _ (
"Incorrect hostkey file format: %s\n"), idfile);
240 if (NULL == hostkeys_fd)
268 if (NULL != hostkeys_map)
275 if (NULL != hostkeys_fd)
291 if (NULL != transport)
314 static const char *query_wl =
315 "SELECT oid, latency FROM whitelist WHERE (id == ?);";
316 struct sqlite3_stmt *stmt_wl;
321 if (SQLITE_OK != (ret = sqlite3_prepare_v2 (db, query_wl, -1, &stmt_wl,
327 if (SQLITE_OK != (ret = sqlite3_bind_int (stmt_wl, 1, pid)))
330 sqlite3_finalize (stmt_wl);
336 ret = sqlite3_step (stmt_wl);
337 if (SQLITE_ROW != ret)
341 lr->
id = sqlite3_column_int (stmt_wl, 0);
342 lr->
latency = sqlite3_column_int (stmt_wl, 1);
347 sqlite3_finalize (stmt_wl);
361 run (
void *cls,
char *
const *
args,
const char *cfgfile,
370 unsigned long long pid;
389 if (SQLITE_OK != (ret = sqlite3_open_v2 (dbfile, &
db, SQLITE_OPEN_READONLY,
402 DEBUG (
"Opened database %s\n", dbfile);
410 if (NULL == transport)
425 while (NULL != (wl_entry = wl_head))
427 wl_head = wl_entry->
next;
429 memset (&prop, 0,
sizeof(prop));
434 DEBUG (
"Setting %u ms latency to peer `%s'\n",
460 main (
int argc,
char *
const *argv)
469 #ifdef SQLITE_CONFIG_MMAP_SIZE 470 (void) sqlite3_config (SQLITE_CONFIG_MMAP_SIZE, 512000, 256000000);
477 "Daemon to restrict underlay network in testbed deployments"),
478 options, &
run, NULL)) ? 0 : 1;
static int iterator(void *cls, const struct GNUNET_PeerIdentity *key, void *value)
Iterator over hash map entries.
Open the file for reading.
#define DEBUG(...)
Debug logging shorthand.
enum GNUNET_GenericReturnValue GNUNET_PROGRAM_run(int argc, char *const *argv, const char *binaryName, const char *binaryHelp, const struct GNUNET_GETOPT_CommandLineOption *options, GNUNET_PROGRAM_Main task, void *task_cls)
Run a standard GNUnet command startup sequence (initialize loggers and configuration, parse options).
uint64_t rel_value_us
The actual value.
static struct GNUNET_GNS_LookupWithTldRequest * lr
Handle to lookup request.
enum GNUNET_GenericReturnValue GNUNET_DISK_file_unmap(struct GNUNET_DISK_MapHandle *h)
Unmap a file.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_shutdown(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run on shutdown, that is when a CTRL-C signal is received, or when GNUNET_SCHEDULER_shutdown() is being invoked.
int GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
enum GNUNET_GenericReturnValue GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
void * GNUNET_DISK_file_map(const struct GNUNET_DISK_FileHandle *h, struct GNUNET_DISK_MapHandle **m, enum GNUNET_DISK_MapType access, size_t len)
Map a file into memory.
Nobody is allowed to do anything to the file.
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
static struct GNUNET_CONTAINER_MultiPeerMap * map
The map to store the peer identities to allow/deny.
static int ret
Return value of the commandline.
enum GNUNET_GenericReturnValue GNUNET_CONFIGURATION_get_value_number(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, unsigned long long *number)
Get a configuration value that should be a number.
int GNUNET_CONTAINER_multipeermap_remove(struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key, const void *value)
Remove the given key-value pair from the map.
#define LOG(type,...)
Logging shorthand.
static struct GNUNET_DISK_MapHandle * hostkeys_map
The hostkeys map.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
Definition of a command line option.
enum GNUNET_GenericReturnValue GNUNET_CONFIGURATION_get_value_filename(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be the name of a file or directory.
void GNUNET_TRANSPORT_blacklist_cancel(struct GNUNET_TRANSPORT_Blacklist *br)
Abort the blacklist.
struct GNUNET_CONTAINER_MultiPeerMap * GNUNET_CONTAINER_multipeermap_create(unsigned int len, int do_not_copy_keys)
Create a multi peer map (hash map for public keys of peers).
Handle for the transport service (includes all of the state for the transport service).
#define GNUNET_TESTING_HOSTKEYFILESIZE
Size of each hostkey in the hostkey file (in BYTES).
ATS performance characteristics for an address.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
void GNUNET_CONTAINER_multipeermap_destroy(struct GNUNET_CONTAINER_MultiPeerMap *map)
Destroy a hash map.
static void * hostkeys_data
The hostkeys data.
#define GNUNET_log_strerror(level, cmd)
Log an error message at log-level 'level' that indicates a failure of the command 'cmd' with the mess...
static int check_access(void *cls, const struct GNUNET_PeerIdentity *pid)
Function that decides if a connection is acceptable or not.
, ' bother checking if a value already exists (faster than GNUNET_CONTAINER_MULTIHASHMAPOPTION_...
static char * value
Value of the record to add/remove.
#define GNUNET_log_strerror_file(level, cmd, filename)
Log an error message at log-level 'level' that indicates a failure of the command 'cmd' with the mess...
static struct GNUNET_TRANSPORT_Blacklist * bh
The blacklist handle we obtain from transport when we register ourselves for access control...
char * GNUNET_OS_installation_get_path(enum GNUNET_OS_InstallationPathKind dirkind)
Get the path to a specific GNUnet installation directory or, with GNUNET_OS_IPK_SELF_PREFIX, the current running apps installation directory.
struct GNUNET_TRANSPORT_Blacklist * GNUNET_TRANSPORT_blacklist(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_TRANSPORT_BlacklistCallback cb, void *cb_cls)
Install a blacklist callback.
static unsigned int num_hostkeys
The number of hostkeys in the hostkeys array.
Internal representation of the hash map.
static int get_identity(unsigned int offset, struct GNUNET_PeerIdentity *id)
static struct sqlite3 * db
The database connection.
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
Handle for blacklisting requests.
#define GNUNET_free_nz(ptr)
Wrapper around free.
struct GNUNET_HashCode key
The key used in the DHT.
struct WhiteListRow * next
Next ptr.
#define LOG_SQLITE(db, msg, level, cmd)
Log an error message at log-level 'level' that indicates a failure of the command 'cmd' on file 'file...
void GNUNET_CRYPTO_eddsa_key_get_public(const struct GNUNET_CRYPTO_EddsaPrivateKey *priv, struct GNUNET_CRYPTO_EddsaPublicKey *pub)
Extract the public key for the given private key.
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c)
Main function that will be run.
enum GNUNET_GenericReturnValue GNUNET_DISK_file_size(const char *filename, uint64_t *size, int include_symbolic_links, int single_file_mode)
Get the size of the file (or directory) of the given file (in bytes).
int GNUNET_CONTAINER_multipeermap_put(struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key, void *value, enum GNUNET_CONTAINER_MultiHashMapOption opt)
Store a key-value pair in the map.
Private ECC key encoded for transmission.
int GNUNET_CONTAINER_multipeermap_iterate(struct GNUNET_CONTAINER_MultiPeerMap *map, GNUNET_CONTAINER_PeerMapIterator it, void *it_cls)
Iterate over all entries in the map.
The identity of the host (wraps the signing key of the peer).
struct GNUNET_TRANSPORT_ManipulationHandle * GNUNET_TRANSPORT_manipulation_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Connect to the transport service.
Automatic transport selection and outbound bandwidth determination.
int latency
Latency to be assigned to the link.
void GNUNET_TRANSPORT_manipulation_disconnect(struct GNUNET_TRANSPORT_ManipulationHandle *handle)
Disconnect from the transport service.
static void do_shutdown(void *cls)
Shutdown task to cleanup our resources and exit.
static void cleanup_map()
Cleaup and destroy the map.
unsigned int id
The offset where to find the hostkey for the peer.
static void unload_keys()
Function to unload keys.
static struct GNUNET_PeerIdentity pid
Identity of the peer we transmit to / connect to.
void GNUNET_TRANSPORT_manipulation_set(struct GNUNET_TRANSPORT_ManipulationHandle *handle, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_ATS_Properties *prop, struct GNUNET_TIME_Relative delay_in, struct GNUNET_TIME_Relative delay_out)
Set transport metrics for a peer and a direction.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
int GNUNET_CONTAINER_multipeermap_contains(const struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key)
Check if the map contains any value under the given key (including values that are NULL)...
Handle used to access files (and pipes).
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
Handle for a memory-mapping operation.
Return the directory where data is installed (share/gnunet/)
#define GNUNET_free(ptr)
Wrapper around free.
Time for relative time used by GNUnet, in microseconds.
struct GNUNET_CRYPTO_EddsaPublicKey public_key
int main(int argc, char *const *argv)
The main function.
static struct GNUNET_TRANSPORT_ManipulationHandle * transport
Handle to the transport service.
static int load_keys(const struct GNUNET_CONFIGURATION_Handle *c)
Function to load keys.
struct GNUNET_DISK_FileHandle * hostkeys_fd
The hostkeys file.
static int db_read_whitelist(struct sqlite3 *db, int pid, struct WhiteListRow **wl_rows)
Function to read whitelist rows from the database.