/*
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2014 Bolton Software Ltd.
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* found in the file COPYING that should have accompanied this file.
*
* This package is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include "CArchInternetWindows.h"
#include "CArch.h"
#include "Version.h"
#include "XArchWindows.h"
#include
#include
CString
CArchInternetWindows::get(const CString& url)
{
std::stringstream userAgent;
userAgent << "Synergy ";
userAgent << kVersion;
HINTERNET session = InternetOpen(
userAgent.str().c_str(),
INTERNET_OPEN_TYPE_PRECONFIG,
NULL, NULL, NULL);
if (session == NULL) {
throw XArch(new XArchEvalWindows());
}
// InternetCrackUrl didn't seem to work too well, this isn't quite
// as robust, but it should do just fine for basic URLs.
size_t schemeEnd = url.find("://");
size_t hostEnd = url.find('/', schemeEnd + 3);
CString scheme = url.substr(0, schemeEnd);
CString host = url.substr(schemeEnd + 3, hostEnd - (schemeEnd + 3));
CString path = url.substr(hostEnd);
INTERNET_PORT port = INTERNET_DEFAULT_HTTP_PORT;
DWORD requestFlags = 0;
if (scheme.find("https") != CString::npos) {
port = INTERNET_DEFAULT_HTTPS_PORT;
requestFlags = INTERNET_FLAG_SECURE;
}
HINTERNET connect = InternetConnect(
session, host.c_str(), port, NULL, NULL,
INTERNET_SERVICE_HTTP, NULL, NULL);
if (connect == NULL) {
throw XArch(new XArchEvalWindows());
}
HINTERNET request = HttpOpenRequest(
connect, "GET", path.c_str(),
HTTP_VERSION, NULL,
NULL, requestFlags, NULL);
if (request == NULL) {
throw XArch(new XArchEvalWindows());
}
CString headers("Content-Type: text/html");
if (!HttpSendRequest(request, headers.c_str(), (DWORD)headers.length(), NULL, NULL)) {
int error = GetLastError();
throw XArch(new XArchEvalWindows());
}
std::stringstream result;
CHAR buffer[1025];
DWORD read = 0;
while (InternetReadFile(request, buffer, sizeof(buffer) - 1, &read) && (read != 0)) {
buffer[read] = 0;
result << buffer;
read = 0;
}
InternetCloseHandle(request);
InternetCloseHandle(connect);
InternetCloseHandle(session);
return result.str();
}
/*
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2014 Bolton Software Ltd.
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* found in the file COPYING that should have accompanied this file.
*
* This package is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include "CArchInternetWindows.h"
CString
CArchInternetWindows::get(const CString& url)
{
return "Hello bob!";
}