File: | obj-scan-build/pflocal/socketServer.c |
Location: | line 1033, column 2 |
Description: | Value stored to 'msgh_simple' is never read |
1 | /* Module socket */ |
2 | |
3 | #ifndef _GNU_SOURCE1 |
4 | #define _GNU_SOURCE1 1 |
5 | #endif |
6 | |
7 | #define EXPORT_BOOLEAN |
8 | #include <mach/boolean.h> |
9 | #include <mach/kern_return.h> |
10 | #include <mach/message.h> |
11 | #include <mach/mig_errors.h> |
12 | #include <mach/mig_support.h> |
13 | |
14 | #ifndef mig_internalstatic |
15 | #define mig_internalstatic static |
16 | #endif |
17 | |
18 | #ifndef mig_external |
19 | #define mig_external |
20 | #endif |
21 | |
22 | #ifndef TypeCheck1 |
23 | #define TypeCheck1 1 |
24 | #endif |
25 | |
26 | #ifndef UseExternRCSId1 |
27 | #define UseExternRCSId1 1 |
28 | #endif |
29 | |
30 | #define BAD_TYPECHECK(type, check)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(type); _c.t = *(check); _t.w != _c.w; }) ({\ |
31 | union { mach_msg_type_t t; unsigned32_t w; } _t, _c;\ |
32 | _t.t = *(type); _c.t = *(check); _t.w != _c.w; }) |
33 | #define msgh_request_portmsgh_local_port msgh_local_port |
34 | #define MACH_MSGH_BITS_REQUEST(bits)(((bits) & 0x0000ff00) >> 8) MACH_MSGH_BITS_LOCAL(bits)(((bits) & 0x0000ff00) >> 8) |
35 | #define msgh_reply_portmsgh_remote_port msgh_remote_port |
36 | #define MACH_MSGH_BITS_REPLY(bits)((bits) & 0x000000ff) MACH_MSGH_BITS_REMOTE(bits)((bits) & 0x000000ff) |
37 | |
38 | #include <mach/std_types.h> |
39 | #include <mach/mach_types.h> |
40 | #include <device/device_types.h> |
41 | #include <device/net_status.h> |
42 | #include <sys/types.h> |
43 | #include <sys/stat.h> |
44 | #include <sys/statfs.h> |
45 | #include <sys/resource.h> |
46 | #include <sys/utsname.h> |
47 | #include <hurd/hurd_types.h> |
48 | #include "mig-decls.h" |
49 | |
50 | /* Routine socket_create */ |
51 | mig_internalstatic void _Xsocket_create |
52 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
53 | { |
54 | typedef struct { |
55 | mach_msg_header_t Head; |
56 | mach_msg_type_t sock_typeType; |
57 | int sock_type; |
58 | mach_msg_type_t protocolType; |
59 | int protocol; |
60 | } Request; |
61 | |
62 | typedef struct { |
63 | mach_msg_header_t Head; |
64 | mach_msg_type_t RetCodeType; |
65 | kern_return_t RetCode; |
66 | mach_msg_type_t sockType; |
67 | mach_port_t sock; |
68 | } Reply; |
69 | |
70 | Request *In0P = (Request *) InHeadP; |
71 | Reply *OutP = (Reply *) OutHeadP; |
72 | mig_external kern_return_t S_socket_create |
73 | (pf_t server, int sock_type, int protocol, mach_port_t *sock, mach_msg_type_name_t *sockPoly); |
74 | |
75 | boolean_t msgh_simple; |
76 | const mach_msg_type_t sock_typeCheck = { |
77 | /* msgt_name = */ 2, |
78 | /* msgt_size = */ 32, |
79 | /* msgt_number = */ 1, |
80 | /* msgt_inline = */ TRUE((boolean_t) 1), |
81 | /* msgt_longform = */ FALSE((boolean_t) 0), |
82 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
83 | /* msgt_unused = */ 0 |
84 | }; |
85 | |
86 | const mach_msg_type_t protocolCheck = { |
87 | /* msgt_name = */ 2, |
88 | /* msgt_size = */ 32, |
89 | /* msgt_number = */ 1, |
90 | /* msgt_inline = */ TRUE((boolean_t) 1), |
91 | /* msgt_longform = */ FALSE((boolean_t) 0), |
92 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
93 | /* msgt_unused = */ 0 |
94 | }; |
95 | |
96 | const mach_msg_type_t sockType = { |
97 | /* msgt_name = */ -1, |
98 | /* msgt_size = */ 32, |
99 | /* msgt_number = */ 1, |
100 | /* msgt_inline = */ TRUE((boolean_t) 1), |
101 | /* msgt_longform = */ FALSE((boolean_t) 0), |
102 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
103 | /* msgt_unused = */ 0 |
104 | }; |
105 | |
106 | mach_msg_type_name_t sockPoly; |
107 | |
108 | #if TypeCheck1 |
109 | if ((In0P->Head.msgh_size != 40) || |
110 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
111 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
112 | #endif /* TypeCheck */ |
113 | |
114 | #if TypeCheck1 |
115 | if (BAD_TYPECHECK(&In0P->sock_typeType, &sock_typeCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->sock_typeType); _c.t = *(&sock_typeCheck ); _t.w != _c.w; })) |
116 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
117 | #endif /* TypeCheck */ |
118 | |
119 | #if TypeCheck1 |
120 | if (BAD_TYPECHECK(&In0P->protocolType, &protocolCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->protocolType); _c.t = *(&protocolCheck); _t.w != _c.w; })) |
121 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
122 | #endif /* TypeCheck */ |
123 | |
124 | OutP->RetCode = S_socket_create(In0P->Head.msgh_request_portmsgh_local_port, In0P->sock_type, In0P->protocol, &OutP->sock, &sockPoly); |
125 | if (OutP->RetCode != KERN_SUCCESS0) |
126 | return; |
127 | |
128 | msgh_simple = TRUE((boolean_t) 1); |
129 | OutP->Head.msgh_size = 40; |
130 | |
131 | OutP->sockType = sockType; |
132 | |
133 | if (MACH_MSG_TYPE_PORT_ANY(sockPoly)(((sockPoly) >= 16) && ((sockPoly) <= 21))) |
134 | msgh_simple = FALSE((boolean_t) 0); |
135 | |
136 | OutP->sockType.msgt_name = sockPoly; |
137 | |
138 | if (!msgh_simple) |
139 | OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX0x80000000U; |
140 | } |
141 | |
142 | /* Routine socket_listen */ |
143 | mig_internalstatic void _Xsocket_listen |
144 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
145 | { |
146 | typedef struct { |
147 | mach_msg_header_t Head; |
148 | mach_msg_type_t queue_limitType; |
149 | int queue_limit; |
150 | } Request; |
151 | |
152 | typedef struct { |
153 | mach_msg_header_t Head; |
154 | mach_msg_type_t RetCodeType; |
155 | kern_return_t RetCode; |
156 | } Reply; |
157 | |
158 | Request *In0P = (Request *) InHeadP; |
159 | Reply *OutP = (Reply *) OutHeadP; |
160 | mig_external kern_return_t S_socket_listen |
161 | (sock_user_t sock, int queue_limit); |
162 | |
163 | const mach_msg_type_t queue_limitCheck = { |
164 | /* msgt_name = */ 2, |
165 | /* msgt_size = */ 32, |
166 | /* msgt_number = */ 1, |
167 | /* msgt_inline = */ TRUE((boolean_t) 1), |
168 | /* msgt_longform = */ FALSE((boolean_t) 0), |
169 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
170 | /* msgt_unused = */ 0 |
171 | }; |
172 | |
173 | sock_user_t sock; |
174 | |
175 | #if TypeCheck1 |
176 | if ((In0P->Head.msgh_size != 32) || |
177 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
178 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
179 | #endif /* TypeCheck */ |
180 | |
181 | #if TypeCheck1 |
182 | if (BAD_TYPECHECK(&In0P->queue_limitType, &queue_limitCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->queue_limitType); _c.t = *(&queue_limitCheck ); _t.w != _c.w; })) |
183 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
184 | #endif /* TypeCheck */ |
185 | |
186 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
187 | |
188 | OutP->RetCode = S_socket_listen(sock, In0P->queue_limit); |
189 | end_using_sock_user_port(sock); |
190 | } |
191 | |
192 | /* Routine socket_accept */ |
193 | mig_internalstatic void _Xsocket_accept |
194 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
195 | { |
196 | typedef struct { |
197 | mach_msg_header_t Head; |
198 | } Request; |
199 | |
200 | typedef struct { |
201 | mach_msg_header_t Head; |
202 | mach_msg_type_t RetCodeType; |
203 | kern_return_t RetCode; |
204 | mach_msg_type_t conn_sockType; |
205 | mach_port_t conn_sock; |
206 | mach_msg_type_t peer_addrType; |
207 | mach_port_t peer_addr; |
208 | } Reply; |
209 | |
210 | Request *In0P = (Request *) InHeadP; |
211 | Reply *OutP = (Reply *) OutHeadP; |
212 | mig_external kern_return_t S_socket_accept |
213 | (sock_user_t sock, mach_port_t *conn_sock, mach_msg_type_name_t *conn_sockPoly, mach_port_t *peer_addr, mach_msg_type_name_t *peer_addrPoly); |
214 | |
215 | boolean_t msgh_simple; |
216 | const mach_msg_type_t conn_sockType = { |
217 | /* msgt_name = */ -1, |
218 | /* msgt_size = */ 32, |
219 | /* msgt_number = */ 1, |
220 | /* msgt_inline = */ TRUE((boolean_t) 1), |
221 | /* msgt_longform = */ FALSE((boolean_t) 0), |
222 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
223 | /* msgt_unused = */ 0 |
224 | }; |
225 | |
226 | const mach_msg_type_t peer_addrType = { |
227 | /* msgt_name = */ -1, |
228 | /* msgt_size = */ 32, |
229 | /* msgt_number = */ 1, |
230 | /* msgt_inline = */ TRUE((boolean_t) 1), |
231 | /* msgt_longform = */ FALSE((boolean_t) 0), |
232 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
233 | /* msgt_unused = */ 0 |
234 | }; |
235 | |
236 | sock_user_t sock; |
237 | mach_msg_type_name_t conn_sockPoly; |
238 | mach_msg_type_name_t peer_addrPoly; |
239 | |
240 | #if TypeCheck1 |
241 | if ((In0P->Head.msgh_size != 24) || |
242 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
243 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
244 | #endif /* TypeCheck */ |
245 | |
246 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
247 | |
248 | OutP->RetCode = S_socket_accept(sock, &OutP->conn_sock, &conn_sockPoly, &OutP->peer_addr, &peer_addrPoly); |
249 | end_using_sock_user_port(sock); |
250 | if (OutP->RetCode != KERN_SUCCESS0) |
251 | return; |
252 | |
253 | msgh_simple = TRUE((boolean_t) 1); |
254 | OutP->Head.msgh_size = 48; |
255 | |
256 | OutP->conn_sockType = conn_sockType; |
257 | |
258 | if (MACH_MSG_TYPE_PORT_ANY(conn_sockPoly)(((conn_sockPoly) >= 16) && ((conn_sockPoly) <= 21))) |
259 | msgh_simple = FALSE((boolean_t) 0); |
260 | |
261 | OutP->conn_sockType.msgt_name = conn_sockPoly; |
262 | |
263 | OutP->peer_addrType = peer_addrType; |
264 | |
265 | if (MACH_MSG_TYPE_PORT_ANY(peer_addrPoly)(((peer_addrPoly) >= 16) && ((peer_addrPoly) <= 21))) |
266 | msgh_simple = FALSE((boolean_t) 0); |
267 | |
268 | OutP->peer_addrType.msgt_name = peer_addrPoly; |
269 | |
270 | if (!msgh_simple) |
271 | OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX0x80000000U; |
272 | } |
273 | |
274 | /* Routine socket_connect */ |
275 | mig_internalstatic void _Xsocket_connect |
276 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
277 | { |
278 | typedef struct { |
279 | mach_msg_header_t Head; |
280 | mach_msg_type_t addrType; |
281 | addr_port_t addr; |
282 | } Request; |
283 | |
284 | typedef struct { |
285 | mach_msg_header_t Head; |
286 | mach_msg_type_t RetCodeType; |
287 | kern_return_t RetCode; |
288 | } Reply; |
289 | |
290 | Request *In0P = (Request *) InHeadP; |
291 | Reply *OutP = (Reply *) OutHeadP; |
292 | mig_external kern_return_t S_socket_connect |
293 | (sock_user_t sock, addr_t addr); |
294 | |
295 | const mach_msg_type_t addrCheck = { |
296 | /* msgt_name = */ 17, |
297 | /* msgt_size = */ 32, |
298 | /* msgt_number = */ 1, |
299 | /* msgt_inline = */ TRUE((boolean_t) 1), |
300 | /* msgt_longform = */ FALSE((boolean_t) 0), |
301 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
302 | /* msgt_unused = */ 0 |
303 | }; |
304 | |
305 | sock_user_t sock; |
306 | addr_t addr; |
307 | |
308 | #if TypeCheck1 |
309 | if ((In0P->Head.msgh_size != 32) || |
310 | !(In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
311 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
312 | #endif /* TypeCheck */ |
313 | |
314 | #if TypeCheck1 |
315 | if (BAD_TYPECHECK(&In0P->addrType, &addrCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->addrType); _c.t = *(&addrCheck); _t.w != _c.w; })) |
316 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
317 | #endif /* TypeCheck */ |
318 | |
319 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
320 | |
321 | addr = begin_using_addr_port(In0P->addr); |
322 | |
323 | OutP->RetCode = S_socket_connect(sock, addr); |
324 | end_using_addr_port(addr); |
325 | end_using_sock_user_port(sock); |
326 | } |
327 | |
328 | /* Routine socket_bind */ |
329 | mig_internalstatic void _Xsocket_bind |
330 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
331 | { |
332 | typedef struct { |
333 | mach_msg_header_t Head; |
334 | mach_msg_type_t addrType; |
335 | addr_port_t addr; |
336 | } Request; |
337 | |
338 | typedef struct { |
339 | mach_msg_header_t Head; |
340 | mach_msg_type_t RetCodeType; |
341 | kern_return_t RetCode; |
342 | } Reply; |
343 | |
344 | Request *In0P = (Request *) InHeadP; |
345 | Reply *OutP = (Reply *) OutHeadP; |
346 | mig_external kern_return_t S_socket_bind |
347 | (sock_user_t sock, addr_t addr); |
348 | |
349 | const mach_msg_type_t addrCheck = { |
350 | /* msgt_name = */ 17, |
351 | /* msgt_size = */ 32, |
352 | /* msgt_number = */ 1, |
353 | /* msgt_inline = */ TRUE((boolean_t) 1), |
354 | /* msgt_longform = */ FALSE((boolean_t) 0), |
355 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
356 | /* msgt_unused = */ 0 |
357 | }; |
358 | |
359 | sock_user_t sock; |
360 | addr_t addr; |
361 | |
362 | #if TypeCheck1 |
363 | if ((In0P->Head.msgh_size != 32) || |
364 | !(In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
365 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
366 | #endif /* TypeCheck */ |
367 | |
368 | #if TypeCheck1 |
369 | if (BAD_TYPECHECK(&In0P->addrType, &addrCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->addrType); _c.t = *(&addrCheck); _t.w != _c.w; })) |
370 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
371 | #endif /* TypeCheck */ |
372 | |
373 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
374 | |
375 | addr = begin_using_addr_port(In0P->addr); |
376 | |
377 | OutP->RetCode = S_socket_bind(sock, addr); |
378 | end_using_addr_port(addr); |
379 | end_using_sock_user_port(sock); |
380 | } |
381 | |
382 | /* Routine socket_name */ |
383 | mig_internalstatic void _Xsocket_name |
384 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
385 | { |
386 | typedef struct { |
387 | mach_msg_header_t Head; |
388 | } Request; |
389 | |
390 | typedef struct { |
391 | mach_msg_header_t Head; |
392 | mach_msg_type_t RetCodeType; |
393 | kern_return_t RetCode; |
394 | mach_msg_type_t addrType; |
395 | mach_port_t addr; |
396 | } Reply; |
397 | |
398 | Request *In0P = (Request *) InHeadP; |
399 | Reply *OutP = (Reply *) OutHeadP; |
400 | mig_external kern_return_t S_socket_name |
401 | (sock_user_t sock, mach_port_t *addr, mach_msg_type_name_t *addrPoly); |
402 | |
403 | boolean_t msgh_simple; |
404 | const mach_msg_type_t addrType = { |
405 | /* msgt_name = */ -1, |
406 | /* msgt_size = */ 32, |
407 | /* msgt_number = */ 1, |
408 | /* msgt_inline = */ TRUE((boolean_t) 1), |
409 | /* msgt_longform = */ FALSE((boolean_t) 0), |
410 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
411 | /* msgt_unused = */ 0 |
412 | }; |
413 | |
414 | sock_user_t sock; |
415 | mach_msg_type_name_t addrPoly; |
416 | |
417 | #if TypeCheck1 |
418 | if ((In0P->Head.msgh_size != 24) || |
419 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
420 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
421 | #endif /* TypeCheck */ |
422 | |
423 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
424 | |
425 | OutP->RetCode = S_socket_name(sock, &OutP->addr, &addrPoly); |
426 | end_using_sock_user_port(sock); |
427 | if (OutP->RetCode != KERN_SUCCESS0) |
428 | return; |
429 | |
430 | msgh_simple = TRUE((boolean_t) 1); |
431 | OutP->Head.msgh_size = 40; |
432 | |
433 | OutP->addrType = addrType; |
434 | |
435 | if (MACH_MSG_TYPE_PORT_ANY(addrPoly)(((addrPoly) >= 16) && ((addrPoly) <= 21))) |
436 | msgh_simple = FALSE((boolean_t) 0); |
437 | |
438 | OutP->addrType.msgt_name = addrPoly; |
439 | |
440 | if (!msgh_simple) |
441 | OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX0x80000000U; |
442 | } |
443 | |
444 | /* Routine socket_peername */ |
445 | mig_internalstatic void _Xsocket_peername |
446 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
447 | { |
448 | typedef struct { |
449 | mach_msg_header_t Head; |
450 | } Request; |
451 | |
452 | typedef struct { |
453 | mach_msg_header_t Head; |
454 | mach_msg_type_t RetCodeType; |
455 | kern_return_t RetCode; |
456 | mach_msg_type_t addrType; |
457 | mach_port_t addr; |
458 | } Reply; |
459 | |
460 | Request *In0P = (Request *) InHeadP; |
461 | Reply *OutP = (Reply *) OutHeadP; |
462 | mig_external kern_return_t S_socket_peername |
463 | (sock_user_t sock, mach_port_t *addr, mach_msg_type_name_t *addrPoly); |
464 | |
465 | boolean_t msgh_simple; |
466 | const mach_msg_type_t addrType = { |
467 | /* msgt_name = */ -1, |
468 | /* msgt_size = */ 32, |
469 | /* msgt_number = */ 1, |
470 | /* msgt_inline = */ TRUE((boolean_t) 1), |
471 | /* msgt_longform = */ FALSE((boolean_t) 0), |
472 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
473 | /* msgt_unused = */ 0 |
474 | }; |
475 | |
476 | sock_user_t sock; |
477 | mach_msg_type_name_t addrPoly; |
478 | |
479 | #if TypeCheck1 |
480 | if ((In0P->Head.msgh_size != 24) || |
481 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
482 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
483 | #endif /* TypeCheck */ |
484 | |
485 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
486 | |
487 | OutP->RetCode = S_socket_peername(sock, &OutP->addr, &addrPoly); |
488 | end_using_sock_user_port(sock); |
489 | if (OutP->RetCode != KERN_SUCCESS0) |
490 | return; |
491 | |
492 | msgh_simple = TRUE((boolean_t) 1); |
493 | OutP->Head.msgh_size = 40; |
494 | |
495 | OutP->addrType = addrType; |
496 | |
497 | if (MACH_MSG_TYPE_PORT_ANY(addrPoly)(((addrPoly) >= 16) && ((addrPoly) <= 21))) |
498 | msgh_simple = FALSE((boolean_t) 0); |
499 | |
500 | OutP->addrType.msgt_name = addrPoly; |
501 | |
502 | if (!msgh_simple) |
503 | OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX0x80000000U; |
504 | } |
505 | |
506 | /* Routine socket_connect2 */ |
507 | mig_internalstatic void _Xsocket_connect2 |
508 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
509 | { |
510 | typedef struct { |
511 | mach_msg_header_t Head; |
512 | mach_msg_type_t sock2Type; |
513 | socket_t sock2; |
514 | } Request; |
515 | |
516 | typedef struct { |
517 | mach_msg_header_t Head; |
518 | mach_msg_type_t RetCodeType; |
519 | kern_return_t RetCode; |
520 | } Reply; |
521 | |
522 | Request *In0P = (Request *) InHeadP; |
523 | Reply *OutP = (Reply *) OutHeadP; |
524 | mig_external kern_return_t S_socket_connect2 |
525 | (sock_user_t sock1, sock_user_t sock2); |
526 | |
527 | const mach_msg_type_t sock2Check = { |
528 | /* msgt_name = */ 17, |
529 | /* msgt_size = */ 32, |
530 | /* msgt_number = */ 1, |
531 | /* msgt_inline = */ TRUE((boolean_t) 1), |
532 | /* msgt_longform = */ FALSE((boolean_t) 0), |
533 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
534 | /* msgt_unused = */ 0 |
535 | }; |
536 | |
537 | sock_user_t sock1; |
538 | sock_user_t sock2; |
539 | |
540 | #if TypeCheck1 |
541 | if ((In0P->Head.msgh_size != 32) || |
542 | !(In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
543 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
544 | #endif /* TypeCheck */ |
545 | |
546 | #if TypeCheck1 |
547 | if (BAD_TYPECHECK(&In0P->sock2Type, &sock2Check)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->sock2Type); _c.t = *(&sock2Check); _t.w != _c.w; })) |
548 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
549 | #endif /* TypeCheck */ |
550 | |
551 | sock1 = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
552 | |
553 | sock2 = begin_using_sock_user_port(In0P->sock2); |
554 | |
555 | OutP->RetCode = S_socket_connect2(sock1, sock2); |
556 | end_using_sock_user_port(sock2); |
557 | end_using_sock_user_port(sock1); |
558 | } |
559 | |
560 | /* Routine socket_create_address */ |
561 | mig_internalstatic void _Xsocket_create_address |
562 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
563 | { |
564 | typedef struct { |
565 | mach_msg_header_t Head; |
566 | mach_msg_type_t sockaddr_typeType; |
567 | int sockaddr_type; |
568 | mach_msg_type_long_t sockaddrType; |
569 | char sockaddr[2048]; |
570 | } Request; |
571 | |
572 | typedef struct { |
573 | mach_msg_header_t Head; |
574 | mach_msg_type_t RetCodeType; |
575 | kern_return_t RetCode; |
576 | mach_msg_type_t addrType; |
577 | mach_port_t addr; |
578 | } Reply; |
579 | |
580 | Request *In0P = (Request *) InHeadP; |
581 | Reply *OutP = (Reply *) OutHeadP; |
582 | mig_external kern_return_t S_socket_create_address |
583 | (mach_port_t server, int sockaddr_type, data_t sockaddr, mach_msg_type_number_t sockaddrCnt, mach_port_t *addr, mach_msg_type_name_t *addrPoly); |
584 | |
585 | boolean_t msgh_simple; |
586 | unsigned int msgh_size; |
587 | |
588 | const mach_msg_type_t sockaddr_typeCheck = { |
589 | /* msgt_name = */ 2, |
590 | /* msgt_size = */ 32, |
591 | /* msgt_number = */ 1, |
592 | /* msgt_inline = */ TRUE((boolean_t) 1), |
593 | /* msgt_longform = */ FALSE((boolean_t) 0), |
594 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
595 | /* msgt_unused = */ 0 |
596 | }; |
597 | |
598 | const mach_msg_type_t addrType = { |
599 | /* msgt_name = */ -1, |
600 | /* msgt_size = */ 32, |
601 | /* msgt_number = */ 1, |
602 | /* msgt_inline = */ TRUE((boolean_t) 1), |
603 | /* msgt_longform = */ FALSE((boolean_t) 0), |
604 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
605 | /* msgt_unused = */ 0 |
606 | }; |
607 | |
608 | mach_msg_type_name_t addrPoly; |
609 | |
610 | #if TypeCheck1 |
611 | msgh_size = In0P->Head.msgh_size; |
612 | msgh_simple = !(In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U); |
613 | if ((msgh_size < 44)) |
614 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
615 | #endif /* TypeCheck */ |
616 | |
617 | #if TypeCheck1 |
618 | if (BAD_TYPECHECK(&In0P->sockaddr_typeType, &sockaddr_typeCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->sockaddr_typeType); _c.t = *(&sockaddr_typeCheck ); _t.w != _c.w; })) |
619 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
620 | #endif /* TypeCheck */ |
621 | |
622 | #if TypeCheck1 |
623 | if ((In0P->sockaddrType.msgtl_header.msgt_longform != TRUE((boolean_t) 1)) || |
624 | (In0P->sockaddrType.msgtl_name != 8) || |
625 | (In0P->sockaddrType.msgtl_size != 8)) |
626 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
627 | #endif /* TypeCheck */ |
628 | |
629 | #if TypeCheck1 |
630 | if (msgh_size != 44 + ((In0P->sockaddrType.msgtl_header.msgt_inline) ? (In0P->sockaddrType.msgtl_number + 3) & ~3 : sizeof(char *))) |
631 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
632 | #endif /* TypeCheck */ |
633 | |
634 | OutP->RetCode = S_socket_create_address(In0P->Head.msgh_request_portmsgh_local_port, In0P->sockaddr_type, (In0P->sockaddrType.msgtl_header.msgt_inline) ? In0P->sockaddr : *((char **)In0P->sockaddr), In0P->sockaddrType.msgtl_number, &OutP->addr, &addrPoly); |
635 | if (OutP->RetCode == KERN_SUCCESS0) |
636 | if (!In0P->sockaddrType.msgtl_header.msgt_inline) |
637 | __mig_deallocate(* (vm_offset_t *) In0P->sockaddr, In0P->sockaddrType.msgtl_number); |
638 | if (OutP->RetCode != KERN_SUCCESS0) |
639 | return; |
640 | |
641 | msgh_simple = TRUE((boolean_t) 1); |
642 | OutP->Head.msgh_size = 40; |
643 | |
644 | OutP->addrType = addrType; |
645 | |
646 | if (MACH_MSG_TYPE_PORT_ANY(addrPoly)(((addrPoly) >= 16) && ((addrPoly) <= 21))) |
647 | msgh_simple = FALSE((boolean_t) 0); |
648 | |
649 | OutP->addrType.msgt_name = addrPoly; |
650 | |
651 | if (!msgh_simple) |
652 | OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX0x80000000U; |
653 | } |
654 | |
655 | /* Routine socket_fabricate_address */ |
656 | mig_internalstatic void _Xsocket_fabricate_address |
657 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
658 | { |
659 | typedef struct { |
660 | mach_msg_header_t Head; |
661 | mach_msg_type_t sockaddr_typeType; |
662 | int sockaddr_type; |
663 | } Request; |
664 | |
665 | typedef struct { |
666 | mach_msg_header_t Head; |
667 | mach_msg_type_t RetCodeType; |
668 | kern_return_t RetCode; |
669 | mach_msg_type_t addrType; |
670 | mach_port_t addr; |
671 | } Reply; |
672 | |
673 | Request *In0P = (Request *) InHeadP; |
674 | Reply *OutP = (Reply *) OutHeadP; |
675 | mig_external kern_return_t S_socket_fabricate_address |
676 | (mach_port_t server, int sockaddr_type, mach_port_t *addr, mach_msg_type_name_t *addrPoly); |
677 | |
678 | boolean_t msgh_simple; |
679 | const mach_msg_type_t sockaddr_typeCheck = { |
680 | /* msgt_name = */ 2, |
681 | /* msgt_size = */ 32, |
682 | /* msgt_number = */ 1, |
683 | /* msgt_inline = */ TRUE((boolean_t) 1), |
684 | /* msgt_longform = */ FALSE((boolean_t) 0), |
685 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
686 | /* msgt_unused = */ 0 |
687 | }; |
688 | |
689 | const mach_msg_type_t addrType = { |
690 | /* msgt_name = */ -1, |
691 | /* msgt_size = */ 32, |
692 | /* msgt_number = */ 1, |
693 | /* msgt_inline = */ TRUE((boolean_t) 1), |
694 | /* msgt_longform = */ FALSE((boolean_t) 0), |
695 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
696 | /* msgt_unused = */ 0 |
697 | }; |
698 | |
699 | mach_msg_type_name_t addrPoly; |
700 | |
701 | #if TypeCheck1 |
702 | if ((In0P->Head.msgh_size != 32) || |
703 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
704 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
705 | #endif /* TypeCheck */ |
706 | |
707 | #if TypeCheck1 |
708 | if (BAD_TYPECHECK(&In0P->sockaddr_typeType, &sockaddr_typeCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->sockaddr_typeType); _c.t = *(&sockaddr_typeCheck ); _t.w != _c.w; })) |
709 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
710 | #endif /* TypeCheck */ |
711 | |
712 | OutP->RetCode = S_socket_fabricate_address(In0P->Head.msgh_request_portmsgh_local_port, In0P->sockaddr_type, &OutP->addr, &addrPoly); |
713 | if (OutP->RetCode != KERN_SUCCESS0) |
714 | return; |
715 | |
716 | msgh_simple = TRUE((boolean_t) 1); |
717 | OutP->Head.msgh_size = 40; |
718 | |
719 | OutP->addrType = addrType; |
720 | |
721 | if (MACH_MSG_TYPE_PORT_ANY(addrPoly)(((addrPoly) >= 16) && ((addrPoly) <= 21))) |
722 | msgh_simple = FALSE((boolean_t) 0); |
723 | |
724 | OutP->addrType.msgt_name = addrPoly; |
725 | |
726 | if (!msgh_simple) |
727 | OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX0x80000000U; |
728 | } |
729 | |
730 | /* Routine socket_whatis_address */ |
731 | mig_internalstatic void _Xsocket_whatis_address |
732 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
733 | { |
734 | typedef struct { |
735 | mach_msg_header_t Head; |
736 | } Request; |
737 | |
738 | typedef struct { |
739 | mach_msg_header_t Head; |
740 | mach_msg_type_t RetCodeType; |
741 | kern_return_t RetCode; |
742 | mach_msg_type_t sockaddr_typeType; |
743 | int sockaddr_type; |
744 | mach_msg_type_long_t sockaddrType; |
745 | char sockaddr[2048]; |
746 | } Reply; |
747 | |
748 | Request *In0P = (Request *) InHeadP; |
749 | Reply *OutP = (Reply *) OutHeadP; |
750 | mig_external kern_return_t S_socket_whatis_address |
751 | (addr_t addr, int *sockaddr_type, data_t *sockaddr, mach_msg_type_number_t *sockaddrCnt); |
752 | |
753 | boolean_t msgh_simple; |
754 | const mach_msg_type_t sockaddr_typeType = { |
755 | /* msgt_name = */ 2, |
756 | /* msgt_size = */ 32, |
757 | /* msgt_number = */ 1, |
758 | /* msgt_inline = */ TRUE((boolean_t) 1), |
759 | /* msgt_longform = */ FALSE((boolean_t) 0), |
760 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
761 | /* msgt_unused = */ 0 |
762 | }; |
763 | |
764 | const mach_msg_type_long_t sockaddrType = { |
765 | { |
766 | /* msgt_name = */ 0, |
767 | /* msgt_size = */ 0, |
768 | /* msgt_number = */ 0, |
769 | /* msgt_inline = */ TRUE((boolean_t) 1), |
770 | /* msgt_longform = */ TRUE((boolean_t) 1), |
771 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
772 | /* msgt_unused = */ 0 |
773 | }, |
774 | /* msgtl_name = */ 8, |
775 | /* msgtl_size = */ 8, |
776 | /* msgtl_number = */ 2048, |
777 | }; |
778 | |
779 | addr_t addr; |
780 | mach_msg_type_number_t sockaddrCnt; |
781 | |
782 | char *sockaddrP; |
783 | |
784 | #if TypeCheck1 |
785 | if ((In0P->Head.msgh_size != 24) || |
786 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
787 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
788 | #endif /* TypeCheck */ |
789 | |
790 | addr = begin_using_addr_port(In0P->Head.msgh_request_portmsgh_local_port); |
791 | |
792 | sockaddrP = OutP->sockaddr; |
793 | sockaddrCnt = 2048; |
794 | |
795 | OutP->RetCode = S_socket_whatis_address(addr, &OutP->sockaddr_type, &sockaddrP, &sockaddrCnt); |
796 | end_using_addr_port(addr); |
797 | if (OutP->RetCode != KERN_SUCCESS0) |
798 | return; |
799 | |
800 | msgh_simple = TRUE((boolean_t) 1); |
801 | |
802 | OutP->sockaddr_typeType = sockaddr_typeType; |
803 | |
804 | OutP->sockaddrType = sockaddrType; |
805 | if (sockaddrP != OutP->sockaddr) { |
806 | OutP->sockaddrType.msgtl_header.msgt_inline = FALSE((boolean_t) 0); |
807 | OutP->sockaddrType.msgtl_header.msgt_deallocate = TRUE((boolean_t) 1); |
808 | *((char **)OutP->sockaddr) = sockaddrP; |
809 | msgh_simple = FALSE((boolean_t) 0); |
810 | } |
811 | |
812 | OutP->sockaddrType.msgtl_number = sockaddrCnt; |
813 | OutP->Head.msgh_size = 52 + ((OutP->sockaddrType.msgtl_header.msgt_inline) ? (sockaddrCnt + 3) & ~3 : sizeof(char *)); |
814 | |
815 | if (!msgh_simple) |
816 | OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX0x80000000U; |
817 | } |
818 | |
819 | /* Routine socket_shutdown */ |
820 | mig_internalstatic void _Xsocket_shutdown |
821 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
822 | { |
823 | typedef struct { |
824 | mach_msg_header_t Head; |
825 | mach_msg_type_t directionType; |
826 | int direction; |
827 | } Request; |
828 | |
829 | typedef struct { |
830 | mach_msg_header_t Head; |
831 | mach_msg_type_t RetCodeType; |
832 | kern_return_t RetCode; |
833 | } Reply; |
834 | |
835 | Request *In0P = (Request *) InHeadP; |
836 | Reply *OutP = (Reply *) OutHeadP; |
837 | mig_external kern_return_t S_socket_shutdown |
838 | (sock_user_t sock, int direction); |
839 | |
840 | const mach_msg_type_t directionCheck = { |
841 | /* msgt_name = */ 2, |
842 | /* msgt_size = */ 32, |
843 | /* msgt_number = */ 1, |
844 | /* msgt_inline = */ TRUE((boolean_t) 1), |
845 | /* msgt_longform = */ FALSE((boolean_t) 0), |
846 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
847 | /* msgt_unused = */ 0 |
848 | }; |
849 | |
850 | sock_user_t sock; |
851 | |
852 | #if TypeCheck1 |
853 | if ((In0P->Head.msgh_size != 32) || |
854 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
855 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
856 | #endif /* TypeCheck */ |
857 | |
858 | #if TypeCheck1 |
859 | if (BAD_TYPECHECK(&In0P->directionType, &directionCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->directionType); _c.t = *(&directionCheck ); _t.w != _c.w; })) |
860 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
861 | #endif /* TypeCheck */ |
862 | |
863 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
864 | |
865 | OutP->RetCode = S_socket_shutdown(sock, In0P->direction); |
866 | end_using_sock_user_port(sock); |
867 | } |
868 | |
869 | /* Routine socket_getopt */ |
870 | mig_internalstatic void _Xsocket_getopt |
871 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
872 | { |
873 | typedef struct { |
874 | mach_msg_header_t Head; |
875 | mach_msg_type_t levelType; |
876 | int level; |
877 | mach_msg_type_t optionType; |
878 | int option; |
879 | } Request; |
880 | |
881 | typedef struct { |
882 | mach_msg_header_t Head; |
883 | mach_msg_type_t RetCodeType; |
884 | kern_return_t RetCode; |
885 | mach_msg_type_long_t optvalType; |
886 | char optval[2048]; |
887 | } Reply; |
888 | |
889 | Request *In0P = (Request *) InHeadP; |
890 | Reply *OutP = (Reply *) OutHeadP; |
891 | mig_external kern_return_t S_socket_getopt |
892 | (sock_user_t sock, int level, int option, data_t *optval, mach_msg_type_number_t *optvalCnt); |
893 | |
894 | boolean_t msgh_simple; |
895 | const mach_msg_type_t levelCheck = { |
896 | /* msgt_name = */ 2, |
897 | /* msgt_size = */ 32, |
898 | /* msgt_number = */ 1, |
899 | /* msgt_inline = */ TRUE((boolean_t) 1), |
900 | /* msgt_longform = */ FALSE((boolean_t) 0), |
901 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
902 | /* msgt_unused = */ 0 |
903 | }; |
904 | |
905 | const mach_msg_type_t optionCheck = { |
906 | /* msgt_name = */ 2, |
907 | /* msgt_size = */ 32, |
908 | /* msgt_number = */ 1, |
909 | /* msgt_inline = */ TRUE((boolean_t) 1), |
910 | /* msgt_longform = */ FALSE((boolean_t) 0), |
911 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
912 | /* msgt_unused = */ 0 |
913 | }; |
914 | |
915 | const mach_msg_type_long_t optvalType = { |
916 | { |
917 | /* msgt_name = */ 0, |
918 | /* msgt_size = */ 0, |
919 | /* msgt_number = */ 0, |
920 | /* msgt_inline = */ TRUE((boolean_t) 1), |
921 | /* msgt_longform = */ TRUE((boolean_t) 1), |
922 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
923 | /* msgt_unused = */ 0 |
924 | }, |
925 | /* msgtl_name = */ 8, |
926 | /* msgtl_size = */ 8, |
927 | /* msgtl_number = */ 2048, |
928 | }; |
929 | |
930 | sock_user_t sock; |
931 | mach_msg_type_number_t optvalCnt; |
932 | |
933 | char *optvalP; |
934 | |
935 | #if TypeCheck1 |
936 | if ((In0P->Head.msgh_size != 40) || |
937 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
938 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
939 | #endif /* TypeCheck */ |
940 | |
941 | #if TypeCheck1 |
942 | if (BAD_TYPECHECK(&In0P->levelType, &levelCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->levelType); _c.t = *(&levelCheck); _t.w != _c.w; })) |
943 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
944 | #endif /* TypeCheck */ |
945 | |
946 | #if TypeCheck1 |
947 | if (BAD_TYPECHECK(&In0P->optionType, &optionCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->optionType); _c.t = *(&optionCheck); _t. w != _c.w; })) |
948 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
949 | #endif /* TypeCheck */ |
950 | |
951 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
952 | |
953 | optvalP = OutP->optval; |
954 | optvalCnt = 2048; |
955 | |
956 | OutP->RetCode = S_socket_getopt(sock, In0P->level, In0P->option, &optvalP, &optvalCnt); |
957 | end_using_sock_user_port(sock); |
958 | if (OutP->RetCode != KERN_SUCCESS0) |
959 | return; |
960 | |
961 | msgh_simple = TRUE((boolean_t) 1); |
962 | |
963 | OutP->optvalType = optvalType; |
964 | if (optvalP != OutP->optval) { |
965 | OutP->optvalType.msgtl_header.msgt_inline = FALSE((boolean_t) 0); |
966 | OutP->optvalType.msgtl_header.msgt_deallocate = TRUE((boolean_t) 1); |
967 | *((char **)OutP->optval) = optvalP; |
968 | msgh_simple = FALSE((boolean_t) 0); |
969 | } |
970 | |
971 | OutP->optvalType.msgtl_number = optvalCnt; |
972 | OutP->Head.msgh_size = 44 + ((OutP->optvalType.msgtl_header.msgt_inline) ? (optvalCnt + 3) & ~3 : sizeof(char *)); |
973 | |
974 | if (!msgh_simple) |
975 | OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX0x80000000U; |
976 | } |
977 | |
978 | /* Routine socket_setopt */ |
979 | mig_internalstatic void _Xsocket_setopt |
980 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
981 | { |
982 | typedef struct { |
983 | mach_msg_header_t Head; |
984 | mach_msg_type_t levelType; |
985 | int level; |
986 | mach_msg_type_t optionType; |
987 | int option; |
988 | mach_msg_type_long_t optvalType; |
989 | char optval[2048]; |
990 | } Request; |
991 | |
992 | typedef struct { |
993 | mach_msg_header_t Head; |
994 | mach_msg_type_t RetCodeType; |
995 | kern_return_t RetCode; |
996 | } Reply; |
997 | |
998 | Request *In0P = (Request *) InHeadP; |
999 | Reply *OutP = (Reply *) OutHeadP; |
1000 | mig_external kern_return_t S_socket_setopt |
1001 | (sock_user_t sock, int level, int option, data_t optval, mach_msg_type_number_t optvalCnt); |
1002 | |
1003 | #if TypeCheck1 |
1004 | boolean_t msgh_simple; |
1005 | #endif /* TypeCheck */ |
1006 | |
1007 | unsigned int msgh_size; |
1008 | |
1009 | const mach_msg_type_t levelCheck = { |
1010 | /* msgt_name = */ 2, |
1011 | /* msgt_size = */ 32, |
1012 | /* msgt_number = */ 1, |
1013 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1014 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1015 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1016 | /* msgt_unused = */ 0 |
1017 | }; |
1018 | |
1019 | const mach_msg_type_t optionCheck = { |
1020 | /* msgt_name = */ 2, |
1021 | /* msgt_size = */ 32, |
1022 | /* msgt_number = */ 1, |
1023 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1024 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1025 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1026 | /* msgt_unused = */ 0 |
1027 | }; |
1028 | |
1029 | sock_user_t sock; |
1030 | |
1031 | #if TypeCheck1 |
1032 | msgh_size = In0P->Head.msgh_size; |
1033 | msgh_simple = !(In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U); |
Value stored to 'msgh_simple' is never read | |
1034 | if ((msgh_size < 52)) |
1035 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1036 | #endif /* TypeCheck */ |
1037 | |
1038 | #if TypeCheck1 |
1039 | if (BAD_TYPECHECK(&In0P->levelType, &levelCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->levelType); _c.t = *(&levelCheck); _t.w != _c.w; })) |
1040 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1041 | #endif /* TypeCheck */ |
1042 | |
1043 | #if TypeCheck1 |
1044 | if (BAD_TYPECHECK(&In0P->optionType, &optionCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->optionType); _c.t = *(&optionCheck); _t. w != _c.w; })) |
1045 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1046 | #endif /* TypeCheck */ |
1047 | |
1048 | #if TypeCheck1 |
1049 | if ((In0P->optvalType.msgtl_header.msgt_longform != TRUE((boolean_t) 1)) || |
1050 | (In0P->optvalType.msgtl_name != 8) || |
1051 | (In0P->optvalType.msgtl_size != 8)) |
1052 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1053 | #endif /* TypeCheck */ |
1054 | |
1055 | #if TypeCheck1 |
1056 | if (msgh_size != 52 + ((In0P->optvalType.msgtl_header.msgt_inline) ? (In0P->optvalType.msgtl_number + 3) & ~3 : sizeof(char *))) |
1057 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1058 | #endif /* TypeCheck */ |
1059 | |
1060 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
1061 | |
1062 | OutP->RetCode = S_socket_setopt(sock, In0P->level, In0P->option, (In0P->optvalType.msgtl_header.msgt_inline) ? In0P->optval : *((char **)In0P->optval), In0P->optvalType.msgtl_number); |
1063 | if (OutP->RetCode == KERN_SUCCESS0) |
1064 | if (!In0P->optvalType.msgtl_header.msgt_inline) |
1065 | __mig_deallocate(* (vm_offset_t *) In0P->optval, In0P->optvalType.msgtl_number); |
1066 | end_using_sock_user_port(sock); |
1067 | } |
1068 | |
1069 | /* Routine socket_send */ |
1070 | mig_internalstatic void _Xsocket_send |
1071 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
1072 | { |
1073 | typedef struct { |
1074 | mach_msg_header_t Head; |
1075 | mach_msg_type_t addrType; |
1076 | addr_port_t addr; |
1077 | mach_msg_type_t flagsType; |
1078 | int flags; |
1079 | mach_msg_type_long_t dataType; |
1080 | char data[2048]; |
1081 | mach_msg_type_long_t portsType; |
1082 | mach_port_t ports[512]; |
1083 | mach_msg_type_long_t controlType; |
1084 | char control[2048]; |
1085 | } Request; |
1086 | |
1087 | typedef struct { |
1088 | mach_msg_header_t Head; |
1089 | mach_msg_type_t RetCodeType; |
1090 | kern_return_t RetCode; |
1091 | mach_msg_type_t amountType; |
1092 | vm_size_t amount; |
1093 | } Reply; |
1094 | |
1095 | Request *In0P = (Request *) InHeadP; |
1096 | Request *In1P; |
1097 | Request *In2P; |
1098 | Reply *OutP = (Reply *) OutHeadP; |
1099 | mig_external kern_return_t S_socket_send |
1100 | (sock_user_t sock, addr_t addr, int flags, data_t data, mach_msg_type_number_t dataCnt, portarray_t ports, mach_msg_type_number_t portsCnt, data_t control, mach_msg_type_number_t controlCnt, vm_size_t *amount); |
1101 | |
1102 | unsigned int msgh_size; |
1103 | unsigned int msgh_size_delta; |
1104 | |
1105 | const mach_msg_type_t addrCheck = { |
1106 | /* msgt_name = */ 17, |
1107 | /* msgt_size = */ 32, |
1108 | /* msgt_number = */ 1, |
1109 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1110 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1111 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1112 | /* msgt_unused = */ 0 |
1113 | }; |
1114 | |
1115 | const mach_msg_type_t flagsCheck = { |
1116 | /* msgt_name = */ 2, |
1117 | /* msgt_size = */ 32, |
1118 | /* msgt_number = */ 1, |
1119 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1120 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1121 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1122 | /* msgt_unused = */ 0 |
1123 | }; |
1124 | |
1125 | const mach_msg_type_t amountType = { |
1126 | /* msgt_name = */ 2, |
1127 | /* msgt_size = */ 32, |
1128 | /* msgt_number = */ 1, |
1129 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1130 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1131 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1132 | /* msgt_unused = */ 0 |
1133 | }; |
1134 | |
1135 | sock_user_t sock; |
1136 | addr_t addr; |
1137 | |
1138 | #if TypeCheck1 |
1139 | msgh_size = In0P->Head.msgh_size; |
1140 | if ((msgh_size < 76) || |
1141 | !(In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
1142 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1143 | #endif /* TypeCheck */ |
1144 | |
1145 | #if TypeCheck1 |
1146 | if (BAD_TYPECHECK(&In0P->addrType, &addrCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->addrType); _c.t = *(&addrCheck); _t.w != _c.w; })) |
1147 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1148 | #endif /* TypeCheck */ |
1149 | |
1150 | #if TypeCheck1 |
1151 | if (BAD_TYPECHECK(&In0P->flagsType, &flagsCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->flagsType); _c.t = *(&flagsCheck); _t.w != _c.w; })) |
1152 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1153 | #endif /* TypeCheck */ |
1154 | |
1155 | #if TypeCheck1 |
1156 | if ((In0P->dataType.msgtl_header.msgt_longform != TRUE((boolean_t) 1)) || |
1157 | (In0P->dataType.msgtl_name != 8) || |
1158 | (In0P->dataType.msgtl_size != 8)) |
1159 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1160 | #endif /* TypeCheck */ |
1161 | |
1162 | msgh_size_delta = (In0P->dataType.msgtl_header.msgt_inline) ? (In0P->dataType.msgtl_number + 3) & ~3 : sizeof(char *); |
1163 | #if TypeCheck1 |
1164 | if (msgh_size < 76 + msgh_size_delta) |
1165 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1166 | msgh_size -= msgh_size_delta; |
1167 | #endif /* TypeCheck */ |
1168 | |
1169 | In1P = (Request *) ((char *) In0P + msgh_size_delta - 2048); |
1170 | |
1171 | #if TypeCheck1 |
1172 | if ((In1P->portsType.msgtl_header.msgt_longform != TRUE((boolean_t) 1)) || |
1173 | (In1P->portsType.msgtl_name != 17) || |
1174 | (In1P->portsType.msgtl_size != 32)) |
1175 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1176 | #endif /* TypeCheck */ |
1177 | |
1178 | msgh_size_delta = (In1P->portsType.msgtl_header.msgt_inline) ? 4 * In1P->portsType.msgtl_number : sizeof(mach_port_t *); |
1179 | #if TypeCheck1 |
1180 | if (msgh_size < 76 + msgh_size_delta) |
1181 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1182 | msgh_size -= msgh_size_delta; |
1183 | #endif /* TypeCheck */ |
1184 | |
1185 | In2P = (Request *) ((char *) In1P + msgh_size_delta - 2048); |
1186 | |
1187 | #if TypeCheck1 |
1188 | if ((In2P->controlType.msgtl_header.msgt_longform != TRUE((boolean_t) 1)) || |
1189 | (In2P->controlType.msgtl_name != 8) || |
1190 | (In2P->controlType.msgtl_size != 8)) |
1191 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1192 | #endif /* TypeCheck */ |
1193 | |
1194 | #if TypeCheck1 |
1195 | if (msgh_size != 76 + ((In2P->controlType.msgtl_header.msgt_inline) ? (In2P->controlType.msgtl_number + 3) & ~3 : sizeof(char *))) |
1196 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1197 | #endif /* TypeCheck */ |
1198 | |
1199 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
1200 | |
1201 | addr = begin_using_addr_port(In0P->addr); |
1202 | |
1203 | OutP->RetCode = S_socket_send(sock, addr, In0P->flags, (In0P->dataType.msgtl_header.msgt_inline) ? In0P->data : *((char **)In0P->data), In0P->dataType.msgtl_number, (In1P->portsType.msgtl_header.msgt_inline) ? In1P->ports : *((mach_port_t **)In1P->ports), In1P->portsType.msgtl_number, (In2P->controlType.msgtl_header.msgt_inline) ? In2P->control : *((char **)In2P->control), In2P->controlType.msgtl_number, &OutP->amount); |
1204 | if (OutP->RetCode == KERN_SUCCESS0) |
1205 | if (!In2P->controlType.msgtl_header.msgt_inline) |
1206 | __mig_deallocate(* (vm_offset_t *) In2P->control, In2P->controlType.msgtl_number); |
1207 | if (OutP->RetCode == KERN_SUCCESS0) |
1208 | if (!In1P->portsType.msgtl_header.msgt_inline) |
1209 | __mig_deallocate(* (vm_offset_t *) In1P->ports, 4 * In1P->portsType.msgtl_number); |
1210 | if (OutP->RetCode == KERN_SUCCESS0) |
1211 | if (!In0P->dataType.msgtl_header.msgt_inline) |
1212 | __mig_deallocate(* (vm_offset_t *) In0P->data, In0P->dataType.msgtl_number); |
1213 | end_using_addr_port(addr); |
1214 | end_using_sock_user_port(sock); |
1215 | if (OutP->RetCode != KERN_SUCCESS0) |
1216 | return; |
1217 | |
1218 | OutP->Head.msgh_size = 40; |
1219 | |
1220 | OutP->amountType = amountType; |
1221 | } |
1222 | |
1223 | /* Routine socket_recv */ |
1224 | mig_internalstatic void _Xsocket_recv |
1225 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
1226 | { |
1227 | typedef struct { |
1228 | mach_msg_header_t Head; |
1229 | mach_msg_type_t flagsType; |
1230 | int flags; |
1231 | mach_msg_type_t amountType; |
1232 | vm_size_t amount; |
1233 | } Request; |
1234 | |
1235 | typedef struct { |
1236 | mach_msg_header_t Head; |
1237 | mach_msg_type_t RetCodeType; |
1238 | kern_return_t RetCode; |
1239 | mach_msg_type_t addrType; |
1240 | mach_port_t addr; |
1241 | mach_msg_type_long_t dataType; |
1242 | char data[2048]; |
1243 | mach_msg_type_long_t portsType; |
1244 | mach_port_t ports[512]; |
1245 | mach_msg_type_long_t controlType; |
1246 | char control[2048]; |
1247 | mach_msg_type_t outflagsType; |
1248 | int outflags; |
1249 | } Reply; |
1250 | |
1251 | Request *In0P = (Request *) InHeadP; |
1252 | Reply *OutP = (Reply *) OutHeadP; |
1253 | mig_external kern_return_t S_socket_recv |
1254 | (sock_user_t sock, mach_port_t *addr, mach_msg_type_name_t *addrPoly, int flags, data_t *data, mach_msg_type_number_t *dataCnt, portarray_t *ports, mach_msg_type_name_t *portsPoly, mach_msg_type_number_t *portsCnt, data_t *control, mach_msg_type_number_t *controlCnt, int *outflags, vm_size_t amount); |
1255 | |
1256 | boolean_t msgh_simple; |
1257 | unsigned int msgh_size; |
1258 | unsigned int msgh_size_delta; |
1259 | |
1260 | const mach_msg_type_t flagsCheck = { |
1261 | /* msgt_name = */ 2, |
1262 | /* msgt_size = */ 32, |
1263 | /* msgt_number = */ 1, |
1264 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1265 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1266 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1267 | /* msgt_unused = */ 0 |
1268 | }; |
1269 | |
1270 | const mach_msg_type_t amountCheck = { |
1271 | /* msgt_name = */ 2, |
1272 | /* msgt_size = */ 32, |
1273 | /* msgt_number = */ 1, |
1274 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1275 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1276 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1277 | /* msgt_unused = */ 0 |
1278 | }; |
1279 | |
1280 | const mach_msg_type_t addrType = { |
1281 | /* msgt_name = */ -1, |
1282 | /* msgt_size = */ 32, |
1283 | /* msgt_number = */ 1, |
1284 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1285 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1286 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1287 | /* msgt_unused = */ 0 |
1288 | }; |
1289 | |
1290 | const mach_msg_type_long_t dataType = { |
1291 | { |
1292 | /* msgt_name = */ 0, |
1293 | /* msgt_size = */ 0, |
1294 | /* msgt_number = */ 0, |
1295 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1296 | /* msgt_longform = */ TRUE((boolean_t) 1), |
1297 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1298 | /* msgt_unused = */ 0 |
1299 | }, |
1300 | /* msgtl_name = */ 8, |
1301 | /* msgtl_size = */ 8, |
1302 | /* msgtl_number = */ 2048, |
1303 | }; |
1304 | |
1305 | const mach_msg_type_long_t portsType = { |
1306 | { |
1307 | /* msgt_name = */ 0, |
1308 | /* msgt_size = */ 0, |
1309 | /* msgt_number = */ 0, |
1310 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1311 | /* msgt_longform = */ TRUE((boolean_t) 1), |
1312 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1313 | /* msgt_unused = */ 0 |
1314 | }, |
1315 | /* msgtl_name = */ -1, |
1316 | /* msgtl_size = */ 32, |
1317 | /* msgtl_number = */ 512, |
1318 | }; |
1319 | |
1320 | const mach_msg_type_long_t controlType = { |
1321 | { |
1322 | /* msgt_name = */ 0, |
1323 | /* msgt_size = */ 0, |
1324 | /* msgt_number = */ 0, |
1325 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1326 | /* msgt_longform = */ TRUE((boolean_t) 1), |
1327 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1328 | /* msgt_unused = */ 0 |
1329 | }, |
1330 | /* msgtl_name = */ 8, |
1331 | /* msgtl_size = */ 8, |
1332 | /* msgtl_number = */ 2048, |
1333 | }; |
1334 | |
1335 | const mach_msg_type_t outflagsType = { |
1336 | /* msgt_name = */ 2, |
1337 | /* msgt_size = */ 32, |
1338 | /* msgt_number = */ 1, |
1339 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1340 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1341 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1342 | /* msgt_unused = */ 0 |
1343 | }; |
1344 | |
1345 | sock_user_t sock; |
1346 | mach_msg_type_name_t addrPoly; |
1347 | mach_msg_type_number_t dataCnt; |
1348 | mach_port_t ports[512]; |
1349 | mach_msg_type_name_t portsPoly; |
1350 | mach_msg_type_number_t portsCnt; |
1351 | char control[2048]; |
1352 | mach_msg_type_number_t controlCnt; |
1353 | int outflags; |
1354 | |
1355 | char *dataP; |
1356 | mach_port_t *portsP; |
1357 | char *controlP; |
1358 | |
1359 | #if TypeCheck1 |
1360 | if ((In0P->Head.msgh_size != 40) || |
1361 | (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX0x80000000U)) |
1362 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1363 | #endif /* TypeCheck */ |
1364 | |
1365 | #if TypeCheck1 |
1366 | if (BAD_TYPECHECK(&In0P->flagsType, &flagsCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->flagsType); _c.t = *(&flagsCheck); _t.w != _c.w; })) |
1367 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1368 | #endif /* TypeCheck */ |
1369 | |
1370 | #if TypeCheck1 |
1371 | if (BAD_TYPECHECK(&In0P->amountType, &amountCheck)({ union { mach_msg_type_t t; unsigned32_t w; } _t, _c; _t.t = *(&In0P->amountType); _c.t = *(&amountCheck); _t. w != _c.w; })) |
1372 | { OutP->RetCode = MIG_BAD_ARGUMENTS-304; return; } |
1373 | #endif /* TypeCheck */ |
1374 | |
1375 | sock = begin_using_sock_user_port(In0P->Head.msgh_request_portmsgh_local_port); |
1376 | |
1377 | dataP = OutP->data; |
1378 | dataCnt = 2048; |
1379 | |
1380 | portsP = ports; |
1381 | portsCnt = 512; |
1382 | |
1383 | controlP = control; |
1384 | controlCnt = 2048; |
1385 | |
1386 | OutP->RetCode = S_socket_recv(sock, &OutP->addr, &addrPoly, In0P->flags, &dataP, &dataCnt, &portsP, &portsPoly, &portsCnt, &controlP, &controlCnt, &outflags, In0P->amount); |
1387 | end_using_sock_user_port(sock); |
1388 | if (OutP->RetCode != KERN_SUCCESS0) |
1389 | return; |
1390 | |
1391 | msgh_simple = TRUE((boolean_t) 1); |
1392 | |
1393 | OutP->addrType = addrType; |
1394 | |
1395 | if (MACH_MSG_TYPE_PORT_ANY(addrPoly)(((addrPoly) >= 16) && ((addrPoly) <= 21))) |
1396 | msgh_simple = FALSE((boolean_t) 0); |
1397 | |
1398 | OutP->addrType.msgt_name = addrPoly; |
1399 | |
1400 | OutP->dataType = dataType; |
1401 | if (dataP != OutP->data) { |
1402 | OutP->dataType.msgtl_header.msgt_inline = FALSE((boolean_t) 0); |
1403 | OutP->dataType.msgtl_header.msgt_deallocate = TRUE((boolean_t) 1); |
1404 | *((char **)OutP->data) = dataP; |
1405 | msgh_simple = FALSE((boolean_t) 0); |
1406 | } |
1407 | |
1408 | OutP->dataType.msgtl_number = dataCnt; |
1409 | msgh_size_delta = (OutP->dataType.msgtl_header.msgt_inline) ? (dataCnt + 3) & ~3 : sizeof(char *); |
1410 | msgh_size = 84 + msgh_size_delta; |
1411 | OutP = (Reply *) ((char *) OutP + msgh_size_delta - 2048); |
1412 | |
1413 | OutP->portsType = portsType; |
1414 | |
1415 | if (portsP != ports) { |
1416 | OutP->portsType.msgtl_header.msgt_inline = FALSE((boolean_t) 0); |
1417 | OutP->portsType.msgtl_header.msgt_deallocate = TRUE((boolean_t) 1); |
1418 | *((mach_port_t **)OutP->ports) = portsP; |
1419 | msgh_simple = FALSE((boolean_t) 0); |
1420 | } |
1421 | else { |
1422 | memcpy(OutP->ports, ports, 4 * portsCnt); |
1423 | } |
1424 | |
1425 | if (MACH_MSG_TYPE_PORT_ANY(portsPoly)(((portsPoly) >= 16) && ((portsPoly) <= 21))) |
1426 | msgh_simple = FALSE((boolean_t) 0); |
1427 | |
1428 | OutP->portsType.msgtl_name = portsPoly; |
1429 | |
1430 | OutP->portsType.msgtl_number = portsCnt; |
1431 | msgh_size_delta = (OutP->portsType.msgtl_header.msgt_inline) ? 4 * portsCnt : sizeof(mach_port_t *); |
1432 | msgh_size += msgh_size_delta; |
1433 | OutP = (Reply *) ((char *) OutP + msgh_size_delta - 2048); |
1434 | |
1435 | OutP->controlType = controlType; |
1436 | |
1437 | if (controlP != control) { |
1438 | OutP->controlType.msgtl_header.msgt_inline = FALSE((boolean_t) 0); |
1439 | OutP->controlType.msgtl_header.msgt_deallocate = TRUE((boolean_t) 1); |
1440 | *((char **)OutP->control) = controlP; |
1441 | msgh_simple = FALSE((boolean_t) 0); |
1442 | } |
1443 | else { |
1444 | memcpy(OutP->control, control, controlCnt); |
1445 | } |
1446 | |
1447 | OutP->controlType.msgtl_number = controlCnt; |
1448 | msgh_size_delta = (OutP->controlType.msgtl_header.msgt_inline) ? (controlCnt + 3) & ~3 : sizeof(char *); |
1449 | msgh_size += msgh_size_delta; |
1450 | OutP = (Reply *) ((char *) OutP + msgh_size_delta - 2048); |
1451 | |
1452 | OutP->outflagsType = outflagsType; |
1453 | |
1454 | OutP->outflags = outflags; |
1455 | |
1456 | OutP = (Reply *) OutHeadP; |
1457 | if (!msgh_simple) |
1458 | OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX0x80000000U; |
1459 | OutP->Head.msgh_size = msgh_size; |
1460 | } |
1461 | |
1462 | mig_routine_t socket_server_routines[] = { |
1463 | _Xsocket_create, |
1464 | _Xsocket_listen, |
1465 | _Xsocket_accept, |
1466 | _Xsocket_connect, |
1467 | _Xsocket_bind, |
1468 | _Xsocket_name, |
1469 | _Xsocket_peername, |
1470 | _Xsocket_connect2, |
1471 | _Xsocket_create_address, |
1472 | _Xsocket_fabricate_address, |
1473 | _Xsocket_whatis_address, |
1474 | _Xsocket_shutdown, |
1475 | _Xsocket_getopt, |
1476 | _Xsocket_setopt, |
1477 | _Xsocket_send, |
1478 | _Xsocket_recv, |
1479 | }; |
1480 | |
1481 | mig_external boolean_t socket_server |
1482 | (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP) |
1483 | { |
1484 | mach_msg_header_t *InP = InHeadP; |
1485 | mig_reply_header_t *OutP = (mig_reply_header_t *) OutHeadP; |
1486 | |
1487 | const mach_msg_type_t RetCodeType = { |
1488 | /* msgt_name = */ MACH_MSG_TYPE_INTEGER_322, |
1489 | /* msgt_size = */ 32, |
1490 | /* msgt_number = */ 1, |
1491 | /* msgt_inline = */ TRUE((boolean_t) 1), |
1492 | /* msgt_longform = */ FALSE((boolean_t) 0), |
1493 | /* msgt_deallocate = */ FALSE((boolean_t) 0), |
1494 | /* msgt_unused = */ 0 |
1495 | }; |
1496 | |
1497 | mig_routine_t routine; |
1498 | |
1499 | OutP->Head.msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InP->msgh_bits), 0)((((InP->msgh_bits) & 0x000000ff)) | ((0) << 8)); |
1500 | OutP->Head.msgh_size = sizeof *OutP; |
1501 | OutP->Head.msgh_remote_port = InP->msgh_reply_portmsgh_remote_port; |
1502 | OutP->Head.msgh_local_port = MACH_PORT_NULL((mach_port_t) 0); |
1503 | OutP->Head.msgh_seqno = 0; |
1504 | OutP->Head.msgh_id = InP->msgh_id + 100; |
1505 | |
1506 | OutP->RetCodeType = RetCodeType; |
1507 | |
1508 | if ((InP->msgh_id > 26015) || (InP->msgh_id < 26000) || |
1509 | ((routine = socket_server_routines[InP->msgh_id - 26000]) == 0)) { |
1510 | OutP->RetCode = MIG_BAD_ID-303; |
1511 | return FALSE((boolean_t) 0); |
1512 | } |
1513 | (*routine) (InP, &OutP->Head); |
1514 | return TRUE((boolean_t) 1); |
1515 | } |
1516 | |
1517 | mig_external mig_routine_t socket_server_routine |
1518 | (const mach_msg_header_t *InHeadP) |
1519 | { |
1520 | int msgh_id; |
1521 | |
1522 | msgh_id = InHeadP->msgh_id - 26000; |
1523 | |
1524 | if ((msgh_id > 15) || (msgh_id < 0)) |
1525 | return 0; |
1526 | |
1527 | return socket_server_routines[msgh_id]; |
1528 | } |
1529 |