summaryrefslogtreecommitdiffstats
path: root/clib/mq.h
blob: 95cca4d0b5cfcc4e4b1272e4e06e6d4a13a1416f (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 * Copyright (c) International Business Machines Corp., 2014
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

/*!
 * @file mqueue.h
 * @brief Message queues
 * @author Shaun Wetzstein <shaun@us.ibm.com>
 * @date 2010-2011
 */

#ifndef __MQUEUE_H__
#define __MQUEUE_H__

#include <stdint.h>
#include <stdbool.h>
#include <mqueue.h>

#include "attribute.h"

/* ==================================================================== */

typedef struct mqueue mqueue_t;	//!< Alias for the @em mqueue class
typedef struct mq_attr mqueue_attr_t;

#define	INIT_MQUEUE	{NULL,-1,-1}

/*!
 * @brief POSIX message queues
 */
struct mqueue {
	char *service;		//!< Message queue name

	mqd_t in;		//!< Inbound message queue
	mqd_t out;		//!< Outbound message queue
};

/* ==================================================================== */

/*!
 * @brief Constructs a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param service [in] mqueue service name
 * @return None
 * @throws UNEXPECTED if @em self pointer is NULL
 */
extern int mqueue_init(mqueue_t *, const char *)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

/*!
 * @brief Destructs a @em mqueue object
 * @details Closes all message queues associated with this \em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @return None
 */
extern int mqueue_delete(mqueue_t *)
/*! @cond */
__nonnull((1)) /*! @endcond */ ;

/*!
 * @brief Create the server-side of a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param tid [in] thread id
 * @return None
 */
extern int mqueue_create(mqueue_t *, pid_t)
/*! @cond */
__nonnull((1)) /*! @endcond */ ;

/*!
 * @brief Create the client-side of a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param path [in] FIX ME
 * @return None
 */
extern int mqueue_open(mqueue_t *, char *)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

/*!
 * @brief Close a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param path [in] FIX ME
 * @return None
 */
extern int mqueue_close(mqueue_t *, char *)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

/*!
 * @brief Get message queue operating attributes of a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @return Initialized mqueue_attr object
 */
extern mqueue_attr_t mqueue_getattr(mqueue_t *)
/*! @cond */
__nonnull((1)) /*! @endcond */ ;

/*!
 * @brief Write (send) a message to a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param ptr [in] Reference to data bytes to send
 * @param ptr [in] Length (in bytes) of the data bytes
 * @return non-0 on success, 0 othereise
 */
extern int mqueue_send(mqueue_t *, void *, size_t)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

/*!
 * @brief Read (receive) a message from a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param ptr [out] Reference to data bytes to send
 * @param ptr [in] Length (in bytes) of the buffer referenced by @em ptr
 * @return non-0 on success, 0 othereise
 */
extern int mqueue_receive(mqueue_t *, void *, size_t)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

#endif				/* __MQUEUE_H__ */
OpenPOWER on IntegriCloud