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