Rev 4731 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4731 | 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 net |
29 | /** @addtogroup net |
30 | * @{ |
30 | * @{ |
31 | */ |
31 | */ |
32 | 32 | ||
33 | /** @file |
33 | /** @file |
34 | * Generic module functions. |
34 | * Generic module functions. |
35 | */ |
35 | */ |
36 | 36 | ||
37 | #ifndef __NET_MODULES_H__ |
37 | #ifndef __NET_MODULES_H__ |
38 | #define __NET_MODULES_H__ |
38 | #define __NET_MODULES_H__ |
39 | 39 | ||
40 | #include <async.h> |
40 | #include <async.h> |
41 | 41 | ||
42 | #include <ipc/ipc.h> |
42 | #include <ipc/ipc.h> |
43 | #include <ipc/services.h> |
43 | #include <ipc/services.h> |
44 | 44 | ||
45 | /** Converts the data length between different types. |
45 | /** Converts the data length between different types. |
46 | * @param type_from The source type. Input parameter. |
46 | * @param[in] type_from The source type. |
47 | * @param type_to The destination type. Input parameter. |
47 | * @param[in] type_to The destination type. |
48 | * @param count The number units of the source type size. Input parameter. |
48 | * @param[in] count The number units of the source type size. |
49 | */ |
49 | */ |
50 | #define CONVERT_SIZE( type_from, type_to, count ) (( sizeof( type_from ) / sizeof( type_to )) * ( count )) |
50 | #define CONVERT_SIZE( type_from, type_to, count ) (( sizeof( type_from ) / sizeof( type_to )) * ( count )) |
51 | 51 | ||
52 | /** Registers the module service at the name server. |
52 | /** Registers the module service at the name server. |
53 | * @param me The module service. Input parameter. |
53 | * @param[in] me The module service. |
54 | * @param phonehash The created phone hash. Output parameter. |
54 | * @param[out] phonehash The created phone hash. |
55 | */ |
55 | */ |
56 | #define REGISTER_ME( me, phonehash ) ipc_connect_to_me( PHONE_NS, ( me ), 0, 0, ( phonehash )) |
56 | #define REGISTER_ME( me, phonehash ) ipc_connect_to_me( PHONE_NS, ( me ), 0, 0, ( phonehash )) |
57 | 57 | ||
58 | /** Connect to the needed module function type definition. |
58 | /** Connect to the needed module function type definition. |
59 | * @param need The needed module service. Input parameter. |
59 | * @param[in] need The needed module service. |
60 | * @returns The phone of the needed service. |
60 | * @returns The phone of the needed service. |
61 | */ |
61 | */ |
62 | typedef int connect_module_t( services_t need ); |
62 | typedef int connect_module_t( services_t need ); |
63 | 63 | ||
64 | /** Connects to the needed module. |
64 | /** Connects to the needed module. |
65 | * @param need The needed module service. Input parameter. |
65 | * @param[in] need The needed module service. |
66 | * @returns The phone of the needed service. |
66 | * @returns The phone of the needed service. |
67 | */ |
67 | */ |
68 | int connect_to_service( services_t need ); |
68 | int connect_to_service( services_t need ); |
69 | 69 | ||
70 | /** Creates bidirectional connection with the needed module service and registers the message receiver. |
70 | /** Creates bidirectional connection with the needed module service and registers the message receiver. |
71 | * @param need The needed module service. Input parameter. |
71 | * @param[in] need The needed module service. |
72 | * @param arg1 The first parameter. Input parameter. |
72 | * @param[in] arg1 The first parameter. |
73 | * @param arg2 The second parameter. Input parameter. |
73 | * @param[in] arg2 The second parameter. |
74 | * @param arg3 The third parameter. Input parameter. |
74 | * @param[in] arg3 The third parameter. |
75 | * @param client_receiver The message receiver. Input parameter. |
75 | * @param[in] client_receiver The message receiver. |
76 | * @returns The phone of the needed service. |
76 | * @returns The phone of the needed service. |
77 | * @returns Other error codes as defined for the ipc_connect_to_me() function. |
77 | * @returns Other error codes as defined for the ipc_connect_to_me() function. |
78 | */ |
78 | */ |
79 | int bind_service( services_t need, ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3, async_client_conn_t client_receiver ); |
79 | int bind_service( services_t need, ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3, async_client_conn_t client_receiver ); |
80 | 80 | ||
81 | /** Answers the call. |
81 | /** Answers the call. |
82 | * @param callid The call identifier. Input parameter. |
82 | * @param[in] callid The call identifier. |
83 | * @param result The message processing result. Input parameter. |
83 | * @param[in] result The message processing result. |
84 | * @param answer The message processing answer. Input parameter. |
84 | * @param[in] answer The message processing answer. |
85 | * @param answer_count The number of answer parameters. Input parameter. |
85 | * @param[in] answer_count The number of answer parameters. |
86 | */ |
86 | */ |
87 | void answer_call( ipc_callid_t callid, int result, ipc_call_t * answer, int answer_count ); |
87 | void answer_call( ipc_callid_t callid, int result, ipc_call_t * answer, int answer_count ); |
88 | 88 | ||
89 | /** Refreshes answer structure and parameters count. |
89 | /** Refreshes answer structure and parameters count. |
90 | * Erases all attributes. |
90 | * Erases all attributes. |
91 | * @param answer The message processing answer structure. Input/output parameter. |
91 | * @param[in,out] answer The message processing answer structure. |
92 | * @param answer_count The number of answer parameters. Input/output parameter. |
92 | * @param[in,out] answer_count The number of answer parameters. |
93 | */ |
93 | */ |
94 | void refresh_answer( ipc_call_t * answer, int * answer_count ); |
94 | void refresh_answer( ipc_call_t * answer, int * answer_count ); |
95 | 95 | ||
96 | /** Receives data from the other party. |
96 | /** Receives data from the other party. |
97 | * The received data buffer is allocated and returned. |
97 | * The received data buffer is allocated and returned. |
98 | * @param data The data buffer to be filled. Output parameter. |
98 | * @param[out] data The data buffer to be filled. |
99 | * @param length The buffer length. Output parameter. |
99 | * @param[out] length The buffer length. |
100 | * @returns EOK on success. |
100 | * @returns EOK on success. |
101 | * @returns EBADMEM if the data or the length parameter is NULL. |
101 | * @returns EBADMEM if the data or the length parameter is NULL. |
102 | * @returns EINVAL if the client does not send data. |
102 | * @returns EINVAL if the client does not send data. |
103 | * @returns ENOMEM if there is not enough memory left. |
103 | * @returns ENOMEM if there is not enough memory left. |
104 | * @returns Other error codes as defined for the ipc_data_write_finalize() function. |
104 | * @returns Other error codes as defined for the ipc_data_write_finalize() function. |
105 | */ |
105 | */ |
106 | int data_receive( void ** data, size_t * length ); |
106 | int data_receive( void ** data, size_t * length ); |
107 | 107 | ||
108 | /** Replies the data to the other party. |
108 | /** Replies the data to the other party. |
109 | * @param data The data buffer to be sent. Input parameter. |
109 | * @param[in] data The data buffer to be sent. |
110 | * @param data_length The buffer length. Input parameter. |
110 | * @param[in] data_length The buffer length. |
111 | * @returns EOK on success. |
111 | * @returns EOK on success. |
112 | * @returns EINVAL if the client does not expect the data. |
112 | * @returns EINVAL if the client does not expect the data. |
113 | * @returns EOVERFLOW if the client does not expect all the data. Only partial data are transfered. |
113 | * @returns EOVERFLOW if the client does not expect all the data. Only partial data are transfered. |
114 | * @returns Other error codes as defined for the ipc_data_read_finalize() function. |
114 | * @returns Other error codes as defined for the ipc_data_read_finalize() function. |
115 | */ |
115 | */ |
116 | int data_reply( void * data, size_t data_length ); |
116 | int data_reply( void * data, size_t data_length ); |
117 | 117 | ||
118 | #endif |
118 | #endif |
119 | 119 | ||
120 | /** @} |
120 | /** @} |
121 | */ |
121 | */ |
122 | 122 |