/* cygserver_msg.h: Single unix specification IPC interface for Cygwin. This file is part of Cygwin. This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ #ifndef __CYGSERVER_MSG_H__ #define __CYGSERVER_MSG_H__ #include #include #ifndef _KERNEL #define _KERNEL 1 #endif #include #include "cygserver.h" #include "cygserver_ipc.h" #ifndef __INSIDE_CYGWIN__ class transport_layer_base; class process_cache; #endif class client_request_msg : public client_request { friend class client_request; public: enum msgop_t { MSGOP_msgctl, MSGOP_msgget, MSGOP_msgrcv, MSGOP_msgsnd }; private: union { struct { msgop_t msgop; proc ipcblk; union { struct msgctl_args ctlargs; struct msgget_args getargs; struct msgrcv_args rcvargs; struct msgsnd_args sndargs; }; } in; union { int ret; ssize_t rcv; } out; } _parameters; #ifndef __INSIDE_CYGWIN__ client_request_msg (); virtual void serve (transport_layer_base *, process_cache *); #endif public: #ifdef __INSIDE_CYGWIN__ client_request_msg (int, int, struct msqid_ds *); // msgctl client_request_msg (key_t, int); // msgget client_request_msg (int, void *, size_t, long, int); // msgrcv client_request_msg (int, const void *, size_t, int); // msgsnd #endif int retval () const { return msglen () ? _parameters.out.ret : -1; } ssize_t rcvval () const { return _parameters.out.rcv; } }; #ifndef __INSIDE_CYGWIN__ int msginit (); int msgunload (); int msgctl (struct thread *, struct msgctl_args *); int msgget (struct thread *, struct msgget_args *); int msgsnd (struct thread *, struct msgsnd_args *); int msgrcv (struct thread *, struct msgrcv_args *); #endif #endif /* __CYGSERVER_MSG_H__ */