-rw-r--r-- | core/obex/btobex.cpp | 87 | ||||
-rw-r--r-- | core/obex/btobex.h | 14 |
2 files changed, 57 insertions, 44 deletions
diff --git a/core/obex/btobex.cpp b/core/obex/btobex.cpp index 886f3dc..a5bfe5f 100644 --- a/core/obex/btobex.cpp +++ b/core/obex/btobex.cpp @@ -1,10 +1,10 @@ #include "btobex.h" -#include <opietooth/manager.h> -#include <opietooth/services.h> +#include <manager.h> +#include <services.h> /* OPIE */ #include <opie2/oprocess.h> #include <opie2/odebug.h> /* QT */ @@ -62,12 +62,20 @@ void BtObex::receive() { void BtObex::send( const QString& fileName, const QString& bdaddr) { // if currently receiving stop it send receive m_count = 0; m_file = fileName; m_bdaddr = bdaddr; + if (m_send != 0) { + if (m_send->isSending()) + return; + else { + delete m_send; + m_send = 0; + } + } if (m_rec != 0 ) { if (m_rec->isRunning() ) { emit error(-1 ); delete m_rec; m_rec = 0; @@ -122,35 +130,35 @@ void BtObex::slotFoundServices(const QString&, Services::ValueList svcList) } m_port = portNum; sendNow(); } void BtObex::sendNow(){ + QString m_dst = ""; + int result; //function call result if ( m_count >= 25 ) { // could not send emit error(-1 ); emit sent(false); return; } // OProcess inititialisation - m_send = new OProcess(0, "ussp-push"); - m_send->setWorkingDirectory( QFileInfo(m_file).dirPath(true) ); - - // ussp-push --timeo 30 <btaddr:port> file file - *m_send << "ussp-push" << "--timeo 30"; - *m_send << m_bdaddr + "@" + QString::number(m_port); - *m_send << QFile::encodeName(QFileInfo(m_file).fileName()); - *m_send << QFile::encodeName(QFileInfo(m_file).fileName()); - m_send->setUseShell(true); - + m_send = new ObexPush(); // connect to slots Exited and and StdOut - connect(m_send, SIGNAL(processExited(Opie::Core::OProcess*) ), - this, SLOT(slotExited(Opie::Core::OProcess*)) ); - connect(m_send, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int)), - this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) ); + connect(m_send, SIGNAL(sendComplete(int)), + this, SLOT(slotPushComplete(int)) ); + connect(m_send, SIGNAL(sendError(int)), + this, SLOT(slotPushError(int)) ); + connect(m_send, SIGNAL(status(QCString&)), + this, SLOT(slotPushStatus(QCString&) ) ); + + ::sleep(4); // now start it - if (!m_send->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { + result = m_send->send(m_bdaddr, m_port, m_file, m_dst); + if (result > 0) //Sending process is actually running + return; + else if (result < 0) { m_count = 25; emit error(-1 ); delete m_send; m_send=0; } // end @@ -160,24 +168,44 @@ void BtObex::sendNow(){ void BtObex::slotExited(OProcess* proc ){ odebug << proc->name() << " exited with result " << proc->exitStatus() << oendl; if (proc == m_rec ) // receive process received(); - else if ( proc == m_send ) - sendEnd(); - } void BtObex::slotStdOut(OProcess* proc, char* buf, int len){ if ( proc == m_rec ) { // only receive QByteArray ar( len ); memcpy( ar.data(), buf, len ); m_outp.append( ar ); } } +void BtObex::slotPushComplete(int result) { + if (result == 0) { + delete m_send; + m_send=0; + emit sent(true); + } else { // it failed maybe the other side wasn't ready + // let's try it again + delete m_send; + m_send = 0; + sendNow(); + } +} + +void BtObex::slotPushError(int) { + emit error( -1 ); + delete m_send; + m_send = 0; +} + +void BtObex::slotPushStatus(QCString& str) { + odebug << str << oendl; +} + void BtObex::received() { if (m_rec->normalExit() ) { if ( m_rec->exitStatus() == 0 ) { // we got one QString filename = parseOut(); emit receivedFile( filename ); } @@ -186,31 +214,12 @@ void BtObex::received() { }; delete m_rec; m_rec = 0; receive(); } -void BtObex::sendEnd() { - if (m_send->normalExit() ) { - if ( m_send->exitStatus() == 0 ) { - delete m_send; - m_send=0; - emit sent(true); - }else if (m_send->exitStatus() != 0 ) { // it failed maybe the other side wasn't ready - // let's try it again - delete m_send; - m_send = 0; - sendNow(); - } - }else { - emit error( -1 ); - delete m_send; - m_send = 0; - } -} - // This probably doesn't do anything useful for bt. QString BtObex::parseOut(){ QString path; QStringList list = QStringList::split("\n", m_outp); QStringList::Iterator it; for (it = list.begin(); it != list.end(); ++it ) { diff --git a/core/obex/btobex.h b/core/obex/btobex.h index ba50064..9c1ab70 100644 --- a/core/obex/btobex.h +++ b/core/obex/btobex.h @@ -1,14 +1,15 @@ #ifndef OpieBtObex_H #define OpieBtObex_H #include <qobject.h> -#include <opietooth/services.h> -#include <opietooth/manager.h> +#include <services.h> +#include <manager.h> +#include <obexpush.h> namespace Opie {namespace Core {class OProcess;}} class QCopChannel; using namespace OpieTooth; namespace OpieObex { // Maybe this should be derved from Obex. @@ -56,31 +57,34 @@ namespace OpieObex { private: uint m_count; QString m_file; QString m_outp; QString m_bdaddr; int m_port; - Opie::Core::OProcess *m_send; + ObexPush* m_send; Opie::Core::OProcess *m_rec; bool m_receive : 1; OpieTooth::Manager* btManager; void shutDownReceive(); private slots: + // Push process slots + void slotPushStatus(QCString&); + void slotPushComplete(int); + void slotPushError(int); + // the process exited void slotExited(Opie::Core::OProcess*) ; void slotStdOut(Opie::Core::OProcess*, char*, int); void slotError(); void slotFoundServices(const QString&, Services::ValueList); private: void sendNow(); QString parseOut(); void received(); - void sendEnd(); - }; }; #endif |