IXWebSocket/ixwebsocket/IXSocketSChannel.cpp

101 lines
2.1 KiB
C++
Raw Normal View History

2018-12-30 03:33:15 +01:00
/*
* IXSocketSChannel.cpp
* Author: Benjamin Sergeant
* Copyright (c) 2018 Machine Zone, Inc. All rights reserved.
*
* See https://docs.microsoft.com/en-us/windows/desktop/WinSock/using-secure-socket-extensions
*
* https://github.com/pauldotknopf/WindowsSDK7-Samples/blob/master/netds/winsock/securesocket/stcpclient/tcpclient.c
*
* This is the right example to look at:
* https://www.codeproject.com/Articles/1000189/A-Working-TCP-Client-and-Server-With-SSL
*/
#include "IXSocketSChannel.h"
#ifdef _WIN32
2019-09-23 19:25:23 +02:00
#include <WS2tcpip.h>
#include <WinSock2.h>
#include <basetsd.h>
#include <io.h>
#include <schannel.h>
#include <ws2def.h>
2018-12-30 03:33:15 +01:00
#define WIN32_LEAN_AND_MEAN
#ifndef UNICODE
#define UNICODE
#endif
#include <mstcpip.h>
#include <ntdsapi.h>
2019-09-23 19:25:23 +02:00
#include <rpc.h>
2018-12-30 03:33:15 +01:00
#include <stdio.h>
#include <tchar.h>
2019-09-23 19:25:23 +02:00
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
2018-12-30 03:33:15 +01:00
#define RECV_DATA_BUF_SIZE 256
// Link with ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")
// link with fwpuclnt.lib for Winsock secure socket extensions
#pragma comment(lib, "fwpuclnt.lib")
// link with ntdsapi.lib for DsMakeSpn function
#pragma comment(lib, "ntdsapi.lib")
// The following function assumes that Winsock
2018-12-30 03:33:15 +01:00
// has already been initialized
#else
2019-09-23 19:25:23 +02:00
#error("This file should only be built on Windows")
2018-12-30 03:33:15 +01:00
#endif
namespace ix
2018-12-30 03:33:15 +01:00
{
SocketSChannel::SocketSChannel()
{
;
}
SocketSChannel::~SocketSChannel()
{
}
2019-09-23 19:25:23 +02:00
bool SocketSChannel::connect(const std::string& host, int port, std::string& errMsg)
2018-12-30 03:33:15 +01:00
{
return Socket::connect(host, port, errMsg, nullptr);
2018-12-30 03:33:15 +01:00
}
2018-12-30 03:33:15 +01:00
void SocketSChannel::secureSocket()
{
// there will be a lot to do here ...
}
void SocketSChannel::close()
{
Socket::close();
}
ssize_t SocketSChannel::send(char* buf, size_t nbyte)
2018-12-30 03:33:15 +01:00
{
return Socket::send(buf, nbyte);
}
ssize_t SocketSChannel::send(const std::string& buffer)
2018-12-30 03:33:15 +01:00
{
return Socket::send(buffer);
}
ssize_t SocketSChannel::recv(void* buf, size_t nbyte)
2018-12-30 03:33:15 +01:00
{
return Socket::recv(buf, nbyte);
}
2019-09-23 19:25:23 +02:00
} // namespace ix