From e977995b9e97c8f7a795843c753ff59468510c4d Mon Sep 17 00:00:00 2001 From: james <> Date: Thu, 14 Feb 2008 12:17:42 +0000 Subject: *** empty log message *** --- src/ipc.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 src/ipc.c (limited to 'src/ipc.c') diff --git a/src/ipc.c b/src/ipc.c new file mode 100644 index 0000000..e42f6ff --- /dev/null +++ b/src/ipc.c @@ -0,0 +1,152 @@ +/* + * ipc.c: + * + * Copyright (c) 2008 James McKenzie , + * All rights reserved. + * + */ + +static char rcsid[] = "$Id$"; + +/* + * $Log$ + * Revision 1.1 2008/02/14 12:17:42 james + * *** empty log message *** + * + */ + +#include "project.h" + +IPC_Msg * +ipc_check_for_message_in_slide (Slide * s) +{ + IPC_Msg *m; + if (SLIDE_BYTES (s) < sizeof (IPC_Msg_hdr)) + return NULL; + m = (IPC_Msg *) SLIDE_RPTR (s); + if (SLIDE_BYTES (s) < m->hdr.size) + return NULL; + if (m->hdr.size < sizeof (IPC_Msg_hdr)) + abort (); + + return m; +} + +void +ipc_consume_message_in_slide (Slide * s) +{ + IPC_Msg *m = ipc_check_for_message_in_slide (s); + if (!m) + abort (); + + slide_consume (s, m->hdr.size); +} + + +int +ipc_msg_send (Socket * s, IPC_Msg * m) +{ + int len = m->hdr.size; + return (socket_write (s, m, len) == len) ? 0 : -1; +} + + +int +ipc_msg_send_debug (Socket * s, char *msg) +{ + char buf[sizeof (IPC_Msg_hdr) + IPC_MAX_BUF]; + IPC_Msg_debug *m; + int len; + + + m = (IPC_Msg_debug *) buf; + m->type = IPC_MSG_TYPE_DEBUG; + strncpy (m->msg, msg, IPC_MAX_BUF); + m->msg[IPC_MAX_BUF - 1] = 0; + + m->size = sizeof (IPC_Msg_hdr) + strlen (m->msg) + 1; + + + return ipc_msg_send (s, (IPC_Msg *) m); +} + +int +ipc_msg_send_history (Socket * s, History_ent * l) +{ + IPC_Msg_history m; + int len; + + + m.type = IPC_MSG_TYPE_HISTORY; + m.history = *l; + m.size = sizeof (m); + + return ipc_msg_send (s, (IPC_Msg *) & m); +} + +int +ipc_msg_send_vt102 (Socket * s, VT102 * v) +{ + IPC_Msg_VT102 m; + int len; + + + m.type = IPC_MSG_TYPE_VT102; + m.len = sizeof (VT102); + m.vt102 = *v; + m.size = sizeof (m); + + return ipc_msg_send (s, (IPC_Msg *) & m); +} + + +int +ipc_msg_send_key (Socket * s, int key) +{ + IPC_Msg_key m; + + m.size = sizeof (m); + m.type = IPC_MSG_TYPE_KEY; + m.key = key; + return ipc_msg_send (s, (IPC_Msg *) & m); +} + + + +int +ipc_msg_send_term (Socket * s, void *buf, int len) +{ + char mbuf[IPC_MAX_BUF + sizeof (IPC_Msg_hdr)]; + + IPC_Msg_term *m = (IPC_Msg_term *) mbuf; + + if (!len) + return 0; + + m->size = len + sizeof (IPC_Msg_hdr); + m->type = IPC_MSG_TYPE_TERM; + m->len = len; + memcpy (m->term, buf, len); + + return ipc_msg_send (s, (IPC_Msg *) & m); +} + + +int +ipc_msg_send_status (Socket * s, char *buf) +{ + char mbuf[IPC_MAX_BUF + sizeof (IPC_Msg_hdr)]; + IPC_Msg_status *m = (IPC_Msg_status *) mbuf; + int len; + + if (!buf) + return 0; + len = strlen (buf) + 1; + + m->size = len + sizeof (IPC_Msg_hdr); + m->type = IPC_MSG_TYPE_STATUS; + strncpy (m->status, buf, IPC_MAX_BUF - 1); + m->status[IPC_MAX_BUF - 1] = 0; + + return ipc_msg_send (s, (IPC_Msg *) & m); +} -- cgit v1.2.3