GNUnet  0.10.x
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 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 
48 #ifndef GNUNET_OS_LIB_H
49 #define GNUNET_OS_LIB_H
50 
51 #ifdef __cplusplus
52 extern "C"
53 {
54 #if 0 /* keep Emacsens' auto-indent happy */
55 }
56 #endif
57 #endif
58 
59 #include "gnunet_common.h"
61 #include "gnunet_scheduler_lib.h"
62 
63 
73 
79 
85 
91 
97 
103 };
104 
105 
109 struct GNUNET_OS_Process;
110 
111 
120 
125 
130 
135 
140 
147 
152 
158 
163 };
164 
165 
175 
180 
185 
190 
195 };
196 
197 
208  const char *libname;
209 
216  const char *project_dirname;
217 
223  const char *binary_name;
224 
229  const char *env_varname;
230 
236  const char *env_varname_alt;
237 
243  const char *base_config_varname;
244 
248  const char *bug_email;
249 
253  const char *homepage;
254 
258  const char *config_file;
259 
263  const char *user_config_file;
264 
268  const char *version;
269 
273  int is_gnu;
274 
280 
286 };
287 
288 
292 const struct GNUNET_OS_ProjectData *
294 
295 
299 const struct GNUNET_OS_ProjectData *
301 
302 
308 void
309 GNUNET_OS_init(const struct GNUNET_OS_ProjectData *pd);
310 
311 
320 char *
322 
323 
332 char *
333 GNUNET_OS_get_libexec_binary_path(const char *progname);
334 
335 
348 char *
350  const char *progname);
351 
352 
365 typedef int
367  const char *name,
368  int isDefault,
369  const struct sockaddr *addr,
370  const struct sockaddr *broadcast_addr,
371  const struct sockaddr *netmask,
372  socklen_t addrlen);
373 
374 
381 void
383  void *proc_cls);
384 
388 #if HAVE_SYSCONF && defined(_SC_HOST_NAME_MAX)
389 #define GNUNET_OS_get_hostname_max_length() ({ int __sc_tmp = sysconf(_SC_HOST_NAME_MAX); __sc_tmp <= 0 ? 255 : __sc_tmp; })
390 #elif defined(HOST_NAME_MAX)
391 #define GNUNET_OS_get_hostname_max_length() HOST_NAME_MAX
392 #else
393 #define GNUNET_OS_get_hostname_max_length() 255
394 #endif
395 
396 
405 struct GNUNET_OS_Process *
407 
408 
416 int
418  int sig);
419 
420 
426 void
428 
429 
437 pid_t
439 
440 
453 struct GNUNET_OS_Process *
454 GNUNET_OS_start_process_vap(int pipe_control,
455  enum GNUNET_OS_InheritStdioFlags std_inheritance,
456  struct GNUNET_DISK_PipeHandle *pipe_stdin,
457  struct GNUNET_DISK_PipeHandle *pipe_stdout,
458  struct GNUNET_DISK_PipeHandle *pipe_stderr,
459  const char *filename,
460  char *const argv[]);
461 
462 
475 struct GNUNET_OS_Process *
476 GNUNET_OS_start_process(int pipe_control,
477  enum GNUNET_OS_InheritStdioFlags std_inheritance,
478  struct GNUNET_DISK_PipeHandle *pipe_stdin,
479  struct GNUNET_DISK_PipeHandle *pipe_stdout,
480  struct GNUNET_DISK_PipeHandle *pipe_stderr,
481  const char *filename, ...);
482 
483 
496 struct GNUNET_OS_Process *
497 GNUNET_OS_start_process_va(int pipe_control,
498  enum GNUNET_OS_InheritStdioFlags std_inheritance,
499  struct GNUNET_DISK_PipeHandle *pipe_stdin,
500  struct GNUNET_DISK_PipeHandle *pipe_stdout,
501  struct GNUNET_DISK_PipeHandle *pipe_stderr,
502  const char *filename, va_list va);
503 
516 struct GNUNET_OS_Process *
517 GNUNET_OS_start_process_v(int pipe_control,
518  enum GNUNET_OS_InheritStdioFlags std_inheritance,
519  const SOCKTYPE *lsocks,
520  const char *filename,
521  char *const argv[]);
522 
523 
542 struct GNUNET_OS_Process *
543 GNUNET_OS_start_process_s(int pipe_control,
544  unsigned int std_inheritance,
545  const SOCKTYPE * lsocks,
546  const char *filename, ...);
547 
548 
553 
554 
561 typedef void
562 (*GNUNET_OS_LineProcessor) (void *cls, const char *line);
563 
564 
570 void
572 
573 
587  void *proc_cls,
589  const char *binary,
590  ...);
591 
592 
602 int
605  unsigned long *code);
606 
607 
618 int
620 
621 
622 
632 int
635  unsigned long *code);
636 
637 
646 void
648 
649 
667 int
668 GNUNET_OS_check_helper_binary(const char *binary,
669  int check_suid,
670  const char *params);
671 
672 
673 #if 0 /* keep Emacsens' auto-indent happy */
674 {
675 #endif
676 #ifdef __cplusplus
677 }
678 #endif
679 
680 /* ifndef GNUNET_OS_LIB_H */
681 #endif
682  /* end of group */
684 
685 /* end of gnunet_os_lib.h */
Return the directory where translations are installed (share/locale/)
GNUNET_OS_InheritStdioFlags
Flags that determine which of the standard streams should be inherited by the child process...
Definition: gnunet_os_lib.h:68
const char * config_file
Configuration file name (in $XDG_CONFIG_HOME) to use.
When this flag is set, the child process will inherit stderr of the parent.
Definition: gnunet_os_lib.h:90
pid_t GNUNET_OS_process_get_pid(struct GNUNET_OS_Process *proc)
Get the pid of the process in question.
Definition: os_priority.c:273
char * gettext_domain
Gettext domain for localisation, e.g.
Project-specific data used to help the OS subsystem find installation paths.
char * gettext_path
Gettext directory, e.g.
#define SOCKTYPE
Definition: platform.h:237
void GNUNET_OS_process_destroy(struct GNUNET_OS_Process *proc)
Cleans up process structure contents (OS-dependent) and deallocates it.
Definition: os_priority.c:286
int GNUNET_OS_process_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:963
Return the directory where libraries are installed.
const char * project_dirname
Name of the project that is used in the "libexec" prefix, For example, "gnunet".
struct GNUNET_OS_Process * GNUNET_OS_start_process(int pipe_control, 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:687
When this flag is set, the child process will inherit stdin of the parent.
Definition: gnunet_os_lib.h:78
struct GNUNET_OS_Process * GNUNET_OS_start_process_s(int pipe_control, unsigned int std_inheritance, const SOCKTYPE *lsocks, const char *filename,...)
Start a process.
Definition: os_priority.c:762
const char * env_varname_alt
Alternative name of an environment variable that can be used to override installation path detection...
const char * user_config_file
Configuration file name to use (if $XDG_CONFIG_HOME is not set).
const struct GNUNET_OS_ProjectData * GNUNET_OS_project_data_default(void)
Return default project data used by &#39;libgnunetutil&#39; for GNUnet.
int GNUNET_OS_check_helper_binary(const char *binary, int check_suid, const char *params)
Check whether an executable exists and possibly if the suid bit is set on the file.
void GNUNET_OS_network_interfaces_list(GNUNET_OS_NetworkInterfaceProcessor proc, void *proc_cls)
Enumerate all network interfaces.
Definition: os_network.c:388
struct GNUNET_OS_Process * GNUNET_OS_start_process_va(int pipe_control, 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:639
void * proc_cls
Closure for proc.
Definition: os_priority.c:1043
int is_gnu
Non-zero means this project is part of GNU.
const char * version
String identifying the current project version.
const char * bug_email
E-mail address for reporting bugs.
Return the "PREFIX" directory given to configure.
Use this option to have all of the standard streams (stdin, stdout and stderror) be inherited...
const char * env_varname
Name of an environment variable that can be used to override installation path detection, for example "GNUNET_PREFIX".
static struct GNUNET_TIME_Relative timeout
User defined timestamp for completing operations.
Definition: gnunet-arm.c:114
static char * line
Desired phone line (string to be converted to a hash).
Return the prefix of the path with documentation files, including the license (share/doc/gnunet/).
const char * libname
Name of a library that is installed in the "lib/" directory of the project, such as "libgnunetutil"...
No standard streams should be inherited.
Definition: gnunet_os_lib.h:72
When this flag is set, the child process will inherit stdout of the parent.
Definition: gnunet_os_lib.h:84
GNUNET_OS_ProcessStatusType
Process status types.
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_OS_Process * GNUNET_OS_process_current(void)
Get process structure for current process.
Definition: os_priority.c:209
struct GNUNET_OS_Process * GNUNET_OS_start_process_vap(int pipe_control, 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:607
int 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:981
const char * binary_name
Name of a project-specific binary that should be in "$PREFIX/bin/".
static char * filename
char * GNUNET_OS_get_suid_binary_path(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 ...
The process exited with a return code.
Return the directory where helper binaries are installed (lib/gnunet/libexec/)
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:140
GNUNET_OS_InstallationPathKind
Possible installation paths to request.
When these flags are set, the child process will inherit stdout and stderr of the parent...
Definition: gnunet_os_lib.h:96
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:104
const char * name
int(* 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.
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:1160
The process was killed by a signal.
Return the installation directory of this application, not the one of the overall GNUnet installation...
Return the directory where the program binaries are installed.
const char * homepage
Project homepage.
int GNUNET_OS_process_wait(struct GNUNET_OS_Process *proc)
Wait for a process to terminate.
Definition: os_priority.c:1000
configuration data
Definition: configuration.c:83
Handle to a command.
Definition: os_priority.c:1019
const char * base_config_varname
Name of an environment variable that can be used to override the location from which default configur...
const struct GNUNET_OS_ProjectData * GNUNET_OS_project_data_get(void)
The process is still running.
GNUNET_OS_LineProcessor proc
Function to call on each line of output.
Definition: os_priority.c:1038
char * GNUNET_OS_get_libexec_binary_path(const char *progname)
Given the name of a gnunet-helper, gnunet-service or gnunet-daemon binary, try to prefix it with the ...
void GNUNET_OS_init(const struct GNUNET_OS_ProjectData *pd)
Setup OS subsystem with project data.
The process is not known to the OS (or at least not one of our children).
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model
void GNUNET_OS_command_stop(struct GNUNET_OS_CommandHandle *cmd)
Stop/kill a command.
Definition: os_priority.c:1075
Return the prefix of the path with application icons (share/icons/).
commonly used definitions; globals in this file are exempt from the rule that the module name ("commo...
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_v(int pipe_control, enum GNUNET_OS_InheritStdioFlags std_inheritance, const SOCKTYPE *lsocks, const char *filename, char *const argv[])
Start a process.
Definition: os_priority.c:726
Handle used to manage a pipe.
Definition: disk.c:68
The process is paused (but could be resumed).
Return the directory where data is installed (share/gnunet/)
Time for relative time used by GNUnet, in microseconds.
int GNUNET_OS_process_kill(struct GNUNET_OS_Process *proc, int sig)
Sends a signal to the process.
Definition: os_priority.c:224