-rw-r--r-- | korganizer/mainwindow.cpp | 181 | ||||
-rw-r--r-- | korganizer/mainwindow.h | 14 |
2 files changed, 124 insertions, 71 deletions
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 7bf33d3..8e2f956 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp @@ -71,5 +71,7 @@ MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : QMainWindow( parent, name ) { - + mPassWordPiSync = "abc"; + mTimerCommandSocket = new QTimer ( this ); + connect( mTimerCommandSocket, SIGNAL ( timeout () ), this, SLOT ( deleteCommandSocket() ) ); #ifdef DESKTOP_VERSION setFont( QFont("Arial"), 14 ); @@ -1890,4 +1892,5 @@ QString MainWindow::getPassword( ) void MainWindow::enableQuick() { + QString passWordPiSync = "bhdrvmk"; QString retfile = ""; QDialog dia ( this, "input-dialog", true ); @@ -1900,6 +1903,12 @@ void MainWindow::enableQuick() lay.addWidget( &label); lay.addWidget( &lab); + + QLineEdit lepw ( &dia ); + lepw.setText( "abc" ); + QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia ); + lay.addWidget( &label2); + lay.addWidget( &lepw); dia.setFixedSize( 230,80 ); - dia.setCaption( i18n("Enter port for Easy-Pi-Sync") ); + dia.setCaption( i18n("Enter port for Pi-Sync") ); QPushButton pb ( "OK", &dia); lay.addWidget( &pb ); @@ -1912,4 +1921,5 @@ void MainWindow::enableQuick() return; dia.hide(); + passWordPiSync = lepw.text(); qApp->processEvents(); KOPrefs::instance()->mPassiveSyncPort = retfile; @@ -1917,9 +1927,9 @@ void MainWindow::enableQuick() Q_UINT16 port = retfile.toUInt(&ok); if ( ! ok ) { - qDebug("no valid port "); + KMessageBox::information( this, i18n("No valid port")); return; } qDebug("port %d ", port); - mServerSocket = new KServerSocket ( port ,1 ); + mServerSocket = new KServerSocket ( passWordPiSync, port ,1 ); qDebug("connected "); if ( !mServerSocket->ok() ) { @@ -1947,7 +1957,7 @@ void MainWindow::sendFile(QSocket* socket) mSyncActionDialog->setFixedSize( 200,100 ); mSyncActionDialog->show(); - qApp->processEvents(); qDebug("saving ... "); save(); + qApp->processEvents(); QString fileName = defaultFileName(); QFile file( fileName ); @@ -1979,11 +1989,36 @@ void MainWindow::getFile(QSocket* socket) setCaption( i18n("Receiving synced file...") ); + piTime.start(); + piSocket = socket; + piFileString = ""; + QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); + + +} +void MainWindow::readBackFileFromSocket() +{ + qDebug("readBackFileFromSocket() %d ", piTime.elapsed ()); + while ( piSocket->canReadLine () ) { + piTime.restart(); + QString line = piSocket->readLine (); + piFileString += line; + qDebug("readline: %s ", line.latin1()); + setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) ); + + } + if ( piTime.elapsed () < 3000 ) { + // wait for more + qDebug("waitformore "); + QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) )); + return; + } QString fileName = defaultFileName(); - QFile file( fileName ); + QFile file ( fileName ); if (!file.open( IO_WriteOnly ) ) { - setCaption( i18n("Error open file") ); + setCaption( i18n("Error open file for writing!") ); delete mSyncActionDialog; mSyncActionDialog = 0; qDebug("error open cal file "); + piFileString = ""; return ; @@ -1991,60 +2026,21 @@ void MainWindow::getFile(QSocket* socket) mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); - QTextStream ts( &file ); + QTextStream ts ( &file ); ts.setCodec( QTextCodec::codecForName("utf8") ); - bool first = true; - while ( socket->canReadLine () || first ) { - first = false; - while ( socket->canReadLine () ) { - qDebug("avail %d ", socket->bytesAvailable () ); - ts << socket->readLine (); - } - QTime ti; - ti.start(); - while ( ti.elapsed () < 5000 && !socket->canReadLine () ) { - qDebug("waiting1a %d %d ",ti.elapsed (), socket->bytesAvailable () ); - //qApp->processEvents(); - qDebug("waiting1b %d ",ti.elapsed () ); - if ( !socket->canReadLine () ) { - qDebug("waiting1c %d ",ti.elapsed () ); -#ifndef _WIN32_ - usleep( 100000); -#endif - } - //socket->waitForMore ( 100 ); - } - ts << socket->readLine (); -#if 0 -#ifdef DESKTOP_VERSION - socket->waitForMore ( 5000 ); -#else - // socket->waitForMore ( 5000 ); - // seems to be broken in qt2 - bool stop = false; - QTime ti; - ti.start(); - while ( ti.elapsed < 5000 && !stop ) { - qApp->processEvents(); - if ( socket->canReadLine () ) - stop = true ; - else { - usleep( 100000 ); - - } - } -#endif -#endif - } + qDebug("finish "); + setCaption( i18n("Writing file to disk...") ); + ts << piFileString; setCaption( i18n("File received - reloading calendar...") ); - socket->close(); + piSocket->close(); file.close(); mView->watchSavedFile(); mView->openCalendar( defaultFileName() ); - setCaption( i18n("Easy-Pi-Sync successful!") ); + setCaption( i18n("Pi-Sync successful!") ); delete mSyncActionDialog; mSyncActionDialog = 0; + piFileString = ""; - -} + +} void MainWindow::endConnect() { @@ -2055,4 +2051,5 @@ void MainWindow::endConnect() void MainWindow::performQuick() { + setCaption( i18n("Please input connection settings") ); QString retfile = ""; @@ -2071,6 +2068,13 @@ void MainWindow::performQuick() lab2.setText( KOPrefs::instance()->mActiveSyncPort ); lay.addWidget( &lab2); + + QLineEdit lepw ( &dia ); + lepw.setText( mPassWordPiSync ); + QLabel label3 ( i18n("Password to enable\naccess to remote:"), &dia ); + lay.addWidget( &label3); + lay.addWidget( &lepw); + dia.setFixedSize( 230,200 ); - dia.setCaption( i18n("Enter port for Easy-Pi-Sync ") ); + dia.setCaption( i18n("Enter port for Pi-Sync ") ); QPushButton pb ( "OK", &dia); lay.addWidget( &pb ); @@ -2082,4 +2086,5 @@ void MainWindow::performQuick() return; } + mPassWordPiSync = lepw.text(); dia.hide(); KOPrefs::instance()->mActiveSyncPort = lab2.text(); @@ -2104,4 +2109,5 @@ void MainWindow::performQuickQuick() //mCommandSocket = new QSocket( this ); connect( mCommandSocket, SIGNAL(readyRead()), this, SLOT(readFileFromSocket()) ); + connect( mCommandSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteCommandSocket()) ); } QString host = KOPrefs::instance()->mActiveSyncIP; @@ -2109,12 +2115,35 @@ void MainWindow::performQuickQuick() QTextStream os( mCommandSocket ); os.setEncoding( QTextStream::UnicodeUTF8 ); - os << "GET\r\n"; + os << "GET " << mPassWordPiSync << "\r\n"; setCaption( i18n("Sending request for remote file ...") ); + mTimerCommandSocket->start( 15000 ); } +void MainWindow::deleteCommandSocket() +{ + if ( !mCommandSocket) + return; + if ( mTimerCommandSocket->isActive () ) { + KMessageBox::information( 0, i18n("ERROR:\nConnection to remote host timed out ")); + mTimerCommandSocket->stop(); + } + qDebug("MainWindow::deletemCommandSocket() "); + delete mCommandSocket; + mCommandSocket = 0; +} +void MainWindow::deleteCommandSocketFinish() +{ + if ( ! mCommandSocketFinish) + return; + //KMessageBox::information( 0, i18n("MainWindow::deleteCommandSocketFinish() ")); + qDebug("MainWindow::deletemCommandSocketFinish() "); + delete mCommandSocketFinish; + mCommandSocketFinish = 0; +} void MainWindow::readFileFromSocket() { + mTimerCommandSocket->stop(); setCaption( i18n("Receiving remote file ...") ); - qDebug("MainWindow::readFileFromSocket() "); + qDebug("MainWindow::readFileFromSocket() "); QString fileName; #ifdef _WIN32_ @@ -2153,4 +2182,6 @@ void MainWindow::readFileFromSocket() file.close(); mCommandSocket->close(); + if ( mCommandSocket->state() == QSocket::Idle ) + deleteCommandSocket(); // pending: deleting after signal SIGNAL(delayedCloseFinished()) //delete mCommandSocket; @@ -2172,5 +2203,5 @@ void MainWindow::readFileFromSocket() KOPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); KOPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); - + delete temp; setCaption( i18n("Remote file saved to temp file.") ); if ( ! syncWithFile( fileName , true ) ) { @@ -2181,5 +2212,6 @@ void MainWindow::readFileFromSocket() if ( !mCommandSocketFinish ) { - mCommandSocketFinish = new QSocket( this ); + mCommandSocketFinish = new QSocket( this ); + connect( mCommandSocketFinish, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteCommandSocketFinish()) ); } mCommandSocketFinish->connectToHost( KOPrefs::instance()->mActiveSyncIP, KOPrefs::instance()->mActiveSyncPort.toUInt() ); @@ -2201,5 +2233,5 @@ void MainWindow::readFileFromSocket() //os.setEncoding( QTextStream::UnicodeUTF8 ); if ( KOPrefs::instance()->mWriteBackFile ) { - os2 << "PUT\r\n"; + os2 << "PUT " << mPassWordPiSync << "\r\n";; while ( ! ts2.atEnd() ) { os2 << ts2.readLine() << "\n"; @@ -2209,10 +2241,9 @@ void MainWindow::readFileFromSocket() } mCommandSocketFinish->close(); + if ( mCommandSocketFinish->state() == QSocket::Idle ) + deleteCommandSocketFinish(); file.close(); - // pending: deleting after signal SIGNAL(delayedCloseFinished()) - //delete ( mCommandSocket); - //mCommandSocket = 0; qDebug("Syncing succesful! "); - setCaption( i18n("Easy-Pi-Sync succesful!") ); + setCaption( i18n("Pi-Sync succesful!") ); @@ -2497,8 +2528,8 @@ void MainWindow::printCal() -KServerSocket:: KServerSocket ( Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) +KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) { - - mSocket = 0; + mPassWord = pw; + mSocket = 0; }; @@ -2538,8 +2569,18 @@ void KServerSocket::readClient() qDebug("KServerSocket socket->canReadLine()"); if ( tokens[0] == "GET" ) { - emit sendFile( mSocket ); + if ( tokens[1] == mPassWord ) + emit sendFile( mSocket ); + else { + KMessageBox::information( 0, i18n("ERROR:\nGot send file request\nwith invalid password")); + qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() ); + } } if ( tokens[0] == "PUT" ) { - emit getFile( mSocket ); + if ( tokens[1] == mPassWord ) + emit getFile( mSocket ); + else { + KMessageBox::information( 0, i18n("ERROR:\nGot receive file request\nwith invalid password")); + qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() ); + } } if ( tokens[0] == "STOP" ) { diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h index cc656a3..d217578 100644 --- a/korganizer/mainwindow.h +++ b/korganizer/mainwindow.h @@ -5,4 +5,7 @@ #include <qtimer.h> #include <qdict.h> +#include <qfile.h> +#include <qsocket.h> +#include <qtextstream.h> #include <qregexp.h> @@ -28,5 +31,5 @@ class KServerSocket : public QServerSocket public: - KServerSocket ( Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ); + KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ); void newConnection ( int socket ) ; @@ -41,4 +44,5 @@ private slots: private : QSocket* mSocket; + QString mPassWord; }; @@ -115,10 +119,18 @@ class MainWindow : public QMainWindow private slots: + QSocket* piSocket; + QString piFileString; + QTime piTime; + void deleteCommandSocket(); + void deleteCommandSocketFinish(); void fillSyncMenu(); void sendFile(QSocket* s); void getFile(QSocket* socket); void readFileFromSocket(); + void readBackFileFromSocket(); void endConnect(); private: + QTimer* mTimerCommandSocket; + QString mPassWordPiSync; QSocket* mCommandSocket; QSocket* mCommandSocketFinish; |