blob: 3b53273be25b4dee66491cae90aad4843982e63a (
plain)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#ifndef ENV_UNIVERSAL_COMMON_HH
#define ENV_UNIVERSAL_COMMON_HH
/**
The set command
*/
#define SET_STR L"SET"
/**
The erase command
*/
#define ERASE_STR L"ERASE"
#define BARRIER_STR L"BARRIER"
#define BARRIER_REPLY_STR L"BARRIER_REPLY"
/**
The filename to use for univeral variables. The username is appended
*/
#define SOCK_FILENAME "fishd.socket."
/**
The different types of commands that can be sent between client/server
*/
enum
{
SET,
ERASE,
BARRIER,
BARRIER_REPLY,
}
;
/**
The table of universal variables
*/
extern hash_table_t env_universal_var;
/**
This struct represents a connection between a universal variable server/client
*/
typedef struct connection
{
/**
The file descriptor this socket lives on
*/
int fd;
/**
Queue of onsent messages
*/
queue_t unsent;
/**
Set to one when this connection should be killed
*/
int killme;
/**
The state used for character conversions
*/
mbstate_t wstate;
/**
The input string. Input from the socket goes here. When a
newline is encountered, the buffer is parsed and cleared.
*/
string_buffer_t input;
/**
Link to the next connection
*/
struct connection *next;
}
connection_t;
/**
A struct representing a message to be sent between client and server
*/
typedef struct
{
int count;
char body[0];
}
message_t;
/**
Read all available messages on this connection
*/
void read_message( connection_t * );
/**
Send as many messages as possible without blocking to the connection
*/
void try_send_all( connection_t *c );
/**
Create a messge with the specified properties
*/
message_t *create_message( int type, const wchar_t *key, const wchar_t *val );
/**
Init the library
*/
void env_universal_common_init(void (*cb)(int type, const wchar_t *key, const wchar_t *val ) );
/**
Destroy library data
*/
void env_universal_common_destroy();
#endif
|