62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
# Copyright 2014 Cloudbase Solutions Srl
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import ctypes
|
|
|
|
from ctypes import windll
|
|
from ctypes import wintypes
|
|
|
|
AF_UNSPEC = 0
|
|
AF_INET = 2
|
|
AF_INET6 = 23
|
|
|
|
VERSION_2_2 = (2 << 8) + 2
|
|
|
|
|
|
class SOCKADDR(ctypes.Structure):
|
|
_fields_ = [
|
|
('sa_family', wintypes.USHORT),
|
|
('sa_data', ctypes.c_char * 14),
|
|
]
|
|
|
|
|
|
class WSADATA(ctypes.Structure):
|
|
_fields_ = [
|
|
('opaque_data', wintypes.BYTE * 400),
|
|
]
|
|
|
|
|
|
WSAGetLastError = windll.Ws2_32.WSAGetLastError
|
|
WSAGetLastError.argtypes = []
|
|
WSAGetLastError.restype = wintypes.INT
|
|
|
|
WSAStartup = windll.Ws2_32.WSAStartup
|
|
WSAStartup.argtypes = [wintypes.WORD, ctypes.POINTER(WSADATA)]
|
|
WSAStartup.restype = wintypes.INT
|
|
|
|
WSACleanup = windll.Ws2_32.WSACleanup
|
|
WSACleanup.argtypes = []
|
|
WSACleanup.restype = wintypes.INT
|
|
|
|
WSAAddressToStringW = windll.Ws2_32.WSAAddressToStringW
|
|
WSAAddressToStringW.argtypes = [
|
|
ctypes.POINTER(SOCKADDR), wintypes.DWORD, wintypes.LPVOID,
|
|
wintypes.LPWSTR, ctypes.POINTER(wintypes.DWORD)]
|
|
WSAAddressToStringW.restype = wintypes.INT
|
|
|
|
|
|
def init_wsa(version=VERSION_2_2):
|
|
wsadata = WSADATA()
|
|
WSAStartup(version, ctypes.byref(wsadata))
|