<?xml version="1.0" encoding="UTF-8"?>
<!--
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt for Python.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
-->
<typesystem package="PySide2.QtNetwork">
  <load-typesystem name="QtCore/typesystem_core.xml" generate="no"/>

    <enum-type name="QDtlsError" since="5.12"/>
    <enum-type name="QOcspCertificateStatus" since="5.13"/>
    <enum-type name="QOcspRevocationReason" since="5.13"/>

    <namespace-type name="QPasswordDigestor" since="5.12">
        <extra-includes>
            <include file-name="qpassworddigestor.h" location="global"/>
        </extra-includes>
    </namespace-type>

    <namespace-type name="QSsl">
        <enum-type name="AlternativeNameEntryType"/>
        <enum-type name="EncodingFormat"/>
        <enum-type name="KeyAlgorithm"/>
        <enum-type name="KeyType"/>
        <enum-type name="SslOption" flags="SslOptions"/>
        <enum-type name="SslProtocol"/>
        <extra-includes>
            <include file-name="qssl.h" location="global"/>
        </extra-includes>
    </namespace-type>

    <rejection class="QIPv6Address" field-name="c"/>
    <rejection class="dtlsopenssl"/>

    <object-type name="QAbstractSocket">
        <enum-type name="BindFlag" flags="BindMode"/>
        <enum-type name="NetworkLayerProtocol"/>
        <enum-type name="PauseMode" flags="PauseModes"/>
        <enum-type name="SocketError"/>
        <enum-type name="SocketOption" since="4.6"/>
        <enum-type name="SocketState"/>
        <enum-type name="SocketType"/>
        <modify-function signature="connectToHost(const QString&amp;,quint16,QFlags&lt;QIODevice::OpenModeFlag>,QAbstractSocket::NetworkLayerProtocol)" allow-thread="yes"/>
        <modify-function signature="connectToHost(const QHostAddress&amp;,quint16,QFlags&lt;QIODevice::OpenModeFlag>)" allow-thread="yes"/>
        <modify-function signature="disconnectFromHost()" allow-thread="yes"/>
        <modify-function signature="waitForConnected(int)" allow-thread="yes"/>
        <modify-function signature="waitForDisconnected(int)" allow-thread="yes"/>
        <modify-function signature="waitForBytesWritten(int)" allow-thread="yes"/>
        <modify-function signature="waitForReadyRead(int)" allow-thread="yes"/>
    </object-type>

    <value-type name="QDnsDomainNameRecord"/>
    <value-type name="QDnsHostAddressRecord"/>
    <object-type name="QDnsLookup">
        <enum-type name="Error"/>
        <enum-type name="Type"/>
    </object-type>
    <value-type name="QDnsMailExchangeRecord"/>
    <value-type name="QDnsServiceRecord"/>
    <value-type name="QDnsTextRecord"/>

    <object-type name="QDtls" since="5.12">
        <enum-type name="HandshakeState"/>
    </object-type>

    <value-type name="QHstsPolicy" since="5.9">
        <enum-type name="PolicyFlag" flags="PolicyFlags"/>
    </value-type>
    <object-type name="QHttpMultiPart">
        <enum-type name="ContentType"/>
    </object-type>
    <value-type name="QHttpPart" since="5.9"/>
    <object-type name="QTcpServer">
        <modify-function signature="waitForNewConnection(int,bool*)" allow-thread="yes">
            <!-- FIXME removing default expression means user will always have to pass a value, but he wouldn't have to -->
            <modify-argument index="1">
                <remove-default-expression/>
            </modify-argument>
            <modify-argument index="2">
                <remove-default-expression/>
                <remove-argument/>
            </modify-argument>
            <modify-argument index="return">
                <replace-type modified-type="(retval, timeOut)"/>
            </modify-argument>
            <inject-code class="target" position="beginning">
                <insert-template name="fix_args,bool*"/>
            </inject-code>
        </modify-function>
    </object-type>
    <value-type name="QOcspResponse" since="5.13"/>
    <object-type name="QTcpSocket"/>
    <object-type name="QUdpSocket">
        <modify-function signature="readDatagram(char*,qint64,QHostAddress*,quint16*)" allow-thread="yes">
            <modify-argument index="1">
                <remove-argument/>
            </modify-argument>
            <modify-argument index="3">
                <remove-default-expression/>
                <remove-argument/>
            </modify-argument>
            <modify-argument index="4">
                <remove-default-expression/>
                <remove-argument/>
            </modify-argument>
            <modify-argument index="return">
                <replace-type modified-type="(data, address, port)"/>
            </modify-argument>
            <inject-code class="target" position="beginning" file="../glue/qtnetwork.cpp" snippet="qudpsocket-readdatagram"/>
        </modify-function>
        <modify-function signature="writeDatagram(const QByteArray&amp;,const QHostAddress&amp;,quint16)" allow-thread="yes"/>
        <!-- ### writeDatagram(QByteArray, ...) does the trick -->
        <modify-function signature="writeDatagram(const char*,qint64,const QHostAddress&amp;,quint16)" remove="all"/>
        <!-- ### -->
    </object-type>

    <object-type name="QLocalServer">
        <enum-type name="SocketOption" flags="SocketOptions"/>
        <modify-function signature="waitForNewConnection(int,bool*)" allow-thread="yes">
            <!-- FIXME -->
            <modify-argument index="1">
                <remove-default-expression/>
            </modify-argument>
            <modify-argument index="2">
                <remove-default-expression/>
                <remove-argument/>
            </modify-argument>
            <inject-code class="target" position="beginning">
                <insert-template name="fix_args,bool*"/>
            </inject-code>
            <modify-argument index="return">
                <replace-type modified-type="(retval, timeOut)"/>
            </modify-argument>

        </modify-function>
    </object-type>
    <object-type name="QLocalSocket">
        <enum-type name="LocalSocketError"/>
        <enum-type name="LocalSocketState"/>
    </object-type>
    <object-type name="QNetworkAccessManager">
        <enum-type name="NetworkAccessibility" since="4.7"/>
        <enum-type name="Operation"/>
        <modify-function signature="createRequest(QNetworkAccessManager::Operation,const QNetworkRequest&amp;,QIODevice*)">
          <modify-argument index="3" invalidate-after-use="yes"/>
          <modify-argument index="return">
            <define-ownership class="target" owner="default"/>
          </modify-argument>
        </modify-function>
        <modify-function signature="get(const QNetworkRequest&amp;)" allow-thread="yes"/>
        <modify-function signature="post(const QNetworkRequest &amp;,QIODevice*)" allow-thread="yes"/>
        <modify-function signature="post(const QNetworkRequest &amp;,const QByteArray &amp;)" allow-thread="yes"/>
        <modify-function signature="put(const QNetworkRequest &amp;,QIODevice*)" allow-thread="yes"/>
        <modify-function signature="put(const QNetworkRequest &amp;,const QByteArray &amp;)" allow-thread="yes"/>
        <modify-function signature="sendCustomRequest(const QNetworkRequest &amp;,const QByteArray &amp;,QIODevice*)" allow-thread="yes" since="4.7"/>
        <modify-function signature="setCookieJar(QNetworkCookieJar*)">
            <modify-argument index="1">
                <define-ownership class="target" owner="c++"/>
            </modify-argument>
        </modify-function>
    </object-type>
    <object-type name="QNetworkCookieJar"/>
    <value-type name="QNetworkDatagram" since="5.8"/>
    <object-type name="QNetworkReply">
        <enum-type name="NetworkError"/>
    </object-type>

    <value-type name="QHostAddress" hash-function="qHash">
        <enum-type name="ConversionModeFlag" flags="ConversionMode" since="5.8"/>
        <enum-type name="SpecialAddress"/>
        <!-- ### QHostAddress(QIPv6Address) does this -->
        <modify-function signature="QHostAddress(quint8*)" remove="all"/>
        <modify-function signature="QHostAddress(const quint8*)" remove="all"/>
       <!-- ### -->
        <modify-function signature="setAddress(quint8*)" remove="all"/>
        <modify-function signature="setAddress(const quint8*)" remove="all"/>
    </value-type>

    <value-type name="QHostInfo">
        <enum-type name="HostInfoError"/>
        <modify-function signature="lookupHost(QString,QObject*,const char*)" access="private"/>
    </value-type>

    <value-type name="QNetworkAddressEntry">
        <enum-type name="DnsEligibilityStatus" since="5.11"/>
    </value-type>

    <value-type name="QNetworkInterface">
        <enum-type name="InterfaceFlag" flags="InterfaceFlags"/>
        <enum-type name="InterfaceType" since="5.11"/>
    </value-type>

    <value-type name="QNetworkProxy">
        <enum-type name="Capability" flags="Capabilities"/>
        <enum-type name="ProxyType"/>
    </value-type>

    <object-type name="QNetworkProxyFactory"/>
    <value-type name="QNetworkProxyQuery">
        <enum-type name="QueryType"/>
    </value-type>

    <value-type name="QIPv6Address">
        <add-function signature="__len__">
            <inject-code class="target" position="beginning" file="../glue/qtnetwork.cpp" snippet="qipv6address-len"/>
        </add-function>
        <add-function signature="__getitem__">
            <inject-code class="target" position="beginning" file="../glue/qtnetwork.cpp" snippet="qipv6address-getitem"/>
        </add-function>
        <add-function signature="__setitem__">
            <inject-code class="target" position="beginning" file="../glue/qtnetwork.cpp" snippet="qipv6address-setitem"/>
        </add-function>
    </value-type>

    <value-type name="QAuthenticator"/>
    <value-type name="QNetworkCookie">
        <enum-type name="RawForm"/>
        <extra-includes>
            <include file-name="QDateTime" location="global"/>
        </extra-includes>
    </value-type>
    <value-type name="QNetworkRequest">
        <enum-type name="Attribute"/>
        <enum-type name="LoadControl" since="4.7"/>
        <enum-type name="Priority" since="4.7"/>
        <enum-type name="CacheLoadControl"/>
        <enum-type name="KnownHeaders"/>
        <enum-type name="RedirectPolicy" since="5.9"/>
        <enum-type name="TransferTimeoutConstant" since="5.15"/>
    </value-type>

    <value-type name="QNetworkConfiguration" since="4.7">
        <enum-type name="BearerType"/>
        <enum-type name="Purpose" since="4.7"/>
        <enum-type name="StateFlag" flags="StateFlags" since="4.7"/>
        <enum-type name="Type" since="4.7"/>
    </value-type>
    <object-type name="QNetworkConfigurationManager" since="4.7">
        <enum-type name="Capability" flags="Capabilities" since="4.7"/>
    </object-type>
    <object-type name="QNetworkSession" since="4.7">
        <enum-type name="SessionError" since="4.7"/>
        <enum-type name="State" since="4.7"/>
        <enum-type name="UsagePolicy" flags="UsagePolicies"/>
    </object-type>

    <object-type name="QAbstractNetworkCache"/>
    <object-type name="QNetworkDiskCache"/>
    <value-type name="QNetworkCacheMetaData"/>

    <object-type name="QSctpServer"/>
    <object-type name="QSctpSocket"/>

    <!-- The following entries may be present in the system or not. Keep this section organized. -->
    <value-type name="QSslCertificate">
        <enum-type name="PatternSyntax" since="5.15"/>
        <enum-type name="SubjectInfo"/>
    </value-type>

    <value-type name="QSslCertificateExtension"/>

    <value-type name="QSslCipher"/>

    <value-type name="QSslConfiguration">
        <enum-type name="NextProtocolNegotiationStatus"/>
    </value-type>

    <value-type name="QSslDiffieHellmanParameters" since="5.8">
        <enum-type name="Error"/>
    </value-type>

    <!-- Problems with operator==(QSslEllipticCurve,QSslEllipticCurve)
    <object-type name="QSslEllipticCurve"/>
    -->

    <value-type name="QSslError">
        <enum-type name="SslError"/>
    </value-type>

    <value-type name="QSslKey"/>
    <object-type name="QSslSocket">
        <enum-type name="SslMode"/>
        <enum-type name="PeerVerifyMode"/>
        <modify-function signature="connectToHostEncrypted(const QString&amp;,quint16,QFlags&lt;QIODevice::OpenModeFlag>,QAbstractSocket::NetworkLayerProtocol)" allow-thread="yes"/>
        <modify-function signature="waitForEncrypted(int)" allow-thread="yes"/>
    </object-type>

    <value-type name="QSslPreSharedKeyAuthenticator"/>

    <!-- The above entries may be present in the system or not. Keep this section organized. -->
</typesystem>

