GNUnet 0.22.2
gnunet_os_lib.h
Go to the documentation of this file.
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2011, 2020 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21#if ! defined (__GNUNET_UTIL_LIB_H_INSIDE__)
22#error "Only <gnunet_util_lib.h> can be included directly."
23#endif
24
56#ifndef GNUNET_OS_LIB_H
57#define GNUNET_OS_LIB_H
58
59#ifdef __cplusplus
60extern "C"
61{
62#if 0 /* keep Emacsens' auto-indent happy */
63}
64#endif
65#endif
66
67
73{
78
84
90
96
102
108
114
115
119struct GNUNET_OS_Process;
120
121
126{
131
136
141
146
151
158
163
169
175
176
181{
187
192
197
202
208
209
215{
221 const char *libname;
222
229 const char *project_dirname;
230
236 const char *binary_name;
237
242 const char *env_varname;
243
249 const char *env_varname_alt;
250
257
261 const char *bug_email;
262
266 const char *homepage;
267
271 const char *config_file;
272
276 const char *user_config_file;
277
281 const char *version;
282
287
292 const char *gettext_domain;
293
298 const char *gettext_path;
299
306 const char *agpl_url;
307};
308
309
313const struct GNUNET_OS_ProjectData *
315
316
324void
325GNUNET_OS_init (const char *package_name,
326 const struct GNUNET_OS_ProjectData *pd);
327
328
338char *
340 enum GNUNET_OS_InstallationPathKind dirkind);
341
342
352char *
354 const char *progname);
355
356
370char *
372 const struct GNUNET_CONFIGURATION_Handle *cfg,
373 const char *progname);
374
375
388typedef enum GNUNET_GenericReturnValue
390 const char *name,
391 int isDefault,
392 const struct sockaddr *addr,
393 const struct sockaddr *broadcast_addr,
394 const struct sockaddr *netmask,
395 socklen_t addrlen);
396
397
404void
406 void *proc_cls);
407
408#ifndef HAVE_SYSCONF
409#define HAVE_SYSCONF 0
410#endif
411
415#if HAVE_SYSCONF && defined(_SC_HOST_NAME_MAX)
416#define GNUNET_OS_get_hostname_max_length() ({ int __sc_tmp = sysconf ( \
417 _SC_HOST_NAME_MAX); __sc_tmp <= \
418 0 ? 255 : __sc_tmp; })
419#elif defined(HOST_NAME_MAX)
420#define GNUNET_OS_get_hostname_max_length() HOST_NAME_MAX
421#else
422#define GNUNET_OS_get_hostname_max_length() 255
423#endif
424
425
434struct GNUNET_OS_Process *
436
437
445int
447 int sig);
448
449
455void
457
458
466pid_t
468
469
481struct GNUNET_OS_Process *
483 enum GNUNET_OS_InheritStdioFlags std_inheritance,
484 struct GNUNET_DISK_PipeHandle *pipe_stdin,
485 struct GNUNET_DISK_PipeHandle *pipe_stdout,
486 struct GNUNET_DISK_PipeHandle *pipe_stderr,
487 const char *filename,
488 char *const argv[]);
489
490
502struct GNUNET_OS_Process *
504 enum GNUNET_OS_InheritStdioFlags std_inheritance,
505 struct GNUNET_DISK_PipeHandle *pipe_stdin,
506 struct GNUNET_DISK_PipeHandle *pipe_stdout,
507 struct GNUNET_DISK_PipeHandle *pipe_stderr,
508 const char *filename,
509 ...);
510
511
523struct GNUNET_OS_Process *
525 enum GNUNET_OS_InheritStdioFlags std_inheritance,
526 struct GNUNET_DISK_PipeHandle *pipe_stdin,
527 struct GNUNET_DISK_PipeHandle *pipe_stdout,
528 struct GNUNET_DISK_PipeHandle *pipe_stderr,
529 const char *filename,
530 va_list va);
531
532
544struct GNUNET_OS_Process *
546 enum GNUNET_OS_InheritStdioFlags std_inheritance,
547 const int *lsocks,
548 const char *filename,
549 char *const argv[]);
550
551
569struct GNUNET_OS_Process *
571 enum GNUNET_OS_InheritStdioFlags std_inheritance,
572 const int *lsocks,
573 const char *filename,
574 ...);
575
576
581
582
589typedef void
590(*GNUNET_OS_LineProcessor) (void *cls, const char *line);
591
592
598void
600
601
616 void *proc_cls,
618 const char *binary,
619 ...);
620
621
634 unsigned long *code);
635
636
649
650
663 unsigned long *code);
664
665
674void
676
677
696GNUNET_OS_check_helper_binary (const char *binary,
697 bool check_suid,
698 const char *params);
699
700
701#if 0 /* keep Emacsens' auto-indent happy */
702{
703#endif
704#ifdef __cplusplus
705}
706#endif
707
708/* ifndef GNUNET_OS_LIB_H */
709#endif
710 /* end of group */
712 /* end of group addition */
714
715/* end of gnunet_os_lib.h */
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:108
static struct GNUNET_TIME_Relative timeout
User defined timestamp for completing operations.
Definition: gnunet-arm.c:118
static char * line
Desired phone line (string to be converted to a hash).
static char * filename
static char * name
Name (label) of the records to list.
static uint32_t type
Type string converted to DNS type value.
GNUNET_GenericReturnValue
Named constants for return values.
void(* GNUNET_OS_LineProcessor)(void *cls, const char *line)
Type of a function to process a line of output.
struct GNUNET_OS_Process * GNUNET_OS_start_process(enum GNUNET_OS_InheritStdioFlags std_inheritance, struct GNUNET_DISK_PipeHandle *pipe_stdin, struct GNUNET_DISK_PipeHandle *pipe_stdout, struct GNUNET_DISK_PipeHandle *pipe_stderr, const char *filename,...)
Start a process.
Definition: os_priority.c:620
GNUNET_OS_InheritStdioFlags
Flags that determine which of the standard streams should be inherited by the child process.
Definition: gnunet_os_lib.h:73
const struct GNUNET_OS_ProjectData * GNUNET_OS_project_data_gnunet(void)
Return default project data used by 'libgnunetutil' for GNUnet.
char * GNUNET_OS_installation_get_path(const struct GNUNET_OS_ProjectData *pd, enum GNUNET_OS_InstallationPathKind dirkind)
Get the path to a specific GNUnet installation directory or, with GNUNET_OS_IPK_SELF_PREFIX,...
struct GNUNET_OS_Process * GNUNET_OS_start_process_v(enum GNUNET_OS_InheritStdioFlags std_inheritance, const int *lsocks, const char *filename, char *const argv[])
Start a process.
Definition: os_priority.c:643
struct GNUNET_OS_Process * GNUNET_OS_process_current(void)
Get process structure for current process.
Definition: os_priority.c:202
enum GNUNET_GenericReturnValue GNUNET_OS_process_wait_status(struct GNUNET_OS_Process *proc, enum GNUNET_OS_ProcessStatusType *type, unsigned long *code)
Retrieve the status of a process, waiting on it if dead.
Definition: os_priority.c:862
void GNUNET_OS_install_parent_control_handler(void *cls)
Connects this process to its parent via pipe; essentially, the parent control handler will read signa...
Definition: os_priority.c:133
void GNUNET_OS_command_stop(struct GNUNET_OS_CommandHandle *cmd)
Stop/kill a command.
Definition: os_priority.c:941
struct GNUNET_OS_CommandHandle * GNUNET_OS_command_run(GNUNET_OS_LineProcessor proc, void *proc_cls, struct GNUNET_TIME_Relative timeout, const char *binary,...)
Run the given command line and call the given function for each line of the output.
Definition: os_priority.c:1015
void GNUNET_OS_network_interfaces_list(GNUNET_OS_NetworkInterfaceProcessor proc, void *proc_cls)
Enumerate all network interfaces.
Definition: os_network.c:397
struct GNUNET_OS_Process * GNUNET_OS_start_process_s(enum GNUNET_OS_InheritStdioFlags std_inheritance, const int *lsocks, const char *filename,...)
Start a process.
Definition: os_priority.c:659
pid_t GNUNET_OS_process_get_pid(struct GNUNET_OS_Process *proc)
Get the pid of the process in question.
Definition: os_priority.c:253
void GNUNET_OS_init(const char *package_name, const struct GNUNET_OS_ProjectData *pd)
Setup OS subsystem for the given project data and package.
GNUNET_OS_ProcessStatusType
Process status types.
void GNUNET_OS_process_destroy(struct GNUNET_OS_Process *proc)
Cleans up process structure contents (OS-dependent) and deallocates it.
Definition: os_priority.c:260
enum GNUNET_GenericReturnValue GNUNET_OS_check_helper_binary(const char *binary, bool check_suid, const char *params)
Check whether an executable exists and possibly if the suid bit is set on the file.
int GNUNET_OS_process_kill(struct GNUNET_OS_Process *proc, int sig)
Sends a signal to the process.
Definition: os_priority.c:210
char * GNUNET_OS_get_suid_binary_path(const struct GNUNET_OS_ProjectData *pd, const struct GNUNET_CONFIGURATION_Handle *cfg, const char *progname)
Given the name of a helper, service or daemon binary construct the full path to the binary using the ...
GNUNET_OS_InstallationPathKind
Possible installation paths to request.
enum GNUNET_GenericReturnValue(* GNUNET_OS_NetworkInterfaceProcessor)(void *cls, const char *name, int isDefault, const struct sockaddr *addr, const struct sockaddr *broadcast_addr, const struct sockaddr *netmask, socklen_t addrlen)
Callback function invoked for each interface found.
enum GNUNET_GenericReturnValue GNUNET_OS_process_status(struct GNUNET_OS_Process *proc, enum GNUNET_OS_ProcessStatusType *type, unsigned long *code)
Retrieve the status of a process.
Definition: os_priority.c:853
enum GNUNET_GenericReturnValue GNUNET_OS_process_wait(struct GNUNET_OS_Process *proc)
Wait for a process to terminate.
Definition: os_priority.c:871
struct GNUNET_OS_Process * GNUNET_OS_start_process_va(enum GNUNET_OS_InheritStdioFlags std_inheritance, struct GNUNET_DISK_PipeHandle *pipe_stdin, struct GNUNET_DISK_PipeHandle *pipe_stdout, struct GNUNET_DISK_PipeHandle *pipe_stderr, const char *filename, va_list va)
Start a process.
Definition: os_priority.c:585
char * GNUNET_OS_get_libexec_binary_path(const struct GNUNET_OS_ProjectData *pd, const char *progname)
Given the name of a gnunet-helper, gnunet-service or gnunet-daemon binary, try to prefix it with the ...
struct GNUNET_OS_Process * GNUNET_OS_start_process_vap(enum GNUNET_OS_InheritStdioFlags std_inheritance, struct GNUNET_DISK_PipeHandle *pipe_stdin, struct GNUNET_DISK_PipeHandle *pipe_stdout, struct GNUNET_DISK_PipeHandle *pipe_stderr, const char *filename, char *const argv[])
Start a process.
Definition: os_priority.c:567
@ GNUNET_OS_INHERIT_STD_IN
When this flag is set, the child process will inherit stdin of the parent.
Definition: gnunet_os_lib.h:83
@ GNUNET_OS_INHERIT_STD_ALL
Use this option to have all of the standard streams (stdin, stdout and stderror) be inherited.
@ GNUNET_OS_INHERIT_STD_OUT
When this flag is set, the child process will inherit stdout of the parent.
Definition: gnunet_os_lib.h:89
@ GNUNET_OS_INHERIT_STD_ERR
When this flag is set, the child process will inherit stderr of the parent.
Definition: gnunet_os_lib.h:95
@ GNUNET_OS_INHERIT_STD_NONE
No standard streams should be inherited.
Definition: gnunet_os_lib.h:77
@ GNUNET_OS_INHERIT_STD_OUT_AND_ERR
When these flags are set, the child process will inherit stdout and stderr of the parent.
@ GNUNET_OS_USE_PIPE_CONTROL
Should a pipe be used to send signals to the child?
@ GNUNET_OS_PROCESS_SIGNALED
The process was killed by a signal.
@ GNUNET_OS_PROCESS_EXITED
The process exited with a return code.
@ GNUNET_OS_PROCESS_UNKNOWN
The process is not known to the OS (or at least not one of our children).
@ GNUNET_OS_PROCESS_STOPPED
The process is paused (but could be resumed).
@ GNUNET_OS_PROCESS_RUNNING
The process is still running.
@ GNUNET_OS_IPK_SELF_PREFIX
Return the installation directory of this application, not the one of the overall GNUnet installation...
@ GNUNET_OS_IPK_ICONDIR
Return the prefix of the path with application icons (share/icons/).
@ GNUNET_OS_IPK_DATADIR
Return the directory where data is installed (share/gnunet/)
@ GNUNET_OS_IPK_DOCDIR
Return the prefix of the path with documentation files, including the license (share/doc/gnunet/).
@ GNUNET_OS_IPK_LOCALEDIR
Return the directory where translations are installed (share/locale/)
@ GNUNET_OS_IPK_LIBDIR
Return the directory where libraries are installed.
@ GNUNET_OS_IPK_PREFIX
Return the "PREFIX" directory given to configure.
@ GNUNET_OS_IPK_BINDIR
Return the directory where the program binaries are installed.
@ GNUNET_OS_IPK_LIBEXECDIR
Return the directory where helper binaries are installed (lib/gnunet/libexec/)
Handle used to manage a pipe.
Definition: disk.c:69
Handle to a command.
Definition: os_priority.c:892
void * proc_cls
Closure for proc.
Definition: os_priority.c:916
GNUNET_OS_LineProcessor proc
Function to call on each line of output.
Definition: os_priority.c:911
Project-specific data used to help the OS subsystem find installation paths.
const char * binary_name
Name of a project-specific binary that should be in "$PREFIX/bin/".
const char * env_varname
Name of an environment variable that can be used to override installation path detection,...
const char * env_varname_alt
Alternative name of an environment variable that can be used to override installation path detection,...
const char * libname
Name of a library that is installed in the "lib/" directory of the project, such as "libgnunetutil".
const char * base_config_varname
Name of an environment variable that can be used to override the location from which default configur...
const char * project_dirname
Name of the project that is used in the "libexec" prefix, For example, "gnunet".
const char * gettext_path
Gettext directory, e.g.
const char * gettext_domain
Gettext domain for localisation, e.g.
const char * bug_email
E-mail address for reporting bugs.
const char * agpl_url
URL pointing to the source code of the application.
int is_gnu
Non-zero means this project is part of GNU.
const char * user_config_file
Configuration file name to use (if $XDG_CONFIG_HOME is not set).
const char * config_file
Configuration file name (in $XDG_CONFIG_HOME) to use.
const char * version
String identifying the current project version.
const char * homepage
Project homepage.
Time for relative time used by GNUnet, in microseconds.