void ConnAliveThread::closeConnection()
{
    //qDebug()<<"closeConnection0"<<*ptr_ConnPtr<<URI;
    if ( keep_alive ) {
        keep_alive = false;
        return;
    };
    //qDebug()<<"closeConnection1"<<*ptr_ConnPtr<<URI;
    CONN_STATE state;
    if ( *ptr_ConnPtr!=NULL ) {
        //qDebug()<<"closeConnection2"<<*ptr_ConnPtr<<URI;
        unregisterConnEvents();
        //qDebug()<<"closeConnection3"<<*ptr_ConnPtr<<URI;
        int ret = virConnectClose(*ptr_ConnPtr);
        //qDebug()<<"virConnectRef -1"<<"ConnAliveThread"<<URI<<(ret+1>0);
        if ( ret<0 ) {
            state = FAILED;
            sendConnErrors();
        } else {
            emit connMsg( QString("close exit code: %1").arg(ret) );
            state = CLOSED;
            emit connClosed(onView);
        };
        *ptr_ConnPtr = NULL;
    } else {
        emit connMsg( QString("connect is NULL") );
        state = FAILED;
    };
    emit changeConnState(state);
}
void ConnElement::forwardConnClosedSignal(bool onView)
{
    emit connClosed(onView, name);
}
Example #3
0
void telnetd_appcall(void) {

  if(uip_connected()) {
    telnetState = 0;
    txData.data[0] = TELNET_IAC;
    txData.data[1] = TELNET_WILL;
    txData.data[2] = TELNET_MODE_LINEMODE;
    txData.length = 3;
    uip_send( txData.data, txData.length );
  }

  if(uip_closed() ||
    uip_aborted() ||
    uip_timedout()) {
    telnetState = 0;
    txData.length = 0;
  }

  if(uip_acked()) {
    txData.length = 0;
  }

  if(uip_newdata()) {
    if( telnetState & 128 ) {
      UART0PushSend( uip_appdata, uip_datalen() );
    }
    else {
      u8_t rxDataByte, rxDataLength = uip_datalen();
      for( rxDataByte = 0; rxDataByte < rxDataLength && telnetState < rxExpectedCount; ) {
        if( ((uint8_t*)uip_appdata)[rxDataByte++] != rxExpected[telnetState] ) {
          if( telnetState < 17 )
            telnetState = 10;
          if( telnetState < 10 )
            telnetState = 3;
          if( telnetState < 3 )
            telnetState = 0;
          uip_close();
          connClosed();
          return;
        }
      }
      if( telnetState == rxExpectedCount ) {
        telnetState = 128;
        return;
      }
      switch( telnetState ) {
        case 0:
          txData.data[0] = TELNET_IAC;
          txData.data[1] = TELNET_WILL;
          txData.data[2] = TELNET_MODE_LINEMODE;
          txData.length = 3;
          uip_send( txData.data, txData.length );
          break;
        case 3:
          txData.data[0] = TELNET_IAC;
          txData.data[1] = TELNET_SB;
          txData.data[2] = TELNET_MODE_LINEMODE;
          txData.data[3] = TELNET_MODE_LINEMODE_EDIT;
          txData.data[4] = 0;
          txData.data[5] = TELNET_IAC;
          txData.data[6] = TELNET_SE;
          txData.length = 7;
          uip_send( txData.data, txData.length );
          break;
        case 10:
          txData.data[0] = TELNET_IAC;
          txData.data[1] = TELNET_SB;
          txData.data[2] = TELNET_MODE_LINEMODE;
          txData.data[3] = TELNET_MODE_LINEMODE_TRAPSIG;
          txData.data[4] = 0;
          txData.data[5] = TELNET_IAC;
          txData.data[6] = TELNET_SE;
          txData.length = 7;
          uip_send( txData.data, txData.length );
          break;
      }
    }
  }

  if( uip_rexmit() ) {
    uip_send( txData.data, txData.length );
  }
}