chiark / gitweb /
serialmgr: Look for things in /usr, not /usr/local
[sympathy.git] / src / ipc.c
1 /* 
2  * ipc.c:
3  *
4  * Copyright (c) 2008 James McKenzie <sympathy@madingley.org>,
5  * All rights reserved.
6  *
7  */
8
9 static char rcsid[] = "$Id: ipc.c,v 1.11 2008/03/07 14:13:40 james Exp $";
10
11 /* 
12  * $Log: ipc.c,v $
13  * Revision 1.11  2008/03/07 14:13:40  james
14  * *** empty log message ***
15  *
16  * Revision 1.10  2008/03/07 13:16:02  james
17  * *** empty log message ***
18  *
19  * Revision 1.9  2008/03/07 12:37:04  james
20  * *** empty log message ***
21  *
22  * Revision 1.8  2008/03/03 18:16:16  james
23  * *** empty log message ***
24  *
25  * Revision 1.7  2008/03/03 18:15:19  james
26  * *** empty log message ***
27  *
28  * Revision 1.6  2008/02/28 16:57:51  james
29  * *** empty log message ***
30  *
31  * Revision 1.5  2008/02/28 11:27:48  james
32  * *** empty log message ***
33  *
34  * Revision 1.4  2008/02/22 17:07:00  james
35  * *** empty log message ***
36  *
37  * Revision 1.3  2008/02/15 23:52:12  james
38  * *** empty log message ***
39  *
40  * Revision 1.2  2008/02/15 03:32:07  james
41  * *** empty log message ***
42  *
43  * Revision 1.1  2008/02/14 12:17:42  james
44  * *** empty log message ***
45  *
46  */
47
48 #include "project.h"
49
50 IPC_Msg *
51 ipc_check_for_message_in_slide (Slide * s)
52 {
53   IPC_Msg *m;
54   if (SLIDE_BYTES (s) < sizeof (IPC_Msg_hdr))
55     return NULL;
56   m = (IPC_Msg *) SLIDE_RPTR (s);
57   if (SLIDE_BYTES (s) < m->hdr.size)
58     return NULL;
59   if (m->hdr.size < sizeof (IPC_Msg_hdr))
60     crash_out ("ipc_check_for_message_in_slide test failed");
61
62   return m;
63 }
64
65 void
66 ipc_consume_message_in_slide (Slide * s)
67 {
68   IPC_Msg *m = ipc_check_for_message_in_slide (s);
69   if (!m)
70     crash_out ("ipc_consume_message_in_slide test failed");
71
72   slide_consume (s, m->hdr.size);
73 }
74
75
76 int
77 ipc_msg_send (Socket * s, IPC_Msg * m)
78 {
79   int len = m->hdr.size;
80   return (socket_write (s, m, len) == len) ? 0 : -1;
81 }
82
83
84 int
85 ipc_msg_send_debug (Socket * s, char *msg)
86 {
87   char buf[sizeof (IPC_Msg_hdr) + IPC_MAX_BUF];
88   IPC_Msg_debug *m;
89   int len;
90
91
92   m = (IPC_Msg_debug *) buf;
93   m->type = IPC_MSG_TYPE_DEBUG;
94   strncpy (m->msg, msg, IPC_MAX_BUF);
95   m->msg[IPC_MAX_BUF - 1] = 0;
96
97   m->size = sizeof (IPC_Msg_hdr) + strlen (m->msg) + 1;
98
99
100   return ipc_msg_send (s, (IPC_Msg *) m);
101 }
102
103 int
104 ipc_msg_send_initialize (Socket * s)
105 {
106   IPC_Msg_initialize m;
107
108   m.size = sizeof (m);
109   m.type = IPC_MSG_TYPE_INITIALIZE;
110   return ipc_msg_send (s, (IPC_Msg *) & m);
111 }
112
113 int
114 ipc_msg_send_history (Socket * s, History_ent * l)
115 {
116   IPC_Msg_history m;
117   int len;
118
119
120   m.type = IPC_MSG_TYPE_HISTORY;
121   m.history = *l;
122   m.size = sizeof (m);
123
124   return ipc_msg_send (s, (IPC_Msg *) & m);
125 }
126
127 int
128 ipc_msg_send_vt102 (Socket * s, VT102 * v)
129 {
130   IPC_Msg_VT102 m;
131   int len;
132
133
134   m.type = IPC_MSG_TYPE_VT102;
135   m.len = sizeof (VT102);
136   m.vt102 = *v;
137   m.size = sizeof (m);
138
139   return ipc_msg_send (s, (IPC_Msg *) & m);
140 }
141
142
143 int
144 ipc_msg_send_key (Socket * s, int key)
145 {
146   IPC_Msg_key m;
147
148   m.size = sizeof (m);
149   m.type = IPC_MSG_TYPE_KEY;
150   m.key = key;
151   return ipc_msg_send (s, (IPC_Msg *) & m);
152 }
153
154
155
156 int
157 ipc_msg_send_term (Socket * s, void *buf, int len)
158 {
159   char mbuf[IPC_MAX_BUF + sizeof (IPC_Msg_hdr)];
160
161   IPC_Msg_term *m = (IPC_Msg_term *) mbuf;
162
163   if (!len)
164     return 0;
165
166   m->size = len + sizeof (IPC_Msg_hdr);
167   m->type = IPC_MSG_TYPE_TERM;
168   m->len = len;
169   memcpy (m->term, buf, len);
170
171   return ipc_msg_send (s, (IPC_Msg *) & m);
172 }
173
174
175 int
176 ipc_msg_send_status (Socket * s, char *buf)
177 {
178   char mbuf[IPC_MAX_BUF + sizeof (IPC_Msg_hdr)];
179   IPC_Msg_status *m = (IPC_Msg_status *) mbuf;
180   int len;
181
182   if (!buf)
183     return 0;
184   len = strlen (buf) + 1;
185
186   m->size = len + sizeof (IPC_Msg_hdr);
187   m->type = IPC_MSG_TYPE_STATUS;
188   strncpy (m->status, buf, IPC_MAX_BUF - 1);
189   m->status[IPC_MAX_BUF - 1] = 0;
190
191   return ipc_msg_send (s, (IPC_Msg *) & m);
192 }
193
194
195 int
196 ipc_msg_send_setbaud (Socket * s, int baud)
197 {
198   IPC_Msg_setbaud m;
199
200   m.size = sizeof (m);
201   m.type = IPC_MSG_TYPE_SETBAUD;
202   m.baud = baud;
203   return ipc_msg_send (s, (IPC_Msg *) & m);
204 }
205
206
207 int
208 ipc_msg_send_sendbreak (Socket * s)
209 {
210   IPC_Msg_sendbreak m;
211
212   m.size = sizeof (m);
213   m.type = IPC_MSG_TYPE_SENDBREAK;
214   return ipc_msg_send (s, (IPC_Msg *) & m);
215 }
216
217
218 int
219 ipc_msg_send_setflow (Socket * s, int flow)
220 {
221   IPC_Msg_setflow m;
222
223   m.size = sizeof (m);
224   m.type = IPC_MSG_TYPE_SETFLOW;
225   m.flow = flow;
226   return ipc_msg_send (s, (IPC_Msg *) & m);
227 }
228
229 int
230 ipc_msg_send_setansi (Socket * s, int ansi)
231 {
232   IPC_Msg_setansi m;
233
234   m.size = sizeof (m);
235   m.type = IPC_MSG_TYPE_SETANSI;
236   m.ansi = ansi;
237   return ipc_msg_send (s, (IPC_Msg *) & m);
238 }
239
240 int
241 ipc_msg_send_hangup (Socket * s)
242 {
243   IPC_Msg_hangup m;
244
245   m.size = sizeof (m);
246   m.type = IPC_MSG_TYPE_HANGUP;
247   return ipc_msg_send (s, (IPC_Msg *) & m);
248 }
249
250 int
251 ipc_msg_send_setsize (Socket * s, CRT_Pos size)
252 {
253   IPC_Msg_setsize m;
254
255   m.size = sizeof (m);
256   m.type = IPC_MSG_TYPE_SETSIZE;
257   m.winsize = size;
258
259   return ipc_msg_send (s, (IPC_Msg *) & m);
260 }
261
262 int
263 ipc_msg_send_reset (Socket * s)
264 {
265   IPC_Msg_reset m;
266
267   m.size = sizeof (m);
268   m.type = IPC_MSG_TYPE_RESET;
269   return ipc_msg_send (s, (IPC_Msg *) & m);
270 }
271
272 int
273 ipc_msg_send_killme (Socket * s)
274 {
275   IPC_Msg_killme m;
276
277   m.size = sizeof (m);
278   m.type = IPC_MSG_TYPE_KILLME;
279   return ipc_msg_send (s, (IPC_Msg *) & m);
280 }