diff options
author | Oliver Wolff <oliver.wolff@digia.com> | 2014-02-13 11:32:38 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-15 10:50:12 +0100 |
commit | 553c6416bb7219d7ab1b40579895bc3ebaeb87c7 (patch) | |
tree | 2158ab72a12f13b242f1da97ee9b47f5ff738d8f /src/network/socket/qnativesocketengine_winrt_p.h | |
parent | 315b6a6a849cdd6a347d80d4a32d873595de556f (diff) |
WinRT: Added socket engine implementation
Added basic functionality to socket for WinRT. Even though not
all auto tests pass yet, this patch can be seen as a foundation
for upcoming work in this area. Reading from and writing to TCP
socket works and one can listen for tcp connections.
Change-Id: Id4c25ba1c7187ed92b6368c785c4f62837faded7
Reviewed-by: Andrew Knight <andrew.knight@digia.com>
Diffstat (limited to 'src/network/socket/qnativesocketengine_winrt_p.h')
-rw-r--r-- | src/network/socket/qnativesocketengine_winrt_p.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/network/socket/qnativesocketengine_winrt_p.h b/src/network/socket/qnativesocketengine_winrt_p.h index 47ba3ecf91..b5be5fa830 100644 --- a/src/network/socket/qnativesocketengine_winrt_p.h +++ b/src/network/socket/qnativesocketengine_winrt_p.h @@ -138,6 +138,70 @@ class QNativeSocketEnginePrivate : public QAbstractSocketEnginePrivate public: QNativeSocketEnginePrivate(); ~QNativeSocketEnginePrivate(); + + qintptr socketDescriptor; + + bool notifyOnRead, notifyOnWrite, notifyOnException; + bool closingDown; + + enum ErrorString { + NonBlockingInitFailedErrorString, + BroadcastingInitFailedErrorString, + NoIpV6ErrorString, + RemoteHostClosedErrorString, + TimeOutErrorString, + ResourceErrorString, + OperationUnsupportedErrorString, + ProtocolUnsupportedErrorString, + InvalidSocketErrorString, + HostUnreachableErrorString, + NetworkUnreachableErrorString, + AccessErrorString, + ConnectionTimeOutErrorString, + ConnectionRefusedErrorString, + AddressInuseErrorString, + AddressNotAvailableErrorString, + AddressProtectedErrorString, + DatagramTooLargeErrorString, + SendDatagramErrorString, + ReceiveDatagramErrorString, + WriteErrorString, + ReadErrorString, + PortInuseErrorString, + NotSocketErrorString, + InvalidProxyTypeString, + TemporaryErrorString, + + UnknownSocketErrorString = -1 + }; + + void setError(QAbstractSocket::SocketError error, ErrorString errorString) const; + + // native functions + int option(QNativeSocketEngine::SocketOption option) const; + bool setOption(QNativeSocketEngine::SocketOption option, int value); + + bool createNewSocket(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol &protocol); + + bool checkProxy(const QHostAddress &address); + bool fetchConnectionParameters(); +private: + union { + ABI::Windows::Networking::Sockets::IStreamSocket *tcp; + ABI::Windows::Networking::Sockets::IDatagramSocket *udp; + }; + Microsoft::WRL::ComPtr<ABI::Windows::Networking::Sockets::IStreamSocketListener> tcpListener; + Microsoft::WRL::ComPtr<ABI::Windows::Storage::Streams::IBuffer> inputBuffer; + QList<ABI::Windows::Networking::Sockets::IDatagramSocketMessageReceivedEventArgs *> pendingDatagrams; + QList<ABI::Windows::Networking::Sockets::IStreamSocket *> pendingConnections; + QList<ABI::Windows::Networking::Sockets::IStreamSocket *> currentConnections; + + HRESULT handleNewDatagram(ABI::Windows::Networking::Sockets::IDatagramSocket *socket, + ABI::Windows::Networking::Sockets::IDatagramSocketMessageReceivedEventArgs *args); + HRESULT handleClientConnection(ABI::Windows::Networking::Sockets::IStreamSocketListener *tcpListener, + ABI::Windows::Networking::Sockets::IStreamSocketListenerConnectionReceivedEventArgs *args); + static HRESULT interruptEventDispatcher(ABI::Windows::Foundation::IAsyncAction *, ABI::Windows::Foundation::AsyncStatus); + static HRESULT handleReadyRead(ABI::Windows::Foundation::IAsyncOperationWithProgress<ABI::Windows::Storage::Streams::IBuffer *, UINT32> *asyncInfo, ABI::Windows::Foundation::AsyncStatus); }; QT_END_NAMESPACE |