void ChangePasswordCommand::watcher() { disableNotifiers(); if ( gg_pubdir_watch_fd( session_ ) == -1 ) { gg_change_passwd_free( session_ ); emit error( i18n( "Connection Error" ), i18n( "Password changing finished prematurely due to a connection error." ) ); done_ = true; deleteLater(); return; } if ( session_->state == GG_STATE_ERROR ) { gg_free_change_passwd( session_ ); emit error( i18n( "State Error" ), i18n( "Password changing finished prematurely due to a session related problem (try again later)." ) ); done_ = true; deleteLater(); return; } if ( session_->state == GG_STATE_DONE ) { emit done( i18n( "Changed Password" ), i18n( "Your password has been changed." ) ); gg_free_change_passwd( session_ ); done_ = true; deleteLater(); return; } enableNotifiers( session_->check ); }
void RemindPasswordCommand::watcher() { disableNotifiers(); if ( gg_remind_passwd_watch_fd( session_ ) == -1 ) { gg_free_remind_passwd( session_ ); emit error( i18n( "Connection Error" ), i18n( "Password reminding finished prematurely due to a connection error." ) ); done_ = true; deleteLater(); return; } if ( session_->state == GG_STATE_ERROR ) { gg_free_remind_passwd( session_ ); emit error( i18n( "Connection Error" ), i18n( "Password reminding finished prematurely due to a connection error." ) ); done_ = true; deleteLater(); return; } if ( session_->state == GG_STATE_DONE ) { struct gg_pubdir* p = static_cast<struct gg_pubdir*>( session_->data ); QString finished = (p->success) ? i18n( "Success" ) : i18n( "Unsuccessful. Please retry." ); emit done( i18n( "Remind Password" ), i18n( "Remind password finished: " ) + finished ); gg_free_remind_passwd( session_ ); done_ = true; deleteLater(); return; } enableNotifiers( session_->check ); }
void GaduSession::destroyNotifiers() { disableNotifiers(); if ( read_ ) { delete read_; read_ = NULL; } if ( write_ ) { delete write_; write_ = NULL; } }
void GaduDCCServer::destroyNotifiers() { disableNotifiers(); if ( read_ ) { delete read_; read_ = NULL; } if ( write_ ) { delete write_; write_ = NULL; } }
void GaduDCCServer::closeDCC() { if ( dccSock ) { disableNotifiers(); destroyNotifiers(); gg_dcc_free( dccSock ); dccSock = NULL; gg_dcc_ip = 0; gg_dcc_port = 0; } }
void GaduDCCServer::watcher() { gg_event* dccEvent; bool handled = false; disableNotifiers(); dccEvent = gg_dcc_watch_fd( dccSock ); if ( ! dccEvent ) { // connection is f****d // we should try to reenable it // closeDCC(); return; } switch ( dccEvent->type ) { case GG_EVENT_NONE: break; case GG_EVENT_DCC_ERROR: kdDebug( 14100 ) << " dcc error occured " << endl; break; case GG_EVENT_DCC_NEW: // I do expect reciver to set this boolean to true if he handled signal // if so, no other reciver should be bothered with it, and I shall not close it // otherwise connection is closed as not handled emit incoming( dccEvent->event.dcc_new, handled ); if ( !handled ) { if ( dccEvent->event.dcc_new->file_fd > 0) { close( dccEvent->event.dcc_new->file_fd ); } gg_dcc_free( dccEvent->event.dcc_new ); } break; default: kdDebug(14100) << "unknown/unhandled DCC EVENT: " << dccEvent->type << endl; break; } if ( dccEvent ) { gg_free_event( dccEvent ); } enableNotifiers( dccSock->check ); }
void GaduSession::checkDescriptor() { disableNotifiers(); struct gg_event* event; // struct gg_dcc* dccSock; KGaduMessage gaduMessage; KGaduNotify gaduNotify; if ( !( event = gg_watch_fd( session_ ) ) ) { kdDebug(14100)<<"Connection was broken for some reason"<<endl; destroyNotifiers(); logoff( Kopete::Account::ConnectionReset ); return; } // FD changed, recreate socket notifiers if ( session_->state == GG_STATE_CONNECTING_HUB || session_->state == GG_STATE_CONNECTING_GG ) { kdDebug(14100)<<"recreating notifiers"<<endl; destroyNotifiers(); createNotifiers( true ); } switch( event->type ) { case GG_EVENT_MSG: kdDebug(14100) << "incoming message:class:" << event->event.msg.msgclass << endl; if ( event->event.msg.msgclass & GG_CLASS_CTCP ) { kdDebug( 14100 ) << "incomming ctcp " << endl; // TODO: DCC CONNECTION emit incomingCtcp( event->event.msg.sender ); } if ( (event->event.msg.msgclass & GG_CLASS_MSG) || (event->event.msg.msgclass & GG_CLASS_CHAT) ) { gaduMessage.message = textcodec->toUnicode((const char*)event->event.msg.message); gaduMessage.sender_id = event->event.msg.sender; gaduMessage.sendTime.setTime_t( event->event.msg.time, Qt::LocalTime ); gaduMessage.message = rtf->convertToHtml( gaduMessage.message, event->event.msg.formats_length, event->event.msg.formats ); emit messageReceived( &gaduMessage ); } break; case GG_EVENT_ACK: emit ackReceived( event->event.ack.recipient ); break; case GG_EVENT_STATUS: gaduNotify.status = event->event.status.status; gaduNotify.contact_id = event->event.status.uin; if ( event->event.status.descr ) { gaduNotify.description = textcodec->toUnicode( event->event.status.descr ); } else { gaduNotify.description = QString::null; } gaduNotify.remote_port = 0; gaduNotify.version = 0; gaduNotify.image_size = 0; gaduNotify.time = 0; gaduNotify.fileCap = false; emit contactStatusChanged( &gaduNotify ); break; case GG_EVENT_STATUS60: gaduNotify.status = event->event.status60.status; gaduNotify.contact_id = event->event.status60.uin; if ( event->event.status60.descr ) { gaduNotify.description = textcodec->toUnicode( event->event.status60.descr ); } else { gaduNotify.description = QString::null; } gaduNotify.remote_ip.setAddress( ntohl( event->event.status60.remote_ip ) ); gaduNotify.remote_port = event->event.status60.remote_port; gaduNotify.version = event->event.status60.version; gaduNotify.image_size = event->event.status60.image_size; gaduNotify.time = event->event.status60.time; if ( event->event.status60.remote_ip && gaduNotify.remote_port > 10 ) { gaduNotify.fileCap = true; } else { gaduNotify.fileCap = false; } emit contactStatusChanged( &gaduNotify ); break; case GG_EVENT_NOTIFY60: notify60( event ); break; case GG_EVENT_CONN_SUCCESS: kdDebug(14100) << "success server: " << session_->server_addr << endl; emit connectionSucceed(); break; case GG_EVENT_CONN_FAILED: kdDebug(14100) << "failed server: " << session_->server_addr << endl; destroySession(); kdDebug(14100) << "emit connection failed(" << event->event.failure << ") signal" << endl; emit connectionFailed( (gg_failure_t)event->event.failure ); break; case GG_EVENT_DISCONNECT: kdDebug(14100)<<"event Disconnected"<<endl; // it should be called either when we requested disconnect, or when other client connects with our UID logoff( Kopete::Account::Manual ); break; case GG_EVENT_PONG: emit pong(); break; case GG_EVENT_NONE: break; case GG_EVENT_PUBDIR50_SEARCH_REPLY: case GG_EVENT_PUBDIR50_WRITE: case GG_EVENT_PUBDIR50_READ: sendResult( event->event.pubdir50 ); break; case GG_EVENT_USERLIST: handleUserlist( event ); break; default: kdDebug(14100)<<"Unprocessed GaduGadu Event = "<<event->type<<endl; break; } if ( event ) { gg_free_event( event ); } if ( session_ ) { enableNotifiers( session_->check ); } }
void RegisterCommand::watcher() { gg_pubdir* pubDir; if ( state == RegisterStateWaitingForToken ) { disableNotifiers(); if ( gg_token_watch_fd( session_ ) == -1 ) { deleteNotifiers(); emit error( i18n( "Gadu-Gadu" ), i18n( "Unknown connection error while retrieving token." ) ); gg_token_free( session_ ); session_ = NULL; state = RegisterStateNoToken; return; } pubDir = (struct gg_pubdir *)session_->data; emit operationStatus( i18n( "Token retrieving status: %1", GaduSession::stateDescription( session_->state ) ) ); switch ( session_->state ) { case GG_STATE_CONNECTING: kDebug( 14100 ) << "Recreating notifiers "; deleteNotifiers(); checkSocket( session_->fd, 0); break; case GG_STATE_ERROR: deleteNotifiers(); emit error( i18n( "Gadu-Gadu token retrieve problem" ), GaduSession::errorDescription( session_->error ) ); gg_token_free( session_ ); session_ = NULL; state = RegisterStateNoToken; return; break; case GG_STATE_DONE: struct gg_token* sp = ( struct gg_token* )session_->data; tokenId = (char *)sp->tokenid; kDebug( 14100 ) << "got Token!, ID: " << tokenId; deleteNotifiers(); if ( pubDir->success ) { QPixmap tokenImg; tokenImg.loadFromData( (const unsigned char *)session_->body, session_->body_size ); state = RegisterStateGotToken; emit tokenRecieved( tokenImg, tokenId ); } else { emit error( i18n( "Gadu-Gadu" ), i18n( "Unable to retrieve token." ) ); state = RegisterStateNoToken; deleteLater(); } gg_token_free( session_ ); session_ = NULL; disconnect( this, SLOT(watcher()) ); return; break; } enableNotifiers( session_->check ); } if ( state == RegisterStateWaitingForNumber ) { disableNotifiers(); if ( gg_register_watch_fd( session_ ) == -1 ) { deleteNotifiers(); emit error( i18n( "Gadu-Gadu" ), i18n( "Unknown connection error while registering." ) ); gg_free_register( session_ ); session_ = NULL; state = RegisterStateGotToken; return; } pubDir = (gg_pubdir*) session_->data; emit operationStatus( i18n( "Registration status: %1", GaduSession::stateDescription( session_->state ) ) ); switch ( session_->state ) { case GG_STATE_CONNECTING: kDebug( 14100 ) << "Recreating notifiers "; deleteNotifiers(); checkSocket( session_->fd, 0); break; case GG_STATE_ERROR: deleteNotifiers(); emit error( i18n( "Gadu-Gadu Registration Error" ), GaduSession::errorDescription( session_->error ) ); gg_free_register( session_ ); session_ = NULL; state = RegisterStateGotToken; return; break; case GG_STATE_DONE: deleteNotifiers(); if ( pubDir->success && pubDir->uin ) { uin= pubDir->uin; state = RegisterStateDone; emit done( i18n( "Registration Finished" ), i18n( "Registration has been completed successfully." ) ); } else { emit error( i18n( "Registration Error" ), i18n( "Incorrect data sent to server." ) ); state = RegisterStateGotToken; } gg_free_register( session_ ); session_ = NULL; disconnect( this, SLOT(watcher()) ); deleteLater(); return; break; } enableNotifiers( session_->check ); return; } }