summaryrefslogtreecommitdiff
path: root/core/obex/btobex.cpp
Unidiff
Diffstat (limited to 'core/obex/btobex.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/obex/btobex.cpp87
1 files changed, 48 insertions, 39 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,7 +1,7 @@
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>
@@ -65,6 +65,14 @@ void BtObex::send( const QString& fileName, const QString& bdaddr) {
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 );
@@ -125,29 +133,29 @@ void BtObex::slotFoundServices(const QString&, Services::ValueList svcList)
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;
@@ -163,9 +171,6 @@ void BtObex::slotExited(OProcess* proc ){
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
@@ -175,6 +180,29 @@ void BtObex::slotStdOut(OProcess* proc, char* buf, int len){
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
@@ -189,25 +217,6 @@ void BtObex::received() {
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;