コード例 #1
0
ファイル: etheripc.cpp プロジェクト: oktoshi/SOILsafe
    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;
    }
コード例 #2
0
ファイル: etheripc.cpp プロジェクト: oktoshi/SOILsafe
    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;
    }
コード例 #3
0
ファイル: etheripc.cpp プロジェクト: oktoshi/SOILsafe
 void EtherIPC::done() {
     fActiveRequest = RequestIPC(None);
     if ( !fRequestQueue.isEmpty() ) {
         const RequestIPC request = fRequestQueue.first();
         fRequestQueue.removeFirst();
         writeRequest(request);
     } else {
         emit busyChanged(getBusy());
     }
 }
コード例 #4
0
ファイル: linux-ia64.C プロジェクト: vishalmistry/imitate
void DebuggerInterface::UPTdestroy(void *handle)
{
  getBusy();
  UPTDestroyCallback *cbp = new UPTDestroyCallback(&dbilock);
  UPTDestroyCallback &cb = *cbp;

  cb.enableDelete(false);
  cb(handle);
  cb.enableDelete();

  releaseBusy();
}
コード例 #5
0
ファイル: linux-ia64.C プロジェクト: vishalmistry/imitate
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;
}
コード例 #6
0
ファイル: linux-ia64.C プロジェクト: vishalmistry/imitate
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;
}
コード例 #7
0
ファイル: linux-ia64.C プロジェクト: vishalmistry/imitate
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;
}
コード例 #8
0
ファイル: linux-ia64.C プロジェクト: vishalmistry/imitate
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;
}
コード例 #9
0
ファイル: linux-ia64.C プロジェクト: vishalmistry/imitate
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;
}
コード例 #10
0
ファイル: linux-ia64.C プロジェクト: vishalmistry/imitate
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;
}
コード例 #11
0
ファイル: linux-ia64.C プロジェクト: vishalmistry/imitate
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;
}
コード例 #12
0
ファイル: linux-ia64.C プロジェクト: vishalmistry/imitate
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;
}
コード例 #13
0
ファイル: etheripc.cpp プロジェクト: oktoshi/SOILsafe
    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()));
    }
コード例 #14
0
ファイル: etheripc.cpp プロジェクト: almindor/etherwall
    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()));
    }
コード例 #15
0
ファイル: etheripc.cpp プロジェクト: almindor/etherwall
    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();
    }
コード例 #16
0
ファイル: etheripc.cpp プロジェクト: oktoshi/SOILsafe
    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;
        }
    }