increased ipc message length.
This commit is contained in:
parent
7d5fbde71d
commit
0537bbdfad
|
@ -44,14 +44,15 @@ void IpcClient::read()
|
||||||
|
|
||||||
switch (codeBuf[0]) {
|
switch (codeBuf[0]) {
|
||||||
case kIpcLogLine: {
|
case kIpcLogLine: {
|
||||||
char lenBuf[1];
|
// TODO: qt must have a built in way of converting bytes to int.
|
||||||
stream.readRawData(lenBuf, 1);
|
char lenBuf[2];
|
||||||
|
stream.readRawData(lenBuf, 2);
|
||||||
|
int len = (lenBuf[0] << 8) + lenBuf[1];
|
||||||
|
|
||||||
char* data = new char[lenBuf[0] + 1];
|
char* data = new char[len];
|
||||||
stream.readRawData(data, lenBuf[0]);
|
stream.readRawData(data, len);
|
||||||
data[(int)lenBuf[0]] = 0;
|
|
||||||
|
|
||||||
QString s(data);
|
QString s = QString::fromUtf8(data, len);
|
||||||
readLogLine(s);
|
readLogLine(s);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -60,7 +61,7 @@ void IpcClient::read()
|
||||||
|
|
||||||
void IpcClient::error(QAbstractSocket::SocketError error)
|
void IpcClient::error(QAbstractSocket::SocketError error)
|
||||||
{
|
{
|
||||||
errorMessage("ERROR: Could not connect to background service.");
|
errorMessage(QString("ERROR: could not connect to background service, code=%1").arg(error));
|
||||||
}
|
}
|
||||||
|
|
||||||
void IpcClient::write(unsigned char code, unsigned char length, const char* data)
|
void IpcClient::write(unsigned char code, unsigned char length, const char* data)
|
||||||
|
@ -73,9 +74,12 @@ void IpcClient::write(unsigned char code, unsigned char length, const char* data
|
||||||
|
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case kIpcCommand: {
|
case kIpcCommand: {
|
||||||
char lenBuf[1];
|
// TODO: qt must have a built in way of converting int to bytes.
|
||||||
lenBuf[0] = length;
|
char lenBuf[2];
|
||||||
stream.writeRawData(lenBuf, 1);
|
lenBuf[0] = (length >> 8) & 0xff;
|
||||||
|
lenBuf[1] = length & 0xff;
|
||||||
|
stream.writeRawData(lenBuf, 2);
|
||||||
|
|
||||||
stream.writeRawData(data, length);
|
stream.writeRawData(data, length);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -93,7 +93,7 @@ MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig) :
|
||||||
connect(&m_IpcClient, SIGNAL(readLogLine(const QString&)), this, SLOT(appendLog(const QString&)));
|
connect(&m_IpcClient, SIGNAL(readLogLine(const QString&)), this, SLOT(appendLog(const QString&)));
|
||||||
connect(&m_IpcClient, SIGNAL(errorMessage(const QString&)), this, SLOT(appendLog(const QString&)));
|
connect(&m_IpcClient, SIGNAL(errorMessage(const QString&)), this, SLOT(appendLog(const QString&)));
|
||||||
m_IpcClient.connectToHost();
|
m_IpcClient.connectToHost();
|
||||||
appendLog("INFO: Connecting to background service...");
|
appendLog("INFO: connecting to background service...");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "Ipc.h"
|
#include "Ipc.h"
|
||||||
#include "CLog.h"
|
#include "CLog.h"
|
||||||
#include "CIpcMessage.h"
|
#include "CIpcMessage.h"
|
||||||
|
#include "CProtocolUtil.h"
|
||||||
|
|
||||||
CEvent::Type CIpcClientProxy::s_messageReceivedEvent = CEvent::kUnknown;
|
CEvent::Type CIpcClientProxy::s_messageReceivedEvent = CEvent::kUnknown;
|
||||||
|
|
||||||
|
@ -88,11 +89,9 @@ CIpcClientProxy::send(const CIpcMessage& message)
|
||||||
case kIpcLogLine: {
|
case kIpcLogLine: {
|
||||||
CString* s = (CString*)message.m_data;
|
CString* s = (CString*)message.m_data;
|
||||||
const char* data = s->c_str();
|
const char* data = s->c_str();
|
||||||
int len = strlen(data);
|
|
||||||
|
|
||||||
UInt8 lenBuf[1];
|
int len = strlen(data);
|
||||||
lenBuf[0] = len;
|
CProtocolUtil::writef(&m_stream, "%2i", len);
|
||||||
m_stream.write(lenBuf, 1);
|
|
||||||
|
|
||||||
m_stream.write(data, len);
|
m_stream.write(data, len);
|
||||||
}
|
}
|
||||||
|
@ -109,13 +108,13 @@ CIpcClientProxy::send(const CIpcMessage& message)
|
||||||
void*
|
void*
|
||||||
CIpcClientProxy::parseCommand()
|
CIpcClientProxy::parseCommand()
|
||||||
{
|
{
|
||||||
UInt8 len[1];
|
int len = 0;
|
||||||
m_stream.read(len, 1);
|
CProtocolUtil::readf(&m_stream, "%2i", &len);
|
||||||
|
|
||||||
UInt8* buffer = new UInt8[len[0]];
|
UInt8* buffer = new UInt8[len];
|
||||||
m_stream.read(buffer, len[0]);
|
m_stream.read(buffer, len);
|
||||||
|
|
||||||
return new CString((const char*)buffer, len[0]);
|
return new CString((const char*)buffer, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "CLog.h"
|
#include "CLog.h"
|
||||||
#include "CIpcMessage.h"
|
#include "CIpcMessage.h"
|
||||||
#include "Ipc.h"
|
#include "Ipc.h"
|
||||||
|
#include "CProtocolUtil.h"
|
||||||
|
|
||||||
CEvent::Type CIpcServerProxy::s_messageReceivedEvent = CEvent::kUnknown;
|
CEvent::Type CIpcServerProxy::s_messageReceivedEvent = CEvent::kUnknown;
|
||||||
|
|
||||||
|
@ -80,12 +81,12 @@ CIpcServerProxy::send(const CIpcMessage& message)
|
||||||
switch (message.m_type) {
|
switch (message.m_type) {
|
||||||
case kIpcCommand: {
|
case kIpcCommand: {
|
||||||
CString* s = (CString*)message.m_data;
|
CString* s = (CString*)message.m_data;
|
||||||
|
const char* data = s->c_str();
|
||||||
|
|
||||||
UInt8 len[1];
|
int len = strlen(data);
|
||||||
len[0] = s->size();
|
CProtocolUtil::writef(&m_stream, "%2i", len);
|
||||||
m_stream.write(len, 1);
|
|
||||||
|
|
||||||
m_stream.write(s->c_str(), s->size());
|
m_stream.write(data, len);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -98,13 +99,13 @@ CIpcServerProxy::send(const CIpcMessage& message)
|
||||||
void*
|
void*
|
||||||
CIpcServerProxy::parseLogLine()
|
CIpcServerProxy::parseLogLine()
|
||||||
{
|
{
|
||||||
UInt8 len[1];
|
int len = 0;
|
||||||
m_stream.read(len, 1);
|
CProtocolUtil::readf(&m_stream, "%2i", &len);
|
||||||
|
|
||||||
UInt8* buffer = new UInt8[len[0]];
|
UInt8* buffer = new UInt8[len];
|
||||||
m_stream.read(buffer, len[0]);
|
m_stream.read(buffer, len);
|
||||||
|
|
||||||
return new CString((const char*)buffer, len[0]);
|
return new CString((const char*)buffer, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -43,6 +43,7 @@ set(inc
|
||||||
../io
|
../io
|
||||||
../mt
|
../mt
|
||||||
../net
|
../net
|
||||||
|
../synergy
|
||||||
)
|
)
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
|
@ -55,5 +56,5 @@ include_directories(${inc})
|
||||||
add_library(ipc STATIC ${src})
|
add_library(ipc STATIC ${src})
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
target_link_libraries(arch base common mt io net)
|
target_link_libraries(arch base common mt io net synergy)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -277,11 +277,12 @@ CDaemonApp::handleIpcMessage(const CEvent& e, void*)
|
||||||
{
|
{
|
||||||
CIpcMessage& m = *reinterpret_cast<CIpcMessage*>(e.getData());
|
CIpcMessage& m = *reinterpret_cast<CIpcMessage*>(e.getData());
|
||||||
|
|
||||||
LOG((CLOG_DEBUG "ipc message: %d", m.m_type));
|
LOG((CLOG_DEBUG "ipc message, type=%d", m.m_type));
|
||||||
|
|
||||||
switch (m.m_type) {
|
switch (m.m_type) {
|
||||||
case kIpcCommand: {
|
case kIpcCommand: {
|
||||||
CString& command = *reinterpret_cast<CString*>(m.m_data);
|
CString& command = *reinterpret_cast<CString*>(m.m_data);
|
||||||
|
LOG((CLOG_DEBUG "got new command: %s", command.c_str()));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// store command in system settings. this is used when the daemon
|
// store command in system settings. this is used when the daemon
|
||||||
|
@ -289,7 +290,7 @@ CDaemonApp::handleIpcMessage(const CEvent& e, void*)
|
||||||
ARCH->setting("Command", command);
|
ARCH->setting("Command", command);
|
||||||
}
|
}
|
||||||
catch (XArch& e) {
|
catch (XArch& e) {
|
||||||
//LOG((CLOG_ERR "failed to save setting: %s", e.what().c_str()));
|
LOG((CLOG_ERR "failed to save setting, %s", e.what().c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// tell the relauncher about the new command. this causes the
|
// tell the relauncher about the new command. this causes the
|
||||||
|
@ -300,7 +301,7 @@ CDaemonApp::handleIpcMessage(const CEvent& e, void*)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
LOG((CLOG_ERR "ipc message not supported: %d", m.m_type));
|
LOG((CLOG_ERR "ipc message not supported, type=%d", m.m_type));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue