bool EtherIPC::writeRequest(const RequestIPC& request) { fActiveRequest = request; if ( fActiveRequest.burden() == Full ) { emit busyChanged(getBusy()); } QJsonDocument doc(methodToJSON(fActiveRequest)); const QString msg(doc.toJson()); if ( !fSocket.isWritable() ) { setError("Socket not writeable"); fCode = 0; return false; } const QByteArray sendBuf = msg.toUtf8(); EtherLog::logMsg("Sent: " + msg, LS_Debug); const int sent = fSocket.write(sendBuf); if ( sent <= 0 ) { setError("Error on socket write: " + fSocket.errorString()); fCode = 0; return false; } return true; }
bool EtherIPC::closeApp() { fClosingApp = true; fTimer.stop(); if ( fSocket.state() == QLocalSocket::UnconnectedState ) { return true; } if ( fSocket.state() == QLocalSocket::ConnectedState && getBusy() ) { // wait for operation first if we're still connected return false; } if ( fSocket.state() == QLocalSocket::ConnectedState && fFilterID >= 0 ) { // remove filter if still connected uninstallFilter(); return false; } if ( fSocket.state() != QLocalSocket::UnconnectedState ) { // wait for clean disconnect fActiveRequest = RequestIPC(Full); fSocket.disconnectFromServer(); return false; } return true; }
void EtherIPC::done() { fActiveRequest = RequestIPC(None); if ( !fRequestQueue.isEmpty() ) { const RequestIPC request = fRequestQueue.first(); fRequestQueue.removeFirst(); writeRequest(request); } else { emit busyChanged(getBusy()); } }
void DebuggerInterface::UPTdestroy(void *handle) { getBusy(); UPTDestroyCallback *cbp = new UPTDestroyCallback(&dbilock); UPTDestroyCallback &cb = *cbp; cb.enableDelete(false); cb(handle); cb.enableDelete(); releaseBusy(); }
void *DebuggerInterface::UPTcreate(pid_t pid) { getBusy(); void * ret; UPTCreateCallback *cbp = new UPTCreateCallback(&dbilock); UPTCreateCallback &cb = *cbp; cb.enableDelete(false); cb(pid); ret = cb.getReturnValue(); cb.enableDelete(); releaseBusy(); return ret; }
int DebuggerInterface::destroyUnwindAddressSpace(unw_addr_space *as) { getBusy(); int ret; DestroyUnwindAddressSpaceCallback *cbp = new DestroyUnwindAddressSpaceCallback(&dbilock); DestroyUnwindAddressSpaceCallback &cb = *cbp; cb.enableDelete(false); cb(as); ret = cb.getReturnValue(); cb.enableDelete(); releaseBusy(); return ret; }
void * DebuggerInterface::createUnwindAddressSpace(unw_accessors_t *ap, int byteorder) { getBusy(); void * ret; CreateUnwindAddressSpaceCallback *cbp = new CreateUnwindAddressSpaceCallback(&dbilock); CreateUnwindAddressSpaceCallback &cb = *cbp; cb.enableDelete(false); cb(ap, byteorder); ret = cb.getReturnValue(); cb.enableDelete(); releaseBusy(); return ret; }
int DebuggerInterface::setFrameRegister(unw_cursor_t *cp, unw_regnum_t reg, unw_word_t val) { getBusy(); int ret; SetFrameRegisterCallback *cbp = new SetFrameRegisterCallback(&dbilock); SetFrameRegisterCallback &cb = *cbp; cb.enableDelete(false); cb(cp, reg, val); ret = cb.getReturnValue(); cb.enableDelete(); releaseBusy(); return ret; }
int DebuggerInterface::waitpid(pid_t pid, int *status, int options) { getBusy(); int ret; WaitpidCallback *cbp = new WaitpidCallback(&dbilock); WaitpidCallback &cb = *cbp; cb.enableDelete(false); cb(pid, status, options); ret = cb.getReturnValue(); cb.enableDelete(); releaseBusy(); return ret; }
bool DebuggerInterface::isSignalFrame(unw_cursor_t *cp) { getBusy(); bool ret; IsSignalFrameCallback *cbp = new IsSignalFrameCallback(&dbilock); IsSignalFrameCallback &cb = *cbp; cb.enableDelete(false); cb(cp); ret = cb.getReturnValue(); cb.enableDelete(); releaseBusy(); return ret; }
int DebuggerInterface::stepFrameUp(unw_cursor_t *cp) { getBusy(); int ret; StepFrameUpCallback *cbp = new StepFrameUpCallback(&dbilock); StepFrameUpCallback &cb = *cbp; cb.enableDelete(false); cb(cp); ret = cb.getReturnValue(); cb.enableDelete(); releaseBusy(); return ret; }
int DebuggerInterface::initFrame(unw_cursor_t *cp, unw_addr_space_t as, void *arg) { getBusy(); int ret; InitFrameCallback *cbp = new InitFrameCallback(&dbilock); InitFrameCallback &cb = *cbp; cb.enableDelete(false); cb(cp, as, arg); ret = cb.getReturnValue(); cb.enableDelete(); releaseBusy(); return ret; }
void EtherIPC::connectToServer(const QString& path) { if ( fAborted ) { bail(); return; } fActiveRequest = RequestIPC(Full); emit busyChanged(getBusy()); fPath = path; if ( fSocket.state() != QLocalSocket::UnconnectedState ) { setError("Already connected"); return bail(); } fSocket.connectToServer(path); EtherLog::logMsg("Connecting to IPC socket"); QTimer::singleShot(2000, this, SLOT(connectionTimeout())); }
void EtherIPC::connectToServer() { fActiveRequest = RequestIPC(Full); emit busyChanged(getBusy()); if ( fSocket.state() != QLocalSocket::UnconnectedState ) { setError("Already connected"); return bail(); } fSocket.connectToServer(fPath); if ( fConnectAttempts == 0 ) { if ( fStarting == 1 ) { EtherLog::logMsg("Checking to see if there is an already running geth..."); } else { EtherLog::logMsg("Connecting to IPC socket " + fPath); } } QTimer::singleShot(2000, this, SLOT(waitConnect())); }
bool EtherIPC::closeApp() { EtherLog::logMsg("Closing etherwall"); fClosingApp = true; fTimer.stop(); emit closingChanged(true); if ( fSocket.state() == QLocalSocket::ConnectedState && getBusy() ) { // wait for operation first if we're still connected return false; } if ( fSocket.state() == QLocalSocket::ConnectedState ) { bool removed = false; if ( !fBlockFilterID.isEmpty() ) { // remove block filter if still connected uninstallFilter(fBlockFilterID); fBlockFilterID.clear(); removed = true; } if ( !fEventFilterID.isEmpty() ) { // remove event filter if still connected uninstallFilter(fEventFilterID); fEventFilterID.clear(); removed = true; } if ( removed ) { return false; } } if ( fSocket.state() != QLocalSocket::UnconnectedState ) { // wait for clean disconnect fActiveRequest = RequestIPC(Full); fSocket.disconnectFromServer(); return false; } return killGeth(); }
void EtherIPC::onSocketReadyRead() { if ( !getBusy() ) { return; // probably error-ed out } if ( !readData() ) { return; // not finished yet } switch ( fActiveRequest.getType() ) { case NewAccount: { handleNewAccount(); break; } case DeleteAccount: { handleDeleteAccount(); break; } case GetBlockNumber: { handleGetBlockNumber(); break; } case GetAccountRefs: { handleGetAccounts(); break; } case GetBalance: { handleAccountBalance(); break; } case GetTransactionCount: { handleAccountTransactionCount(); break; } case GetPeerCount: { handleGetPeerCount(); break; } case SendTransaction: { handleSendTransaction(); break; } case UnlockAccount: { handleUnlockAccount(); break; } case GetGasPrice: { handleGetGasPrice(); break; } case EstimateGas: { handleEstimateGas(); break; } case NewFilter: { handleNewFilter(); break; } case GetFilterChanges: { handleGetFilterChanges(); break; } case UninstallFilter: { handleUninstallFilter(); break; } case GetTransactionByHash: { handleGetTransactionByHash(); break; } case GetBlock: { handleGetBlock(); break; } case GetClientVersion: { handleGetClientVersion(); break; } default: qDebug() << "Unknown reply: " << fActiveRequest.getType() << "\n"; break; } }