1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4 
5 PyDoc_STRVAR(_overlapped_CreateIoCompletionPort__doc__,
6 "CreateIoCompletionPort($module, handle, port, key, concurrency, /)\n"
7 "--\n"
8 "\n"
9 "Create a completion port or register a handle with a port.");
10 
11 #define _OVERLAPPED_CREATEIOCOMPLETIONPORT_METHODDEF    \
12     {"CreateIoCompletionPort", _PyCFunction_CAST(_overlapped_CreateIoCompletionPort), METH_FASTCALL, _overlapped_CreateIoCompletionPort__doc__},
13 
14 static PyObject *
15 _overlapped_CreateIoCompletionPort_impl(PyObject *module, HANDLE FileHandle,
16                                         HANDLE ExistingCompletionPort,
17                                         ULONG_PTR CompletionKey,
18                                         DWORD NumberOfConcurrentThreads);
19 
20 static PyObject *
_overlapped_CreateIoCompletionPort(PyObject * module,PyObject * const * args,Py_ssize_t nargs)21 _overlapped_CreateIoCompletionPort(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
22 {
23     PyObject *return_value = NULL;
24     HANDLE FileHandle;
25     HANDLE ExistingCompletionPort;
26     ULONG_PTR CompletionKey;
27     DWORD NumberOfConcurrentThreads;
28 
29     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE""F_HANDLE""F_ULONG_PTR"k:CreateIoCompletionPort",
30         &FileHandle, &ExistingCompletionPort, &CompletionKey, &NumberOfConcurrentThreads)) {
31         goto exit;
32     }
33     return_value = _overlapped_CreateIoCompletionPort_impl(module, FileHandle, ExistingCompletionPort, CompletionKey, NumberOfConcurrentThreads);
34 
35 exit:
36     return return_value;
37 }
38 
39 PyDoc_STRVAR(_overlapped_GetQueuedCompletionStatus__doc__,
40 "GetQueuedCompletionStatus($module, port, msecs, /)\n"
41 "--\n"
42 "\n"
43 "Get a message from completion port.\n"
44 "\n"
45 "Wait for up to msecs milliseconds.");
46 
47 #define _OVERLAPPED_GETQUEUEDCOMPLETIONSTATUS_METHODDEF    \
48     {"GetQueuedCompletionStatus", _PyCFunction_CAST(_overlapped_GetQueuedCompletionStatus), METH_FASTCALL, _overlapped_GetQueuedCompletionStatus__doc__},
49 
50 static PyObject *
51 _overlapped_GetQueuedCompletionStatus_impl(PyObject *module,
52                                            HANDLE CompletionPort,
53                                            DWORD Milliseconds);
54 
55 static PyObject *
_overlapped_GetQueuedCompletionStatus(PyObject * module,PyObject * const * args,Py_ssize_t nargs)56 _overlapped_GetQueuedCompletionStatus(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
57 {
58     PyObject *return_value = NULL;
59     HANDLE CompletionPort;
60     DWORD Milliseconds;
61 
62     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"k:GetQueuedCompletionStatus",
63         &CompletionPort, &Milliseconds)) {
64         goto exit;
65     }
66     return_value = _overlapped_GetQueuedCompletionStatus_impl(module, CompletionPort, Milliseconds);
67 
68 exit:
69     return return_value;
70 }
71 
72 PyDoc_STRVAR(_overlapped_PostQueuedCompletionStatus__doc__,
73 "PostQueuedCompletionStatus($module, port, bytes, key, address, /)\n"
74 "--\n"
75 "\n"
76 "Post a message to completion port.");
77 
78 #define _OVERLAPPED_POSTQUEUEDCOMPLETIONSTATUS_METHODDEF    \
79     {"PostQueuedCompletionStatus", _PyCFunction_CAST(_overlapped_PostQueuedCompletionStatus), METH_FASTCALL, _overlapped_PostQueuedCompletionStatus__doc__},
80 
81 static PyObject *
82 _overlapped_PostQueuedCompletionStatus_impl(PyObject *module,
83                                             HANDLE CompletionPort,
84                                             DWORD NumberOfBytes,
85                                             ULONG_PTR CompletionKey,
86                                             OVERLAPPED *Overlapped);
87 
88 static PyObject *
_overlapped_PostQueuedCompletionStatus(PyObject * module,PyObject * const * args,Py_ssize_t nargs)89 _overlapped_PostQueuedCompletionStatus(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
90 {
91     PyObject *return_value = NULL;
92     HANDLE CompletionPort;
93     DWORD NumberOfBytes;
94     ULONG_PTR CompletionKey;
95     OVERLAPPED *Overlapped;
96 
97     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"k"F_ULONG_PTR""F_POINTER":PostQueuedCompletionStatus",
98         &CompletionPort, &NumberOfBytes, &CompletionKey, &Overlapped)) {
99         goto exit;
100     }
101     return_value = _overlapped_PostQueuedCompletionStatus_impl(module, CompletionPort, NumberOfBytes, CompletionKey, Overlapped);
102 
103 exit:
104     return return_value;
105 }
106 
107 PyDoc_STRVAR(_overlapped_RegisterWaitWithQueue__doc__,
108 "RegisterWaitWithQueue($module, Object, CompletionPort, Overlapped,\n"
109 "                      Timeout, /)\n"
110 "--\n"
111 "\n"
112 "Register wait for Object; when complete CompletionPort is notified.");
113 
114 #define _OVERLAPPED_REGISTERWAITWITHQUEUE_METHODDEF    \
115     {"RegisterWaitWithQueue", _PyCFunction_CAST(_overlapped_RegisterWaitWithQueue), METH_FASTCALL, _overlapped_RegisterWaitWithQueue__doc__},
116 
117 static PyObject *
118 _overlapped_RegisterWaitWithQueue_impl(PyObject *module, HANDLE Object,
119                                        HANDLE CompletionPort,
120                                        OVERLAPPED *Overlapped,
121                                        DWORD Milliseconds);
122 
123 static PyObject *
_overlapped_RegisterWaitWithQueue(PyObject * module,PyObject * const * args,Py_ssize_t nargs)124 _overlapped_RegisterWaitWithQueue(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
125 {
126     PyObject *return_value = NULL;
127     HANDLE Object;
128     HANDLE CompletionPort;
129     OVERLAPPED *Overlapped;
130     DWORD Milliseconds;
131 
132     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE""F_HANDLE""F_POINTER"k:RegisterWaitWithQueue",
133         &Object, &CompletionPort, &Overlapped, &Milliseconds)) {
134         goto exit;
135     }
136     return_value = _overlapped_RegisterWaitWithQueue_impl(module, Object, CompletionPort, Overlapped, Milliseconds);
137 
138 exit:
139     return return_value;
140 }
141 
142 PyDoc_STRVAR(_overlapped_UnregisterWait__doc__,
143 "UnregisterWait($module, WaitHandle, /)\n"
144 "--\n"
145 "\n"
146 "Unregister wait handle.");
147 
148 #define _OVERLAPPED_UNREGISTERWAIT_METHODDEF    \
149     {"UnregisterWait", (PyCFunction)_overlapped_UnregisterWait, METH_O, _overlapped_UnregisterWait__doc__},
150 
151 static PyObject *
152 _overlapped_UnregisterWait_impl(PyObject *module, HANDLE WaitHandle);
153 
154 static PyObject *
_overlapped_UnregisterWait(PyObject * module,PyObject * arg)155 _overlapped_UnregisterWait(PyObject *module, PyObject *arg)
156 {
157     PyObject *return_value = NULL;
158     HANDLE WaitHandle;
159 
160     if (!PyArg_Parse(arg, ""F_HANDLE":UnregisterWait", &WaitHandle)) {
161         goto exit;
162     }
163     return_value = _overlapped_UnregisterWait_impl(module, WaitHandle);
164 
165 exit:
166     return return_value;
167 }
168 
169 PyDoc_STRVAR(_overlapped_UnregisterWaitEx__doc__,
170 "UnregisterWaitEx($module, WaitHandle, Event, /)\n"
171 "--\n"
172 "\n"
173 "Unregister wait handle.");
174 
175 #define _OVERLAPPED_UNREGISTERWAITEX_METHODDEF    \
176     {"UnregisterWaitEx", _PyCFunction_CAST(_overlapped_UnregisterWaitEx), METH_FASTCALL, _overlapped_UnregisterWaitEx__doc__},
177 
178 static PyObject *
179 _overlapped_UnregisterWaitEx_impl(PyObject *module, HANDLE WaitHandle,
180                                   HANDLE Event);
181 
182 static PyObject *
_overlapped_UnregisterWaitEx(PyObject * module,PyObject * const * args,Py_ssize_t nargs)183 _overlapped_UnregisterWaitEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
184 {
185     PyObject *return_value = NULL;
186     HANDLE WaitHandle;
187     HANDLE Event;
188 
189     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE""F_HANDLE":UnregisterWaitEx",
190         &WaitHandle, &Event)) {
191         goto exit;
192     }
193     return_value = _overlapped_UnregisterWaitEx_impl(module, WaitHandle, Event);
194 
195 exit:
196     return return_value;
197 }
198 
199 PyDoc_STRVAR(_overlapped_CreateEvent__doc__,
200 "CreateEvent($module, EventAttributes, ManualReset, InitialState, Name,\n"
201 "            /)\n"
202 "--\n"
203 "\n"
204 "Create an event.\n"
205 "\n"
206 "EventAttributes must be None.");
207 
208 #define _OVERLAPPED_CREATEEVENT_METHODDEF    \
209     {"CreateEvent", _PyCFunction_CAST(_overlapped_CreateEvent), METH_FASTCALL, _overlapped_CreateEvent__doc__},
210 
211 static PyObject *
212 _overlapped_CreateEvent_impl(PyObject *module, PyObject *EventAttributes,
213                              BOOL ManualReset, BOOL InitialState,
214                              const Py_UNICODE *Name);
215 
216 static PyObject *
_overlapped_CreateEvent(PyObject * module,PyObject * const * args,Py_ssize_t nargs)217 _overlapped_CreateEvent(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
218 {
219     PyObject *return_value = NULL;
220     PyObject *EventAttributes;
221     BOOL ManualReset;
222     BOOL InitialState;
223     const Py_UNICODE *Name = NULL;
224 
225     if (!_PyArg_ParseStack(args, nargs, "OiiO&:CreateEvent",
226         &EventAttributes, &ManualReset, &InitialState, _PyUnicode_WideCharString_Opt_Converter, &Name)) {
227         goto exit;
228     }
229     return_value = _overlapped_CreateEvent_impl(module, EventAttributes, ManualReset, InitialState, Name);
230 
231 exit:
232     /* Cleanup for Name */
233     #if !USE_UNICODE_WCHAR_CACHE
234     PyMem_Free((void *)Name);
235     #endif /* USE_UNICODE_WCHAR_CACHE */
236 
237     return return_value;
238 }
239 
240 PyDoc_STRVAR(_overlapped_SetEvent__doc__,
241 "SetEvent($module, Handle, /)\n"
242 "--\n"
243 "\n"
244 "Set event.");
245 
246 #define _OVERLAPPED_SETEVENT_METHODDEF    \
247     {"SetEvent", (PyCFunction)_overlapped_SetEvent, METH_O, _overlapped_SetEvent__doc__},
248 
249 static PyObject *
250 _overlapped_SetEvent_impl(PyObject *module, HANDLE Handle);
251 
252 static PyObject *
_overlapped_SetEvent(PyObject * module,PyObject * arg)253 _overlapped_SetEvent(PyObject *module, PyObject *arg)
254 {
255     PyObject *return_value = NULL;
256     HANDLE Handle;
257 
258     if (!PyArg_Parse(arg, ""F_HANDLE":SetEvent", &Handle)) {
259         goto exit;
260     }
261     return_value = _overlapped_SetEvent_impl(module, Handle);
262 
263 exit:
264     return return_value;
265 }
266 
267 PyDoc_STRVAR(_overlapped_ResetEvent__doc__,
268 "ResetEvent($module, Handle, /)\n"
269 "--\n"
270 "\n"
271 "Reset event.");
272 
273 #define _OVERLAPPED_RESETEVENT_METHODDEF    \
274     {"ResetEvent", (PyCFunction)_overlapped_ResetEvent, METH_O, _overlapped_ResetEvent__doc__},
275 
276 static PyObject *
277 _overlapped_ResetEvent_impl(PyObject *module, HANDLE Handle);
278 
279 static PyObject *
_overlapped_ResetEvent(PyObject * module,PyObject * arg)280 _overlapped_ResetEvent(PyObject *module, PyObject *arg)
281 {
282     PyObject *return_value = NULL;
283     HANDLE Handle;
284 
285     if (!PyArg_Parse(arg, ""F_HANDLE":ResetEvent", &Handle)) {
286         goto exit;
287     }
288     return_value = _overlapped_ResetEvent_impl(module, Handle);
289 
290 exit:
291     return return_value;
292 }
293 
294 PyDoc_STRVAR(_overlapped_BindLocal__doc__,
295 "BindLocal($module, handle, family, /)\n"
296 "--\n"
297 "\n"
298 "Bind a socket handle to an arbitrary local port.\n"
299 "\n"
300 "family should be AF_INET or AF_INET6.");
301 
302 #define _OVERLAPPED_BINDLOCAL_METHODDEF    \
303     {"BindLocal", _PyCFunction_CAST(_overlapped_BindLocal), METH_FASTCALL, _overlapped_BindLocal__doc__},
304 
305 static PyObject *
306 _overlapped_BindLocal_impl(PyObject *module, HANDLE Socket, int Family);
307 
308 static PyObject *
_overlapped_BindLocal(PyObject * module,PyObject * const * args,Py_ssize_t nargs)309 _overlapped_BindLocal(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
310 {
311     PyObject *return_value = NULL;
312     HANDLE Socket;
313     int Family;
314 
315     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"i:BindLocal",
316         &Socket, &Family)) {
317         goto exit;
318     }
319     return_value = _overlapped_BindLocal_impl(module, Socket, Family);
320 
321 exit:
322     return return_value;
323 }
324 
325 PyDoc_STRVAR(_overlapped_FormatMessage__doc__,
326 "FormatMessage($module, error_code, /)\n"
327 "--\n"
328 "\n"
329 "Return error message for an error code.");
330 
331 #define _OVERLAPPED_FORMATMESSAGE_METHODDEF    \
332     {"FormatMessage", (PyCFunction)_overlapped_FormatMessage, METH_O, _overlapped_FormatMessage__doc__},
333 
334 static PyObject *
335 _overlapped_FormatMessage_impl(PyObject *module, DWORD code);
336 
337 static PyObject *
_overlapped_FormatMessage(PyObject * module,PyObject * arg)338 _overlapped_FormatMessage(PyObject *module, PyObject *arg)
339 {
340     PyObject *return_value = NULL;
341     DWORD code;
342 
343     if (!PyArg_Parse(arg, "k:FormatMessage", &code)) {
344         goto exit;
345     }
346     return_value = _overlapped_FormatMessage_impl(module, code);
347 
348 exit:
349     return return_value;
350 }
351 
352 PyDoc_STRVAR(_overlapped_Overlapped__doc__,
353 "Overlapped(event=_overlapped.INVALID_HANDLE_VALUE)\n"
354 "--\n"
355 "\n"
356 "OVERLAPPED structure wrapper.");
357 
358 static PyObject *
359 _overlapped_Overlapped_impl(PyTypeObject *type, HANDLE event);
360 
361 static PyObject *
_overlapped_Overlapped(PyTypeObject * type,PyObject * args,PyObject * kwargs)362 _overlapped_Overlapped(PyTypeObject *type, PyObject *args, PyObject *kwargs)
363 {
364     PyObject *return_value = NULL;
365     static const char * const _keywords[] = {"event", NULL};
366     static _PyArg_Parser _parser = {"|"F_HANDLE":Overlapped", _keywords, 0};
367     HANDLE event = INVALID_HANDLE_VALUE;
368 
369     if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser,
370         &event)) {
371         goto exit;
372     }
373     return_value = _overlapped_Overlapped_impl(type, event);
374 
375 exit:
376     return return_value;
377 }
378 
379 PyDoc_STRVAR(_overlapped_Overlapped_cancel__doc__,
380 "cancel($self, /)\n"
381 "--\n"
382 "\n"
383 "Cancel overlapped operation.");
384 
385 #define _OVERLAPPED_OVERLAPPED_CANCEL_METHODDEF    \
386     {"cancel", (PyCFunction)_overlapped_Overlapped_cancel, METH_NOARGS, _overlapped_Overlapped_cancel__doc__},
387 
388 static PyObject *
389 _overlapped_Overlapped_cancel_impl(OverlappedObject *self);
390 
391 static PyObject *
_overlapped_Overlapped_cancel(OverlappedObject * self,PyObject * Py_UNUSED (ignored))392 _overlapped_Overlapped_cancel(OverlappedObject *self, PyObject *Py_UNUSED(ignored))
393 {
394     return _overlapped_Overlapped_cancel_impl(self);
395 }
396 
397 PyDoc_STRVAR(_overlapped_Overlapped_getresult__doc__,
398 "getresult($self, wait=False, /)\n"
399 "--\n"
400 "\n"
401 "Retrieve result of operation.\n"
402 "\n"
403 "If wait is true then it blocks until the operation is finished.  If wait\n"
404 "is false and the operation is still pending then an error is raised.");
405 
406 #define _OVERLAPPED_OVERLAPPED_GETRESULT_METHODDEF    \
407     {"getresult", _PyCFunction_CAST(_overlapped_Overlapped_getresult), METH_FASTCALL, _overlapped_Overlapped_getresult__doc__},
408 
409 static PyObject *
410 _overlapped_Overlapped_getresult_impl(OverlappedObject *self, BOOL wait);
411 
412 static PyObject *
_overlapped_Overlapped_getresult(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)413 _overlapped_Overlapped_getresult(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
414 {
415     PyObject *return_value = NULL;
416     BOOL wait = FALSE;
417 
418     if (!_PyArg_ParseStack(args, nargs, "|i:getresult",
419         &wait)) {
420         goto exit;
421     }
422     return_value = _overlapped_Overlapped_getresult_impl(self, wait);
423 
424 exit:
425     return return_value;
426 }
427 
428 PyDoc_STRVAR(_overlapped_Overlapped_ReadFile__doc__,
429 "ReadFile($self, handle, size, /)\n"
430 "--\n"
431 "\n"
432 "Start overlapped read.");
433 
434 #define _OVERLAPPED_OVERLAPPED_READFILE_METHODDEF    \
435     {"ReadFile", _PyCFunction_CAST(_overlapped_Overlapped_ReadFile), METH_FASTCALL, _overlapped_Overlapped_ReadFile__doc__},
436 
437 static PyObject *
438 _overlapped_Overlapped_ReadFile_impl(OverlappedObject *self, HANDLE handle,
439                                      DWORD size);
440 
441 static PyObject *
_overlapped_Overlapped_ReadFile(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)442 _overlapped_Overlapped_ReadFile(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
443 {
444     PyObject *return_value = NULL;
445     HANDLE handle;
446     DWORD size;
447 
448     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"k:ReadFile",
449         &handle, &size)) {
450         goto exit;
451     }
452     return_value = _overlapped_Overlapped_ReadFile_impl(self, handle, size);
453 
454 exit:
455     return return_value;
456 }
457 
458 PyDoc_STRVAR(_overlapped_Overlapped_ReadFileInto__doc__,
459 "ReadFileInto($self, handle, buf, /)\n"
460 "--\n"
461 "\n"
462 "Start overlapped receive.");
463 
464 #define _OVERLAPPED_OVERLAPPED_READFILEINTO_METHODDEF    \
465     {"ReadFileInto", _PyCFunction_CAST(_overlapped_Overlapped_ReadFileInto), METH_FASTCALL, _overlapped_Overlapped_ReadFileInto__doc__},
466 
467 static PyObject *
468 _overlapped_Overlapped_ReadFileInto_impl(OverlappedObject *self,
469                                          HANDLE handle, Py_buffer *bufobj);
470 
471 static PyObject *
_overlapped_Overlapped_ReadFileInto(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)472 _overlapped_Overlapped_ReadFileInto(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
473 {
474     PyObject *return_value = NULL;
475     HANDLE handle;
476     Py_buffer bufobj = {NULL, NULL};
477 
478     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"y*:ReadFileInto",
479         &handle, &bufobj)) {
480         goto exit;
481     }
482     return_value = _overlapped_Overlapped_ReadFileInto_impl(self, handle, &bufobj);
483 
484 exit:
485     /* Cleanup for bufobj */
486     if (bufobj.obj) {
487        PyBuffer_Release(&bufobj);
488     }
489 
490     return return_value;
491 }
492 
493 PyDoc_STRVAR(_overlapped_Overlapped_WSARecv__doc__,
494 "WSARecv($self, handle, size, flags=0, /)\n"
495 "--\n"
496 "\n"
497 "Start overlapped receive.");
498 
499 #define _OVERLAPPED_OVERLAPPED_WSARECV_METHODDEF    \
500     {"WSARecv", _PyCFunction_CAST(_overlapped_Overlapped_WSARecv), METH_FASTCALL, _overlapped_Overlapped_WSARecv__doc__},
501 
502 static PyObject *
503 _overlapped_Overlapped_WSARecv_impl(OverlappedObject *self, HANDLE handle,
504                                     DWORD size, DWORD flags);
505 
506 static PyObject *
_overlapped_Overlapped_WSARecv(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)507 _overlapped_Overlapped_WSARecv(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
508 {
509     PyObject *return_value = NULL;
510     HANDLE handle;
511     DWORD size;
512     DWORD flags = 0;
513 
514     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"k|k:WSARecv",
515         &handle, &size, &flags)) {
516         goto exit;
517     }
518     return_value = _overlapped_Overlapped_WSARecv_impl(self, handle, size, flags);
519 
520 exit:
521     return return_value;
522 }
523 
524 PyDoc_STRVAR(_overlapped_Overlapped_WSARecvInto__doc__,
525 "WSARecvInto($self, handle, buf, flags, /)\n"
526 "--\n"
527 "\n"
528 "Start overlapped receive.");
529 
530 #define _OVERLAPPED_OVERLAPPED_WSARECVINTO_METHODDEF    \
531     {"WSARecvInto", _PyCFunction_CAST(_overlapped_Overlapped_WSARecvInto), METH_FASTCALL, _overlapped_Overlapped_WSARecvInto__doc__},
532 
533 static PyObject *
534 _overlapped_Overlapped_WSARecvInto_impl(OverlappedObject *self,
535                                         HANDLE handle, Py_buffer *bufobj,
536                                         DWORD flags);
537 
538 static PyObject *
_overlapped_Overlapped_WSARecvInto(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)539 _overlapped_Overlapped_WSARecvInto(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
540 {
541     PyObject *return_value = NULL;
542     HANDLE handle;
543     Py_buffer bufobj = {NULL, NULL};
544     DWORD flags;
545 
546     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"y*k:WSARecvInto",
547         &handle, &bufobj, &flags)) {
548         goto exit;
549     }
550     return_value = _overlapped_Overlapped_WSARecvInto_impl(self, handle, &bufobj, flags);
551 
552 exit:
553     /* Cleanup for bufobj */
554     if (bufobj.obj) {
555        PyBuffer_Release(&bufobj);
556     }
557 
558     return return_value;
559 }
560 
561 PyDoc_STRVAR(_overlapped_Overlapped_WriteFile__doc__,
562 "WriteFile($self, handle, buf, /)\n"
563 "--\n"
564 "\n"
565 "Start overlapped write.");
566 
567 #define _OVERLAPPED_OVERLAPPED_WRITEFILE_METHODDEF    \
568     {"WriteFile", _PyCFunction_CAST(_overlapped_Overlapped_WriteFile), METH_FASTCALL, _overlapped_Overlapped_WriteFile__doc__},
569 
570 static PyObject *
571 _overlapped_Overlapped_WriteFile_impl(OverlappedObject *self, HANDLE handle,
572                                       Py_buffer *bufobj);
573 
574 static PyObject *
_overlapped_Overlapped_WriteFile(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)575 _overlapped_Overlapped_WriteFile(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
576 {
577     PyObject *return_value = NULL;
578     HANDLE handle;
579     Py_buffer bufobj = {NULL, NULL};
580 
581     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"y*:WriteFile",
582         &handle, &bufobj)) {
583         goto exit;
584     }
585     return_value = _overlapped_Overlapped_WriteFile_impl(self, handle, &bufobj);
586 
587 exit:
588     /* Cleanup for bufobj */
589     if (bufobj.obj) {
590        PyBuffer_Release(&bufobj);
591     }
592 
593     return return_value;
594 }
595 
596 PyDoc_STRVAR(_overlapped_Overlapped_WSASend__doc__,
597 "WSASend($self, handle, buf, flags, /)\n"
598 "--\n"
599 "\n"
600 "Start overlapped send.");
601 
602 #define _OVERLAPPED_OVERLAPPED_WSASEND_METHODDEF    \
603     {"WSASend", _PyCFunction_CAST(_overlapped_Overlapped_WSASend), METH_FASTCALL, _overlapped_Overlapped_WSASend__doc__},
604 
605 static PyObject *
606 _overlapped_Overlapped_WSASend_impl(OverlappedObject *self, HANDLE handle,
607                                     Py_buffer *bufobj, DWORD flags);
608 
609 static PyObject *
_overlapped_Overlapped_WSASend(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)610 _overlapped_Overlapped_WSASend(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
611 {
612     PyObject *return_value = NULL;
613     HANDLE handle;
614     Py_buffer bufobj = {NULL, NULL};
615     DWORD flags;
616 
617     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"y*k:WSASend",
618         &handle, &bufobj, &flags)) {
619         goto exit;
620     }
621     return_value = _overlapped_Overlapped_WSASend_impl(self, handle, &bufobj, flags);
622 
623 exit:
624     /* Cleanup for bufobj */
625     if (bufobj.obj) {
626        PyBuffer_Release(&bufobj);
627     }
628 
629     return return_value;
630 }
631 
632 PyDoc_STRVAR(_overlapped_Overlapped_AcceptEx__doc__,
633 "AcceptEx($self, listen_handle, accept_handle, /)\n"
634 "--\n"
635 "\n"
636 "Start overlapped wait for client to connect.");
637 
638 #define _OVERLAPPED_OVERLAPPED_ACCEPTEX_METHODDEF    \
639     {"AcceptEx", _PyCFunction_CAST(_overlapped_Overlapped_AcceptEx), METH_FASTCALL, _overlapped_Overlapped_AcceptEx__doc__},
640 
641 static PyObject *
642 _overlapped_Overlapped_AcceptEx_impl(OverlappedObject *self,
643                                      HANDLE ListenSocket,
644                                      HANDLE AcceptSocket);
645 
646 static PyObject *
_overlapped_Overlapped_AcceptEx(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)647 _overlapped_Overlapped_AcceptEx(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
648 {
649     PyObject *return_value = NULL;
650     HANDLE ListenSocket;
651     HANDLE AcceptSocket;
652 
653     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE""F_HANDLE":AcceptEx",
654         &ListenSocket, &AcceptSocket)) {
655         goto exit;
656     }
657     return_value = _overlapped_Overlapped_AcceptEx_impl(self, ListenSocket, AcceptSocket);
658 
659 exit:
660     return return_value;
661 }
662 
663 PyDoc_STRVAR(_overlapped_Overlapped_ConnectEx__doc__,
664 "ConnectEx($self, client_handle, address_as_bytes, /)\n"
665 "--\n"
666 "\n"
667 "Start overlapped connect.\n"
668 "\n"
669 "client_handle should be unbound.");
670 
671 #define _OVERLAPPED_OVERLAPPED_CONNECTEX_METHODDEF    \
672     {"ConnectEx", _PyCFunction_CAST(_overlapped_Overlapped_ConnectEx), METH_FASTCALL, _overlapped_Overlapped_ConnectEx__doc__},
673 
674 static PyObject *
675 _overlapped_Overlapped_ConnectEx_impl(OverlappedObject *self,
676                                       HANDLE ConnectSocket,
677                                       PyObject *AddressObj);
678 
679 static PyObject *
_overlapped_Overlapped_ConnectEx(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)680 _overlapped_Overlapped_ConnectEx(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
681 {
682     PyObject *return_value = NULL;
683     HANDLE ConnectSocket;
684     PyObject *AddressObj;
685 
686     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"O!:ConnectEx",
687         &ConnectSocket, &PyTuple_Type, &AddressObj)) {
688         goto exit;
689     }
690     return_value = _overlapped_Overlapped_ConnectEx_impl(self, ConnectSocket, AddressObj);
691 
692 exit:
693     return return_value;
694 }
695 
696 PyDoc_STRVAR(_overlapped_Overlapped_DisconnectEx__doc__,
697 "DisconnectEx($self, handle, flags, /)\n"
698 "--\n"
699 "\n");
700 
701 #define _OVERLAPPED_OVERLAPPED_DISCONNECTEX_METHODDEF    \
702     {"DisconnectEx", _PyCFunction_CAST(_overlapped_Overlapped_DisconnectEx), METH_FASTCALL, _overlapped_Overlapped_DisconnectEx__doc__},
703 
704 static PyObject *
705 _overlapped_Overlapped_DisconnectEx_impl(OverlappedObject *self,
706                                          HANDLE Socket, DWORD flags);
707 
708 static PyObject *
_overlapped_Overlapped_DisconnectEx(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)709 _overlapped_Overlapped_DisconnectEx(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
710 {
711     PyObject *return_value = NULL;
712     HANDLE Socket;
713     DWORD flags;
714 
715     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"k:DisconnectEx",
716         &Socket, &flags)) {
717         goto exit;
718     }
719     return_value = _overlapped_Overlapped_DisconnectEx_impl(self, Socket, flags);
720 
721 exit:
722     return return_value;
723 }
724 
725 PyDoc_STRVAR(_overlapped_Overlapped_TransmitFile__doc__,
726 "TransmitFile($self, socket, file, offset, offset_high, count_to_write,\n"
727 "             count_per_send, flags, /)\n"
728 "--\n"
729 "\n"
730 "Transmit file data over a connected socket.");
731 
732 #define _OVERLAPPED_OVERLAPPED_TRANSMITFILE_METHODDEF    \
733     {"TransmitFile", _PyCFunction_CAST(_overlapped_Overlapped_TransmitFile), METH_FASTCALL, _overlapped_Overlapped_TransmitFile__doc__},
734 
735 static PyObject *
736 _overlapped_Overlapped_TransmitFile_impl(OverlappedObject *self,
737                                          HANDLE Socket, HANDLE File,
738                                          DWORD offset, DWORD offset_high,
739                                          DWORD count_to_write,
740                                          DWORD count_per_send, DWORD flags);
741 
742 static PyObject *
_overlapped_Overlapped_TransmitFile(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)743 _overlapped_Overlapped_TransmitFile(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
744 {
745     PyObject *return_value = NULL;
746     HANDLE Socket;
747     HANDLE File;
748     DWORD offset;
749     DWORD offset_high;
750     DWORD count_to_write;
751     DWORD count_per_send;
752     DWORD flags;
753 
754     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE""F_HANDLE"kkkkk:TransmitFile",
755         &Socket, &File, &offset, &offset_high, &count_to_write, &count_per_send, &flags)) {
756         goto exit;
757     }
758     return_value = _overlapped_Overlapped_TransmitFile_impl(self, Socket, File, offset, offset_high, count_to_write, count_per_send, flags);
759 
760 exit:
761     return return_value;
762 }
763 
764 PyDoc_STRVAR(_overlapped_Overlapped_ConnectNamedPipe__doc__,
765 "ConnectNamedPipe($self, handle, /)\n"
766 "--\n"
767 "\n"
768 "Start overlapped wait for a client to connect.");
769 
770 #define _OVERLAPPED_OVERLAPPED_CONNECTNAMEDPIPE_METHODDEF    \
771     {"ConnectNamedPipe", (PyCFunction)_overlapped_Overlapped_ConnectNamedPipe, METH_O, _overlapped_Overlapped_ConnectNamedPipe__doc__},
772 
773 static PyObject *
774 _overlapped_Overlapped_ConnectNamedPipe_impl(OverlappedObject *self,
775                                              HANDLE Pipe);
776 
777 static PyObject *
_overlapped_Overlapped_ConnectNamedPipe(OverlappedObject * self,PyObject * arg)778 _overlapped_Overlapped_ConnectNamedPipe(OverlappedObject *self, PyObject *arg)
779 {
780     PyObject *return_value = NULL;
781     HANDLE Pipe;
782 
783     if (!PyArg_Parse(arg, ""F_HANDLE":ConnectNamedPipe", &Pipe)) {
784         goto exit;
785     }
786     return_value = _overlapped_Overlapped_ConnectNamedPipe_impl(self, Pipe);
787 
788 exit:
789     return return_value;
790 }
791 
792 PyDoc_STRVAR(_overlapped_Overlapped_ConnectPipe__doc__,
793 "ConnectPipe($self, addr, /)\n"
794 "--\n"
795 "\n"
796 "Connect to the pipe for asynchronous I/O (overlapped).");
797 
798 #define _OVERLAPPED_OVERLAPPED_CONNECTPIPE_METHODDEF    \
799     {"ConnectPipe", (PyCFunction)_overlapped_Overlapped_ConnectPipe, METH_O, _overlapped_Overlapped_ConnectPipe__doc__},
800 
801 static PyObject *
802 _overlapped_Overlapped_ConnectPipe_impl(OverlappedObject *self,
803                                         const Py_UNICODE *Address);
804 
805 static PyObject *
_overlapped_Overlapped_ConnectPipe(OverlappedObject * self,PyObject * arg)806 _overlapped_Overlapped_ConnectPipe(OverlappedObject *self, PyObject *arg)
807 {
808     PyObject *return_value = NULL;
809     const Py_UNICODE *Address = NULL;
810 
811     if (!PyUnicode_Check(arg)) {
812         _PyArg_BadArgument("ConnectPipe", "argument", "str", arg);
813         goto exit;
814     }
815     #if USE_UNICODE_WCHAR_CACHE
816     Address = _PyUnicode_AsUnicode(arg);
817     #else /* USE_UNICODE_WCHAR_CACHE */
818     Address = PyUnicode_AsWideCharString(arg, NULL);
819     #endif /* USE_UNICODE_WCHAR_CACHE */
820     if (Address == NULL) {
821         goto exit;
822     }
823     return_value = _overlapped_Overlapped_ConnectPipe_impl(self, Address);
824 
825 exit:
826     /* Cleanup for Address */
827     #if !USE_UNICODE_WCHAR_CACHE
828     PyMem_Free((void *)Address);
829     #endif /* USE_UNICODE_WCHAR_CACHE */
830 
831     return return_value;
832 }
833 
834 PyDoc_STRVAR(_overlapped_WSAConnect__doc__,
835 "WSAConnect($module, client_handle, address_as_bytes, /)\n"
836 "--\n"
837 "\n"
838 "Bind a remote address to a connectionless (UDP) socket.");
839 
840 #define _OVERLAPPED_WSACONNECT_METHODDEF    \
841     {"WSAConnect", _PyCFunction_CAST(_overlapped_WSAConnect), METH_FASTCALL, _overlapped_WSAConnect__doc__},
842 
843 static PyObject *
844 _overlapped_WSAConnect_impl(PyObject *module, HANDLE ConnectSocket,
845                             PyObject *AddressObj);
846 
847 static PyObject *
_overlapped_WSAConnect(PyObject * module,PyObject * const * args,Py_ssize_t nargs)848 _overlapped_WSAConnect(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
849 {
850     PyObject *return_value = NULL;
851     HANDLE ConnectSocket;
852     PyObject *AddressObj;
853 
854     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"O!:WSAConnect",
855         &ConnectSocket, &PyTuple_Type, &AddressObj)) {
856         goto exit;
857     }
858     return_value = _overlapped_WSAConnect_impl(module, ConnectSocket, AddressObj);
859 
860 exit:
861     return return_value;
862 }
863 
864 PyDoc_STRVAR(_overlapped_Overlapped_WSASendTo__doc__,
865 "WSASendTo($self, handle, buf, flags, address_as_bytes, /)\n"
866 "--\n"
867 "\n"
868 "Start overlapped sendto over a connectionless (UDP) socket.");
869 
870 #define _OVERLAPPED_OVERLAPPED_WSASENDTO_METHODDEF    \
871     {"WSASendTo", _PyCFunction_CAST(_overlapped_Overlapped_WSASendTo), METH_FASTCALL, _overlapped_Overlapped_WSASendTo__doc__},
872 
873 static PyObject *
874 _overlapped_Overlapped_WSASendTo_impl(OverlappedObject *self, HANDLE handle,
875                                       Py_buffer *bufobj, DWORD flags,
876                                       PyObject *AddressObj);
877 
878 static PyObject *
_overlapped_Overlapped_WSASendTo(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)879 _overlapped_Overlapped_WSASendTo(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
880 {
881     PyObject *return_value = NULL;
882     HANDLE handle;
883     Py_buffer bufobj = {NULL, NULL};
884     DWORD flags;
885     PyObject *AddressObj;
886 
887     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"y*kO!:WSASendTo",
888         &handle, &bufobj, &flags, &PyTuple_Type, &AddressObj)) {
889         goto exit;
890     }
891     return_value = _overlapped_Overlapped_WSASendTo_impl(self, handle, &bufobj, flags, AddressObj);
892 
893 exit:
894     /* Cleanup for bufobj */
895     if (bufobj.obj) {
896        PyBuffer_Release(&bufobj);
897     }
898 
899     return return_value;
900 }
901 
902 PyDoc_STRVAR(_overlapped_Overlapped_WSARecvFrom__doc__,
903 "WSARecvFrom($self, handle, size, flags=0, /)\n"
904 "--\n"
905 "\n"
906 "Start overlapped receive.");
907 
908 #define _OVERLAPPED_OVERLAPPED_WSARECVFROM_METHODDEF    \
909     {"WSARecvFrom", _PyCFunction_CAST(_overlapped_Overlapped_WSARecvFrom), METH_FASTCALL, _overlapped_Overlapped_WSARecvFrom__doc__},
910 
911 static PyObject *
912 _overlapped_Overlapped_WSARecvFrom_impl(OverlappedObject *self,
913                                         HANDLE handle, DWORD size,
914                                         DWORD flags);
915 
916 static PyObject *
_overlapped_Overlapped_WSARecvFrom(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)917 _overlapped_Overlapped_WSARecvFrom(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
918 {
919     PyObject *return_value = NULL;
920     HANDLE handle;
921     DWORD size;
922     DWORD flags = 0;
923 
924     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"k|k:WSARecvFrom",
925         &handle, &size, &flags)) {
926         goto exit;
927     }
928     return_value = _overlapped_Overlapped_WSARecvFrom_impl(self, handle, size, flags);
929 
930 exit:
931     return return_value;
932 }
933 
934 PyDoc_STRVAR(_overlapped_Overlapped_WSARecvFromInto__doc__,
935 "WSARecvFromInto($self, handle, buf, size, flags=0, /)\n"
936 "--\n"
937 "\n"
938 "Start overlapped receive.");
939 
940 #define _OVERLAPPED_OVERLAPPED_WSARECVFROMINTO_METHODDEF    \
941     {"WSARecvFromInto", _PyCFunction_CAST(_overlapped_Overlapped_WSARecvFromInto), METH_FASTCALL, _overlapped_Overlapped_WSARecvFromInto__doc__},
942 
943 static PyObject *
944 _overlapped_Overlapped_WSARecvFromInto_impl(OverlappedObject *self,
945                                             HANDLE handle, Py_buffer *bufobj,
946                                             DWORD size, DWORD flags);
947 
948 static PyObject *
_overlapped_Overlapped_WSARecvFromInto(OverlappedObject * self,PyObject * const * args,Py_ssize_t nargs)949 _overlapped_Overlapped_WSARecvFromInto(OverlappedObject *self, PyObject *const *args, Py_ssize_t nargs)
950 {
951     PyObject *return_value = NULL;
952     HANDLE handle;
953     Py_buffer bufobj = {NULL, NULL};
954     DWORD size;
955     DWORD flags = 0;
956 
957     if (!_PyArg_ParseStack(args, nargs, ""F_HANDLE"y*k|k:WSARecvFromInto",
958         &handle, &bufobj, &size, &flags)) {
959         goto exit;
960     }
961     return_value = _overlapped_Overlapped_WSARecvFromInto_impl(self, handle, &bufobj, size, flags);
962 
963 exit:
964     /* Cleanup for bufobj */
965     if (bufobj.obj) {
966        PyBuffer_Release(&bufobj);
967     }
968 
969     return return_value;
970 }
971 /*[clinic end generated code: output=5023f7748f0e073e input=a9049054013a1b77]*/
972