| Index: third_party/twisted_8_1/twisted/internet/iocpreactor/iocpsupport/iocpsupport.pyx
|
| diff --git a/third_party/twisted_8_1/twisted/internet/iocpreactor/iocpsupport/iocpsupport.pyx b/third_party/twisted_8_1/twisted/internet/iocpreactor/iocpsupport/iocpsupport.pyx
|
| deleted file mode 100644
|
| index 85f8c4783f3691d80bbb93190a003f2cbe6a83cc..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/internet/iocpreactor/iocpsupport/iocpsupport.pyx
|
| +++ /dev/null
|
| @@ -1,250 +0,0 @@
|
| -# Copyright (c) 2008 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -ctypedef int size_t
|
| -ctypedef unsigned long HANDLE
|
| -ctypedef unsigned long SOCKET
|
| -ctypedef unsigned long DWORD
|
| -ctypedef unsigned long ULONG_PTR
|
| -ctypedef int BOOL
|
| -
|
| -cdef extern from 'io.h':
|
| - long _get_osfhandle(int filehandle)
|
| -
|
| -cdef extern from 'errno.h':
|
| - int errno
|
| - enum:
|
| - EBADF
|
| -
|
| -cdef extern from 'winsock2.h':
|
| - pass
|
| -
|
| -cdef extern from 'windows.h':
|
| - ctypedef struct OVERLAPPED:
|
| - pass
|
| - HANDLE CreateIoCompletionPort(HANDLE fileHandle, HANDLE existing, ULONG_PTR key, DWORD numThreads)
|
| - BOOL GetQueuedCompletionStatus(HANDLE port, DWORD *bytes, ULONG_PTR *key, OVERLAPPED **ov, DWORD timeout)
|
| - BOOL PostQueuedCompletionStatus(HANDLE port, DWORD bytes, ULONG_PTR key, OVERLAPPED *ov)
|
| - DWORD GetLastError()
|
| - BOOL CloseHandle(HANDLE h)
|
| - enum:
|
| - INVALID_HANDLE_VALUE
|
| - void DebugBreak()
|
| -
|
| -cdef extern from 'python.h':
|
| - struct PyObject:
|
| - pass
|
| - void *PyMem_Malloc(size_t n) except NULL
|
| - void PyMem_Free(void *p)
|
| - struct PyThreadState:
|
| - pass
|
| - PyThreadState *PyEval_SaveThread()
|
| - void PyEval_RestoreThread(PyThreadState *tstate)
|
| - void Py_INCREF(object o)
|
| - void Py_XINCREF(object o)
|
| - void Py_DECREF(object o)
|
| - void Py_XDECREF(object o)
|
| - int PyObject_AsWriteBuffer(object obj, void **buffer, int *buffer_len) except -1
|
| - int PyObject_AsReadBuffer(object obj, void **buffer, int *buffer_len) except -1
|
| - object PyString_FromString(char *v)
|
| - object PyString_FromStringAndSize(char *v, int len)
|
| - object PyBuffer_New(int size)
|
| - char *PyString_AsString(object obj) except NULL
|
| - object PySequence_Fast(object o, char *m)
|
| -# object PySequence_Fast_GET_ITEM(object o, int i)
|
| - PyObject** PySequence_Fast_ITEMS(object o)
|
| - PyObject* PySequence_ITEM( PyObject *o, int i)
|
| - int PySequence_Fast_GET_SIZE(object o)
|
| -
|
| -cdef extern from '':
|
| - struct sockaddr:
|
| - int sa_family
|
| - char sa_data[0]
|
| - cdef struct in_addr:
|
| - unsigned long s_addr
|
| - struct sockaddr_in:
|
| - int sin_port
|
| - in_addr sin_addr
|
| - int getsockopt(SOCKET s, int level, int optname, char *optval, int *optlen)
|
| - enum:
|
| - SOL_SOCKET
|
| - SO_PROTOCOL_INFO
|
| - SOCKET_ERROR
|
| - ERROR_IO_PENDING
|
| - AF_INET
|
| - INADDR_ANY
|
| - ctypedef struct WSAPROTOCOL_INFO:
|
| - int iMaxSockAddr
|
| - int iAddressFamily
|
| - int WSAGetLastError()
|
| - char *inet_ntoa(in_addr ina)
|
| - unsigned long inet_addr(char *cp)
|
| - short ntohs(short netshort)
|
| - short htons(short hostshort)
|
| - ctypedef struct WSABUF:
|
| - long len
|
| - char *buf
|
| -# cdef struct TRANSMIT_FILE_BUFFERS:
|
| -# pass
|
| - int WSARecv(SOCKET s, WSABUF *buffs, DWORD buffcount, DWORD *bytes, DWORD *flags, OVERLAPPED *ov, void *crud)
|
| - int WSARecvFrom(SOCKET s, WSABUF *buffs, DWORD buffcount, DWORD *bytes, DWORD *flags, sockaddr *fromaddr, int *fromlen, OVERLAPPED *ov, void *crud)
|
| - int WSASend(SOCKET s, WSABUF *buffs, DWORD buffcount, DWORD *bytes, DWORD flags, OVERLAPPED *ov, void *crud)
|
| -
|
| -cdef extern from 'string.h':
|
| - void *memset(void *s, int c, size_t n)
|
| -
|
| -cdef extern from 'winsock_pointers.h':
|
| - int initWinsockPointers()
|
| - BOOL (*lpAcceptEx)(SOCKET listening, SOCKET accepting, void *buffer, DWORD recvlen, DWORD locallen, DWORD remotelen, DWORD *bytes, OVERLAPPED *ov)
|
| - void (*lpGetAcceptExSockaddrs)(void *buffer, DWORD recvlen, DWORD locallen, DWORD remotelen, sockaddr **localaddr, int *locallen, sockaddr **remoteaddr, int *remotelen)
|
| - BOOL (*lpConnectEx)(SOCKET s, sockaddr *name, int namelen, void *buff, DWORD sendlen, DWORD *sentlen, OVERLAPPED *ov)
|
| -# BOOL (*lpTransmitFile)(SOCKET s, HANDLE hFile, DWORD size, DWORD buffer_size, OVERLAPPED *ov, TRANSMIT_FILE_BUFFERS *buff, DWORD flags)
|
| -
|
| -cdef struct myOVERLAPPED:
|
| - OVERLAPPED ov
|
| - PyObject *obj
|
| -
|
| -cdef myOVERLAPPED *makeOV() except NULL:
|
| - cdef myOVERLAPPED *res
|
| - res = <myOVERLAPPED *>PyMem_Malloc(sizeof(myOVERLAPPED))
|
| - if not res:
|
| - raise MemoryError
|
| - memset(res, 0, sizeof(myOVERLAPPED))
|
| - return res
|
| -
|
| -cdef void raise_error(int err, object message) except *:
|
| - if not err:
|
| - err = GetLastError()
|
| - raise WindowsError(message, err)
|
| -
|
| -class Event:
|
| - def __init__(self, callback, owner, **kw):
|
| - self.callback = callback
|
| - self.owner = owner
|
| - self.ignore = False
|
| - for k, v in kw.items():
|
| - setattr(self, k, v)
|
| -
|
| -cdef class CompletionPort:
|
| - cdef HANDLE port
|
| - def __init__(self):
|
| - cdef HANDLE res
|
| - res = CreateIoCompletionPort(INVALID_HANDLE_VALUE, 0, 0, 0)
|
| - if not res:
|
| - raise_error(0, 'CreateIoCompletionPort')
|
| - self.port = res
|
| -
|
| - def addHandle(self, long handle, long key=0):
|
| - cdef HANDLE res
|
| - res = CreateIoCompletionPort(handle, self.port, key, 0)
|
| - if not res:
|
| - raise_error(0, 'CreateIoCompletionPort')
|
| -
|
| - def getEvent(self, long timeout):
|
| - cdef PyThreadState *_save
|
| - cdef unsigned long bytes, key, rc
|
| - cdef myOVERLAPPED *ov
|
| -
|
| - _save = PyEval_SaveThread()
|
| - rc = GetQueuedCompletionStatus(self.port, &bytes, &key, <OVERLAPPED **>&ov, timeout)
|
| - PyEval_RestoreThread(_save)
|
| -
|
| - if not rc:
|
| - rc = GetLastError()
|
| - else:
|
| - rc = 0
|
| -
|
| - obj = None
|
| - if ov:
|
| - if ov.obj:
|
| - obj = <object>ov.obj
|
| - Py_DECREF(obj) # we are stealing a reference here
|
| - PyMem_Free(ov)
|
| -
|
| - return (rc, bytes, key, obj)
|
| -
|
| - def postEvent(self, unsigned long bytes, unsigned long key, obj):
|
| - cdef myOVERLAPPED *ov
|
| - cdef unsigned long rc
|
| -
|
| - if obj is not None:
|
| - ov = makeOV()
|
| - Py_INCREF(obj) # give ov its own reference to obj
|
| - ov.obj = <PyObject *>obj
|
| - else:
|
| - ov = NULL
|
| -
|
| - rc = PostQueuedCompletionStatus(self.port, bytes, key, <OVERLAPPED *>ov)
|
| - if not rc:
|
| - raise_error(0, 'PostQueuedCompletionStatus')
|
| -
|
| - def __del__(self):
|
| - CloseHandle(self.port)
|
| -
|
| -def makesockaddr(object buff):
|
| - cdef void *mem_buffer
|
| - cdef int size
|
| -
|
| - PyObject_AsReadBuffer(buff, &mem_buffer, &size)
|
| - # XXX: this should really return the address family as well
|
| - return _makesockaddr(<sockaddr *>mem_buffer, size)
|
| -
|
| -cdef object _makesockaddr(sockaddr *addr, int len):
|
| - cdef sockaddr_in *sin
|
| - if not len:
|
| - return None
|
| - if addr.sa_family == AF_INET:
|
| - sin = <sockaddr_in *>addr
|
| - return PyString_FromString(inet_ntoa(sin.sin_addr)), ntohs(sin.sin_port)
|
| - else:
|
| - return PyString_FromStringAndSize(addr.sa_data, sizeof(addr.sa_data))
|
| -
|
| -cdef object fillinetaddr(sockaddr_in *dest, object addr):
|
| - cdef short port
|
| - cdef unsigned long res
|
| - cdef char *hoststr
|
| - host, port = addr
|
| -
|
| - hoststr = PyString_AsString(host)
|
| - res = inet_addr(hoststr)
|
| - if res == INADDR_ANY:
|
| - raise ValueError, 'invalid IP address'
|
| - dest.sin_addr.s_addr = res
|
| -
|
| - dest.sin_port = htons(port)
|
| -
|
| -def AllocateReadBuffer(int size):
|
| - return PyBuffer_New(size)
|
| -
|
| -def maxAddrLen(long s):
|
| - cdef WSAPROTOCOL_INFO wsa_pi
|
| - cdef int size, rc
|
| -
|
| - size = sizeof(wsa_pi)
|
| - rc = getsockopt(s, SOL_SOCKET, SO_PROTOCOL_INFO, <char *>&wsa_pi, &size)
|
| - if rc == SOCKET_ERROR:
|
| - raise_error(WSAGetLastError(), 'getsockopt')
|
| - return wsa_pi.iMaxSockAddr
|
| -
|
| -cdef int getAddrFamily(SOCKET s) except *:
|
| - cdef WSAPROTOCOL_INFO wsa_pi
|
| - cdef int size, rc
|
| -
|
| - size = sizeof(wsa_pi)
|
| - rc = getsockopt(s, SOL_SOCKET, SO_PROTOCOL_INFO, <char *>&wsa_pi, &size)
|
| - if rc == SOCKET_ERROR:
|
| - raise_error(WSAGetLastError(), 'getsockopt')
|
| - return wsa_pi.iAddressFamily
|
| -
|
| -import socket # for WSAStartup
|
| -if not initWinsockPointers():
|
| - raise ValueError, 'Failed to initialize Winsock function vectors'
|
| -
|
| -have_connectex = (lpConnectEx != NULL)
|
| -
|
| -include 'acceptex.pxi'
|
| -include 'connectex.pxi'
|
| -include 'wsarecv.pxi'
|
| -include 'wsasend.pxi'
|
| -
|
|
|