/
program-client-private.h
86 lines (64 loc) · 2.08 KB
/
program-client-private.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#ifndef PROGRAM_CLIENT_PRIVATE_H
#define PROGRAM_CLIENT_PRIVATE_H
#include "program-client.h"
enum program_client_error {
PROGRAM_CLIENT_ERROR_NONE,
PROGRAM_CLIENT_ERROR_CONNECT_TIMEOUT,
PROGRAM_CLIENT_ERROR_RUN_TIMEOUT,
PROGRAM_CLIENT_ERROR_IO,
PROGRAM_CLIENT_ERROR_OTHER
};
enum program_client_exit_code {
PROGRAM_CLIENT_EXIT_INTERNAL_FAILURE = -1,
PROGRAM_CLIENT_EXIT_FAILURE = 0,
PROGRAM_CLIENT_EXIT_SUCCESS = 1,
};
struct program_client_extra_fd {
struct program_client *pclient;
int child_fd, parent_fd;
struct istream *input;
struct io *io;
program_client_fd_callback_t *callback;
void *context;
};
struct program_client {
pool_t pool;
struct program_client_settings set;
char *path;
const char **args;
ARRAY_TYPE(const_string) envs;
int fd_in, fd_out;
struct io *io;
struct timeout *to;
struct timeval start_time;
struct istream *input, *program_input, *dot_input;
struct ostream *output, *program_output, *dot_output;
ARRAY(struct program_client_extra_fd) extra_fds;
program_client_callback_t *callback;
void *context;
bool other_error;
enum program_client_error error;
enum program_client_exit_code exit_code;
int (*connect) (struct program_client * pclient);
int (*close_output) (struct program_client * pclient);
void (*switch_ioloop) (struct program_client * pclient);
void (*disconnect) (struct program_client * pclient, bool force);
void (*destroy) (struct program_client * pclient);
bool debug:1;
bool disconnected:1;
bool output_seekable:1;
bool input_dot_created:1;
bool output_dot_created:1;
bool destroying:1;
};
void program_client_init(struct program_client *pclient, pool_t pool,
const char *path,
const char *const *args,
const struct program_client_settings *set);
void program_client_init_streams(struct program_client *pclient);
int program_client_connected(struct program_client *pclient);
void program_client_fail(struct program_client *pclient,
enum program_client_error error);
void program_client_program_input(struct program_client *pclient);
void program_client_disconnected(struct program_client *pclient);
#endif