summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show 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,10 +1,10 @@
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>
9 9
10/* QT */ 10/* QT */
@@ -62,12 +62,20 @@ void BtObex::receive() {
62 62
63void BtObex::send( const QString& fileName, const QString& bdaddr) { 63void 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;
72 m_rec = 0; 80 m_rec = 0;
73 81
@@ -122,35 +130,35 @@ void BtObex::slotFoundServices(const QString&, Services::ValueList svcList)
122 } 130 }
123 m_port = portNum; 131 m_port = portNum;
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;
155 } 163 }
156 // end 164 // end
@@ -160,55 +168,56 @@ void BtObex::sendNow(){
160 168
161void BtObex::slotExited(OProcess* proc ){ 169void 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 );
173 memcpy( ar.data(), buf, len ); 178 memcpy( ar.data(), buf, len );
174 m_outp.append( ar ); 179 m_outp.append( ar );
175 } 180 }
176} 181}
177 182
178void BtObex::received() { 183void BtObex::slotPushComplete(int result) {
179 if (m_rec->normalExit() ) { 184 if (result == 0) {
180 if ( m_rec->exitStatus() == 0 ) { // we got one
181 QString filename = parseOut();
182 emit receivedFile( filename );
183 }
184 }else{
185 emit done(false);
186 };
187 delete m_rec;
188 m_rec = 0;
189 receive();
190}
191
192void BtObex::sendEnd() {
193 if (m_send->normalExit() ) {
194 if ( m_send->exitStatus() == 0 ) {
195 delete m_send; 185 delete m_send;
196 m_send=0; 186 m_send=0;
197 emit sent(true); 187 emit sent(true);
198 }else if (m_send->exitStatus() != 0 ) { // it failed maybe the other side wasn't ready 188 } else { // it failed maybe the other side wasn't ready
199 // let's try it again 189 // let's try it again
200 delete m_send; 190 delete m_send;
201 m_send = 0; 191 m_send = 0;
202 sendNow(); 192 sendNow();
203 } 193 }
204 }else { 194}
195
196void BtObex::slotPushError(int) {
205 emit error( -1 ); 197 emit error( -1 );
206 delete m_send; 198 delete m_send;
207 m_send = 0; 199 m_send = 0;
208 } 200 }
201
202void BtObex::slotPushStatus(QCString& str) {
203 odebug << str << oendl;
204}
205
206void BtObex::received() {
207 if (m_rec->normalExit() ) {
208 if ( m_rec->exitStatus() == 0 ) { // we got one
209 QString filename = parseOut();
210 emit receivedFile( filename );
211 }
212 }else{
213 emit done(false);
214 };
215 delete m_rec;
216 m_rec = 0;
217 receive();
209} 218}
210 219
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
@@ -1,14 +1,15 @@
1 1
2 2
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;
13namespace OpieObex { 14namespace OpieObex {
14 // Maybe this should be derved from Obex. 15 // Maybe this should be derved from Obex.
@@ -56,31 +57,34 @@ namespace OpieObex {
56 private: 57 private:
57 uint m_count; 58 uint m_count;
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();
74 void slotFoundServices(const QString&, Services::ValueList); 80 void slotFoundServices(const QString&, Services::ValueList);
75 81
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
86#endif 90#endif