Subversion Repositories HelenOS

Rev

Rev 4743 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4743 Rev 4756
1
/*
1
/*
2
 * Copyright (c) 2009 Lukas Mejdrech
2
 * Copyright (c) 2009 Lukas Mejdrech
3
 * All rights reserved.
3
 * All rights reserved.
4
 *
4
 *
5
 * Redistribution and use in source and binary forms, with or without
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
6
 * modification, are permitted provided that the following conditions
7
 * are met:
7
 * are met:
8
 *
8
 *
9
 * - Redistributions of source code must retain the above copyright
9
 * - Redistributions of source code must retain the above copyright
10
 *   notice, this list of conditions and the following disclaimer.
10
 *   notice, this list of conditions and the following disclaimer.
11
 * - Redistributions in binary form must reproduce the above copyright
11
 * - Redistributions in binary form must reproduce the above copyright
12
 *   notice, this list of conditions and the following disclaimer in the
12
 *   notice, this list of conditions and the following disclaimer in the
13
 *   documentation and/or other materials provided with the distribution.
13
 *   documentation and/or other materials provided with the distribution.
14
 * - The name of the author may not be used to endorse or promote products
14
 * - The name of the author may not be used to endorse or promote products
15
 *   derived from this software without specific prior written permission.
15
 *   derived from this software without specific prior written permission.
16
 *
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 */
27
 */
28
 
28
 
29
/** @addtogroup socket
29
/** @addtogroup socket
30
 *  @{
30
 *  @{
31
 */
31
 */
32
 
32
 
33
/** @file
33
/** @file
34
 *  Socket messages.
34
 *  Socket messages.
35
 *  @see socket.h
35
 *  @see socket.h
36
 *  \todo
-
 
37
 */
36
 */
38
 
37
 
39
 
38
 
40
#ifndef __NET_SOCKET_MESSAGES_H__
39
#ifndef __NET_SOCKET_MESSAGES_H__
41
#define __NET_SOCKET_MESSAGES_H__
40
#define __NET_SOCKET_MESSAGES_H__
42
 
41
 
43
#include <ipc/ipc.h>
42
#include <ipc/ipc.h>
44
 
43
 
45
#include "../messages.h"
44
#include "../messages.h"
46
 
45
 
47
#include "../include/socket_codes.h"
46
#include "../include/socket_codes.h"
48
 
47
 
-
 
48
/** Socket client messages.
-
 
49
 */
49
typedef enum{
50
typedef enum{
-
 
51
    /** Creates a new socket.
-
 
52
     *  @see socket()
-
 
53
     */
50
    NET_SOCKET = NET_SOCKET_FIRST,
54
    NET_SOCKET = NET_SOCKET_FIRST,
-
 
55
    /** Binds the socket.
-
 
56
     *  @see bind()
-
 
57
     */
51
    NET_SOCKET_BIND,
58
    NET_SOCKET_BIND,
-
 
59
    /** Creates a new socket.
-
 
60
     *  @see socket()
-
 
61
     */
52
    NET_SOCKET_LISTEN,
62
    NET_SOCKET_LISTEN,
-
 
63
    /** Accepts an incomming connection.
-
 
64
     *  @see accept()
-
 
65
     */
53
    NET_SOCKET_ACCEPT,
66
    NET_SOCKET_ACCEPT,
-
 
67
    /** Connects the socket.
-
 
68
     *  @see connect()
-
 
69
     */
54
    NET_SOCKET_CONNECT,
70
    NET_SOCKET_CONNECT,
-
 
71
    /** Closes the socket.
-
 
72
     *  @see closesocket()
-
 
73
     */
55
    NET_SOCKET_CLOSE,
74
    NET_SOCKET_CLOSE,
-
 
75
    /** Sends data via the stream socket.
-
 
76
     *  @see send()
-
 
77
     */
56
    NET_SOCKET_SEND,
78
    NET_SOCKET_SEND,
-
 
79
    /** Sends data via the datagram socket.
-
 
80
     *  @see sendto()
-
 
81
     */
57
    NET_SOCKET_SENDTO,
82
    NET_SOCKET_SENDTO,
-
 
83
    /** Receives data from the stream socket.
-
 
84
     *  @see socket()
-
 
85
     */
58
    NET_SOCKET_RECV,
86
    NET_SOCKET_RECV,
-
 
87
    /** Receives data from the datagram socket.
-
 
88
     *  @see socket()
-
 
89
     */
59
    NET_SOCKET_RECVFROM,
90
    NET_SOCKET_RECVFROM,
-
 
91
    /** Gets the socket option.
-
 
92
     *  @see getsockopt()
-
 
93
     */
60
    NET_SOCKET_GETSOCKOPT,
94
    NET_SOCKET_GETSOCKOPT,
-
 
95
    /** Sets the socket option.
-
 
96
     *  @see setsockopt()
-
 
97
     */
61
    NET_SOCKET_SETSOCKOPT,
98
    NET_SOCKET_SETSOCKOPT,
-
 
99
    /** New socket for acceptence notification message.
-
 
100
     */
62
    NET_SOCKET_ACCEPTED,
101
    NET_SOCKET_ACCEPTED,
-
 
102
    /** New data received notification message.
-
 
103
     */
63
    NET_SOCKET_RECEIVED,
104
    NET_SOCKET_RECEIVED,
-
 
105
    /** New socket data fragment size notification message.
-
 
106
     */
64
    NET_SOCKET_DATA_FRAGMENT_SIZE
107
    NET_SOCKET_DATA_FRAGMENT_SIZE
65
} socket_messages;
108
} socket_messages;
66
 
109
 
67
/** @name Socket specific message parameters definitions
110
/** @name Socket specific message parameters definitions
68
 */
111
 */
69
/*@{*/
112
/*@{*/
70
 
113
 
-
 
114
/** Sets the socket identifier in the message answer.
-
 
115
 *  @param[out] answer The message answer structure.
-
 
116
 */
71
#define SOCKET_SET_SOCKET_ID( call )        ( int * ) & IPC_GET_ARG1( call )
117
#define SOCKET_SET_SOCKET_ID( answer )          ( int * ) & IPC_GET_ARG1( answer )
-
 
118
 
-
 
119
/** Returns the socket identifier message parameter.
-
 
120
 *  @param[in] call The message call structure.
-
 
121
 */
72
#define SOCKET_GET_SOCKET_ID( call )        ( int ) IPC_GET_ARG1( call )
122
#define SOCKET_GET_SOCKET_ID( call )            ( int ) IPC_GET_ARG1( call )
-
 
123
 
-
 
124
/** Sets the read data length in the message answer.
-
 
125
 *  @param[out] answer The message answer structure.
-
 
126
 */
73
#define SOCKET_SET_READ_DATA_LENGTH( call ) ( int * ) & IPC_GET_ARG1( call )
127
#define SOCKET_SET_READ_DATA_LENGTH( answer )   ( int * ) & IPC_GET_ARG1( answer )
-
 
128
 
-
 
129
/** Returns the read data length message parameter.
-
 
130
 *  @param[in] call The message call structure.
-
 
131
 */
74
#define SOCKET_GET_READ_DATA_LENGTH( call ) ( int ) IPC_GET_ARG1( call )
132
#define SOCKET_GET_READ_DATA_LENGTH( call )     ( int ) IPC_GET_ARG1( call )
75
 
133
 
-
 
134
/** Returns the backlog message parameter.
-
 
135
 *  @param[in] call The message call structure.
-
 
136
 */
76
#define SOCKET_GET_BACKLOG( call )          ( int ) IPC_GET_ARG2( call )
137
#define SOCKET_GET_BACKLOG( call )              ( int ) IPC_GET_ARG2( call )
-
 
138
 
-
 
139
/** Returns the option level message parameter.
-
 
140
 *  @param[in] call The message call structure.
-
 
141
 */
77
#define SOCKET_GET_OPT_LEVEL( call )        ( int ) IPC_GET_ARG2( call )
142
#define SOCKET_GET_OPT_LEVEL( call )            ( int ) IPC_GET_ARG2( call )
-
 
143
 
-
 
144
/** Sets the address length in the message answer.
-
 
145
 *  @param[out] answer The message answer structure.
-
 
146
 */
78
#define SOCKET_SET_ADDRESS_LENGTH( call )   ( socklen_t * ) & IPC_GET_ARG2( call )
147
#define SOCKET_SET_ADDRESS_LENGTH( answer )     ( socklen_t * ) & IPC_GET_ARG2( answer )
-
 
148
 
-
 
149
/** Returns the address length message parameter.
-
 
150
 *  @param[in] call The message call structure.
-
 
151
 */
79
#define SOCKET_GET_ADDRESS_LENGTH( call )   ( socklen_t ) IPC_GET_ARG2( call )
152
#define SOCKET_GET_ADDRESS_LENGTH( call )       ( socklen_t ) IPC_GET_ARG2( call )
-
 
153
 
-
 
154
/** Returns the data fragment size message parameter.
-
 
155
 *  @param[in] call The message call structure.
-
 
156
 */
80
#define SOCKET_GET_DATA_FRAGMENT_SIZE( call )   ( size_t ) IPC_GET_ARG2( call )
157
#define SOCKET_GET_DATA_FRAGMENT_SIZE( call )   ( size_t ) IPC_GET_ARG2( call )
81
#define SOCKET_SET_DATA_FRAGMENT_SIZE( call )   ( size_t * ) & IPC_GET_ARG2( call )
-
 
82
 
158
 
-
 
159
/** Sets the data fragment size in the message answer.
-
 
160
 *  @param[out] answer The message answer structure.
-
 
161
 */
-
 
162
#define SOCKET_SET_DATA_FRAGMENT_SIZE( answer ) ( size_t * ) & IPC_GET_ARG2( answer )
-
 
163
 
-
 
164
/** Sets the header size in the message answer.
-
 
165
 *  @param[out] answer The message answer structure.
-
 
166
 */
83
#define SOCKET_SET_HEADER_SIZE( call )      ( int * ) & IPC_GET_ARG3( call )
167
#define SOCKET_SET_HEADER_SIZE( answer )        ( int * ) & IPC_GET_ARG3( answer )
-
 
168
 
-
 
169
/** Returns the header size message parameter.
-
 
170
 *  @param[in] call The message call structure.
-
 
171
 */
84
#define SOCKET_GET_HEADER_SIZE( call )      ( int ) IPC_GET_ARG3( call )
172
#define SOCKET_GET_HEADER_SIZE( call )          ( int ) IPC_GET_ARG3( call )
-
 
173
 
-
 
174
/** Returns the flags message parameter.
-
 
175
 *  @param[in] call The message call structure.
-
 
176
 */
-
 
177
#define SOCKET_GET_FLAGS( call )                ( int ) IPC_GET_ARG4( call )
85
 
178
 
-
 
179
/** Returns the option name message parameter.
86
#define SOCKET_GET_FLAGS( call )            ( int ) IPC_GET_ARG4( call )
180
 *  @param[in] call The message call structure.
-
 
181
 */
87
#define SOCKET_GET_OPT_NAME( call )         ( int ) IPC_GET_ARG4( call )
182
#define SOCKET_GET_OPT_NAME( call )             ( int ) IPC_GET_ARG4( call )
88
 
183
 
-
 
184
/** Returns the data fragments message parameter.
-
 
185
 *  @param[in] call The message call structure.
-
 
186
 */
89
#define SOCKET_GET_DATA_FRAGMENTS( call )   ( int ) IPC_GET_ARG5( call )
187
#define SOCKET_GET_DATA_FRAGMENTS( call )       ( int ) IPC_GET_ARG5( call )
-
 
188
 
-
 
189
/** Returns the new socket identifier message parameter.
-
 
190
 *  @param[in] call The message call structure.
-
 
191
 */
90
#define SOCKET_GET_NEW_SOCKET_ID( call )    ( int ) IPC_GET_ARG5( call )
192
#define SOCKET_GET_NEW_SOCKET_ID( call )        ( int ) IPC_GET_ARG5( call )
91
 
193
 
92
/*@}*/
194
/*@}*/
93
 
195
 
94
#endif
196
#endif
95
 
197
 
96
/** @}
198
/** @}
97
 */
199
 */
98
 
200