summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/obex/btobex.cpp87
-rw-r--r--core/obex/btobex.h14
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,8 +1,8 @@
1 1
2#include "btobex.h" 2#include "btobex.h"
3#include <opietooth/manager.h> 3#include <manager.h>
4#include <opietooth/services.h> 4#include <services.h>
5 5
6/* OPIE */ 6/* OPIE */
7#include <opie2/oprocess.h> 7#include <opie2/oprocess.h>
8#include <opie2/odebug.h> 8#include <opie2/odebug.h>
@@ -64,8 +64,16 @@ void BtObex::send( const QString& fileName, const QString& bdaddr) {
64 // if currently receiving stop it send receive 64 // if currently receiving stop it send receive
65 m_count = 0; 65 m_count = 0;
66 m_file = fileName; 66 m_file = fileName;
67 m_bdaddr = bdaddr; 67 m_bdaddr = bdaddr;
68 if (m_send != 0) {
69 if (m_send->isSending())
70 return;
71 else {
72 delete m_send;
73 m_send = 0;
74 }
75 }
68 if (m_rec != 0 ) { 76 if (m_rec != 0 ) {
69 if (m_rec->isRunning() ) { 77 if (m_rec->isRunning() ) {
70 emit error(-1 ); 78 emit error(-1 );
71 delete m_rec; 79 delete m_rec;
@@ -124,31 +132,31 @@ void BtObex::slotFoundServices(const QString&, Services::ValueList svcList)
124 sendNow(); 132 sendNow();
125} 133}
126 134
127void BtObex::sendNow(){ 135void BtObex::sendNow(){
136 QString m_dst = "";
137 int result; //function call result
128 if ( m_count >= 25 ) { // could not send 138 if ( m_count >= 25 ) { // could not send
129 emit error(-1 ); 139 emit error(-1 );
130 emit sent(false); 140 emit sent(false);
131 return; 141 return;
132 } 142 }
133 // OProcess inititialisation 143 // OProcess inititialisation
134 m_send = new OProcess(0, "ussp-push"); 144 m_send = new ObexPush();
135 m_send->setWorkingDirectory( QFileInfo(m_file).dirPath(true) );
136
137 // ussp-push --timeo 30 <btaddr:port> file file
138 *m_send << "ussp-push" << "--timeo 30";
139 *m_send << m_bdaddr + "@" + QString::number(m_port);
140 *m_send << QFile::encodeName(QFileInfo(m_file).fileName());
141 *m_send << QFile::encodeName(QFileInfo(m_file).fileName());
142 m_send->setUseShell(true);
143
144 // connect to slots Exited and and StdOut 145 // connect to slots Exited and and StdOut
145 connect(m_send, SIGNAL(processExited(Opie::Core::OProcess*) ), 146 connect(m_send, SIGNAL(sendComplete(int)),
146 this, SLOT(slotExited(Opie::Core::OProcess*)) ); 147 this, SLOT(slotPushComplete(int)) );
147 connect(m_send, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int)), 148 connect(m_send, SIGNAL(sendError(int)),
148 this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) ); 149 this, SLOT(slotPushError(int)) );
150 connect(m_send, SIGNAL(status(QCString&)),
151 this, SLOT(slotPushStatus(QCString&) ) );
152
153 ::sleep(4);
149 // now start it 154 // now start it
150 if (!m_send->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { 155 result = m_send->send(m_bdaddr, m_port, m_file, m_dst);
156 if (result > 0) //Sending process is actually running
157 return;
158 else if (result < 0) {
151 m_count = 25; 159 m_count = 25;
152 emit error(-1 ); 160 emit error(-1 );
153 delete m_send; 161 delete m_send;
154 m_send=0; 162 m_send=0;
@@ -162,11 +170,8 @@ void BtObex::slotExited(OProcess* proc ){
162 odebug << proc->name() << " exited with result " 170 odebug << proc->name() << " exited with result "
163 << proc->exitStatus() << oendl; 171 << proc->exitStatus() << oendl;
164 if (proc == m_rec ) // receive process 172 if (proc == m_rec ) // receive process
165 received(); 173 received();
166 else if ( proc == m_send )
167 sendEnd();
168
169} 174}
170void BtObex::slotStdOut(OProcess* proc, char* buf, int len){ 175void BtObex::slotStdOut(OProcess* proc, char* buf, int len){
171 if ( proc == m_rec ) { // only receive 176 if ( proc == m_rec ) { // only receive
172 QByteArray ar( len ); 177 QByteArray ar( len );
@@ -174,8 +179,31 @@ void BtObex::slotStdOut(OProcess* proc, char* buf, int len){
174 m_outp.append( ar ); 179 m_outp.append( ar );
175 } 180 }
176} 181}
177 182
183void BtObex::slotPushComplete(int result) {
184 if (result == 0) {
185 delete m_send;
186 m_send=0;
187 emit sent(true);
188 } else { // it failed maybe the other side wasn't ready
189 // let's try it again
190 delete m_send;
191 m_send = 0;
192 sendNow();
193 }
194}
195
196void BtObex::slotPushError(int) {
197 emit error( -1 );
198 delete m_send;
199 m_send = 0;
200}
201
202void BtObex::slotPushStatus(QCString& str) {
203 odebug << str << oendl;
204}
205
178void BtObex::received() { 206void BtObex::received() {
179 if (m_rec->normalExit() ) { 207 if (m_rec->normalExit() ) {
180 if ( m_rec->exitStatus() == 0 ) { // we got one 208 if ( m_rec->exitStatus() == 0 ) { // we got one
181 QString filename = parseOut(); 209 QString filename = parseOut();
@@ -188,27 +216,8 @@ void BtObex::received() {
188 m_rec = 0; 216 m_rec = 0;
189 receive(); 217 receive();
190} 218}
191 219
192void BtObex::sendEnd() {
193 if (m_send->normalExit() ) {
194 if ( m_send->exitStatus() == 0 ) {
195 delete m_send;
196 m_send=0;
197 emit sent(true);
198 }else if (m_send->exitStatus() != 0 ) { // it failed maybe the other side wasn't ready
199 // let's try it again
200 delete m_send;
201 m_send = 0;
202 sendNow();
203 }
204 }else {
205 emit error( -1 );
206 delete m_send;
207 m_send = 0;
208 }
209}
210
211// This probably doesn't do anything useful for bt. 220// This probably doesn't do anything useful for bt.
212QString BtObex::parseOut(){ 221QString BtObex::parseOut(){
213 QString path; 222 QString path;
214 QStringList list = QStringList::split("\n", m_outp); 223 QStringList list = QStringList::split("\n", m_outp);
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
@@ -3,10 +3,11 @@
3#ifndef OpieBtObex_H 3#ifndef OpieBtObex_H
4#define OpieBtObex_H 4#define OpieBtObex_H
5 5
6#include <qobject.h> 6#include <qobject.h>
7#include <opietooth/services.h> 7#include <services.h>
8#include <opietooth/manager.h> 8#include <manager.h>
9#include <obexpush.h>
9 10
10namespace Opie {namespace Core {class OProcess;}} 11namespace Opie {namespace Core {class OProcess;}}
11class QCopChannel; 12class QCopChannel;
12using namespace OpieTooth; 13using namespace OpieTooth;
@@ -58,16 +59,21 @@ namespace OpieObex {
58 QString m_file; 59 QString m_file;
59 QString m_outp; 60 QString m_outp;
60 QString m_bdaddr; 61 QString m_bdaddr;
61 int m_port; 62 int m_port;
62 Opie::Core::OProcess *m_send; 63 ObexPush* m_send;
63 Opie::Core::OProcess *m_rec; 64 Opie::Core::OProcess *m_rec;
64 bool m_receive : 1; 65 bool m_receive : 1;
65 OpieTooth::Manager* btManager; 66 OpieTooth::Manager* btManager;
66 void shutDownReceive(); 67 void shutDownReceive();
67 68
68private slots: 69private slots:
69 70
71 // Push process slots
72 void slotPushStatus(QCString&);
73 void slotPushComplete(int);
74 void slotPushError(int);
75
70 // the process exited 76 // the process exited
71 void slotExited(Opie::Core::OProcess*) ; 77 void slotExited(Opie::Core::OProcess*) ;
72 void slotStdOut(Opie::Core::OProcess*, char*, int); 78 void slotStdOut(Opie::Core::OProcess*, char*, int);
73 void slotError(); 79 void slotError();
@@ -76,10 +82,8 @@ private slots:
76 private: 82 private:
77 void sendNow(); 83 void sendNow();
78 QString parseOut(); 84 QString parseOut();
79 void received(); 85 void received();
80 void sendEnd();
81
82 }; 86 };
83}; 87};
84 88
85 89