| 865 | }; |
| 866 | |
| 867 | VOID WINAPI transmitFileCompletion(EXTENSION_CONTROL_BLOCK * pECB, |
| 868 | PVOID pContext, |
| 869 | DWORD cbIO, |
| 870 | DWORD dwError) |
| 871 | { |
| 872 | PyTFD *context = (PyTFD *)pContext; |
| 873 | CEnterLeavePython celp; |
| 874 | |
| 875 | CControlBlock * pcb = new CControlBlock(pECB); |
| 876 | // PyECB takes ownership of pcb - so when it dies, so does pcb. |
| 877 | PyECB *pyECB = new PyECB(pcb); |
| 878 | if (pyECB && pcb) { |
| 879 | Py_INCREF(pyECB); |
| 880 | PyObject *realArgs = Py_BuildValue("NOii", pyECB, context->arg, cbIO, dwError); |
| 881 | if (realArgs) { |
| 882 | PyObject *rc = PyObject_Call(context->callable, realArgs, NULL); |
| 883 | if (rc) |
| 884 | Py_DECREF(rc); |
| 885 | else |
| 886 | ExtensionError(pcb, "TransmitFile callback failed"); |
| 887 | Py_DECREF(realArgs); |
| 888 | Py_DECREF(pyECB); |
| 889 | } |
| 890 | } |
| 891 | context->Cleanup(); // let's hope we never get called again ;) |
| 892 | } |
| 893 | |
| 894 | |
| 895 | // @pymethod int|EXTENSION_CONTROL_BLOCK|TransmitFile|Calls ServerSupportFunction with HSE_REQ_TRANSMIT_FILE |
nothing calls this directly
no test coverage detected