made gui compatible with new version of ipc protocol.
This commit is contained in:
parent
82d91605fa
commit
19ccba8126
|
@ -37,7 +37,8 @@ SOURCES += src/main.cpp \
|
|||
src/VersionChecker.cpp \
|
||||
src/SetupWizard.cpp \
|
||||
src/IpcClient.cpp \
|
||||
src/IpcReader.cpp
|
||||
src/IpcReader.cpp \
|
||||
src/Ipc.cpp
|
||||
HEADERS += src/MainWindow.h \
|
||||
src/AboutDialog.h \
|
||||
src/ServerConfig.h \
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* synergy -- mouse and keyboard sharing utility
|
||||
* Copyright (C) 2012 Nick Bolton
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Ipc.h"
|
||||
|
||||
const char* kIpcMsgHello = "IHEL%1i";
|
||||
const char* kIpcMsgLogLine = "ILOG%s";
|
||||
const char* kIpcMsgCommand = "ICMD%s";
|
||||
const char* kIpcMsgShutdown = "ISDN";
|
|
@ -32,3 +32,8 @@ enum qIpcClientType {
|
|||
kIpcClientGui,
|
||||
kIpcClientNode,
|
||||
};
|
||||
|
||||
extern const char* kIpcMsgHello;
|
||||
extern const char* kIpcMsgLogLine;
|
||||
extern const char* kIpcMsgCommand;
|
||||
extern const char* kIpcMsgShutdown;
|
||||
|
|
|
@ -71,19 +71,18 @@ void IpcClient::write(int code, int length, const char* data)
|
|||
{
|
||||
QDataStream stream(m_Socket);
|
||||
|
||||
char codeBuf[1];
|
||||
codeBuf[0] = code;
|
||||
stream.writeRawData(codeBuf, 1);
|
||||
|
||||
switch (code) {
|
||||
case kIpcHello:
|
||||
stream.writeRawData(kIpcMsgHello, 4);
|
||||
stream.writeRawData(data, 1);
|
||||
break;
|
||||
|
||||
case kIpcCommand: {
|
||||
char lenBuf[2];
|
||||
intToBytes(length, lenBuf, 2);
|
||||
stream.writeRawData(lenBuf, 2);
|
||||
char lenBuf[4];
|
||||
intToBytes(length, lenBuf, 4);
|
||||
|
||||
stream.writeRawData(kIpcMsgCommand, 4);
|
||||
stream.writeRawData(lenBuf, 4);
|
||||
stream.writeRawData(data, length);
|
||||
break;
|
||||
}
|
||||
|
@ -102,10 +101,19 @@ void IpcClient::handleReadLogLine(const QString& text)
|
|||
// TODO: qt must have a built in way of converting int to bytes.
|
||||
void IpcClient::intToBytes(int value, char *buffer, int size)
|
||||
{
|
||||
if (size == 2) {
|
||||
if (size == 1) {
|
||||
buffer[0] = value & 0xff;
|
||||
}
|
||||
else if (size == 2) {
|
||||
buffer[0] = (value >> 8) & 0xff;
|
||||
buffer[1] = value & 0xff;
|
||||
}
|
||||
else if (size == 4) {
|
||||
buffer[0] = (value >> 24) & 0xff;
|
||||
buffer[1] = (value >> 16) & 0xff;
|
||||
buffer[2] = (value >> 8) & 0xff;
|
||||
buffer[3] = value & 0xff;
|
||||
}
|
||||
else {
|
||||
// TODO: other sizes, if needed.
|
||||
}
|
||||
|
|
|
@ -44,30 +44,28 @@ void IpcReader::read()
|
|||
while (m_Socket->bytesAvailable()) {
|
||||
std::cout << "bytes available" << std::endl;
|
||||
|
||||
char codeBuf[1];
|
||||
readStream(codeBuf, 1);
|
||||
int code = bytesToInt(codeBuf, 1);
|
||||
char codeBuf[5];
|
||||
readStream(codeBuf, 4);
|
||||
codeBuf[4] = 0;
|
||||
std::cout << "ipc read: " << codeBuf << std::endl;
|
||||
|
||||
switch (code) {
|
||||
case kIpcLogLine: {
|
||||
std::cout << "reading log line" << std::endl;
|
||||
if (memcmp(codeBuf, kIpcMsgLogLine, 4) == 0) {
|
||||
std::cout << "reading log line" << std::endl;
|
||||
|
||||
char lenBuf[4];
|
||||
readStream(lenBuf, 4);
|
||||
int len = bytesToInt(lenBuf, 4);
|
||||
char lenBuf[4];
|
||||
readStream(lenBuf, 4);
|
||||
int len = bytesToInt(lenBuf, 4);
|
||||
|
||||
char* data = new char[len];
|
||||
readStream(data, len);
|
||||
QString line = QString::fromUtf8(data, len);
|
||||
delete data;
|
||||
char* data = new char[len];
|
||||
readStream(data, len);
|
||||
QString line = QString::fromUtf8(data, len);
|
||||
delete data;
|
||||
|
||||
readLogLine(line);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
std::cerr << "aborting, message invalid: " << code << std::endl;
|
||||
return;
|
||||
readLogLine(line);
|
||||
}
|
||||
else {
|
||||
std::cerr << "aborting, message invalid" << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue