summaryrefslogtreecommitdiff
authorzecke <zecke>2005-03-29 23:30:39 (UTC)
committer zecke <zecke>2005-03-29 23:30:39 (UTC)
commitdb876361603ccf1664698df926a3c61d32315101 (patch) (unidiff)
tree21425cbda11c9b8bbfa8a71d1b34c0479b3de284
parent6d8f326cb4429a45c417ecdc04f58e832017aa66 (diff)
downloadopie-db876361603ccf1664698df926a3c61d32315101.zip
opie-db876361603ccf1664698df926a3c61d32315101.tar.gz
opie-db876361603ccf1664698df926a3c61d32315101.tar.bz2
Beaming Fix:
Recievers couldn't handle paths inside the obex push. As a workaround we will change the working directory of the process and use the filename inside that directory.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/obex/obex.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/core/obex/obex.cc b/core/obex/obex.cc
index 5dfcfb5..36634ec 100644
--- a/core/obex/obex.cc
+++ b/core/obex/obex.cc
@@ -29,98 +29,100 @@ Obex::Obex( QObject *parent, const char* name )
29}; 29};
30Obex::~Obex() { 30Obex::~Obex() {
31 delete m_rec; 31 delete m_rec;
32 delete m_send; 32 delete m_send;
33} 33}
34void Obex::receive() { 34void Obex::receive() {
35 m_receive = true; 35 m_receive = true;
36 m_outp = QString::null; 36 m_outp = QString::null;
37 m_rec = new OProcess(); 37 m_rec = new OProcess();
38 *m_rec << "irobex_palm3"; 38 *m_rec << "irobex_palm3";
39 // connect to the necessary slots 39 // connect to the necessary slots
40 connect(m_rec, SIGNAL(processExited(Opie::Core::OProcess*) ), 40 connect(m_rec, SIGNAL(processExited(Opie::Core::OProcess*) ),
41 this, SLOT(slotExited(Opie::Core::OProcess*) ) ); 41 this, SLOT(slotExited(Opie::Core::OProcess*) ) );
42 42
43 connect(m_rec, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ), 43 connect(m_rec, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ),
44 this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) ); 44 this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) );
45 45
46 if(!m_rec->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { 46 if(!m_rec->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) {
47 emit done( false ); 47 emit done( false );
48 delete m_rec; 48 delete m_rec;
49 m_rec = 0; 49 m_rec = 0;
50 } 50 }
51} 51}
52 52
53void Obex::send( const QString& fileName) { // if currently receiving stop it send receive 53void Obex::send( const QString& fileName) { // if currently receiving stop it send receive
54 m_count = 0; 54 m_count = 0;
55 m_file = fileName; 55 m_file = fileName;
56 if (m_rec != 0 ) { 56 if (m_rec != 0 ) {
57 if (m_rec->isRunning() ) { 57 if (m_rec->isRunning() ) {
58 emit error(-1 ); 58 emit error(-1 );
59 delete m_rec; 59 delete m_rec;
60 m_rec = 0; 60 m_rec = 0;
61 61
62 }else{ 62 }else{
63 emit error( -1 ); // we did not delete yet but it's not running slotExited is pending 63 emit error( -1 ); // we did not delete yet but it's not running slotExited is pending
64 return; 64 return;
65 } 65 }
66 } 66 }
67 sendNow(); 67 sendNow();
68} 68}
69void Obex::sendNow(){ 69void Obex::sendNow(){
70 if ( m_count >= 25 ) { // could not send 70 if ( m_count >= 25 ) { // could not send
71 emit error(-1 ); 71 emit error(-1 );
72 emit sent(false); 72 emit sent(false);
73 return; 73 return;
74 } 74 }
75 // OProcess inititialisation 75 // OProcess inititialisation
76 m_send = new OProcess(); 76 m_send = new OProcess();
77 m_send->setWorkingDirectory( QFileInfo(m_file).dirPath(true) );
78
77 *m_send << "irobex_palm3"; 79 *m_send << "irobex_palm3";
78 *m_send << QFile::encodeName(m_file); 80 *m_send << QFile::encodeName(QFileInfo(m_file).fileName());
79 81
80 // connect to slots Exited and and StdOut 82 // connect to slots Exited and and StdOut
81 connect(m_send, SIGNAL(processExited(Opie::Core::OProcess*) ), 83 connect(m_send, SIGNAL(processExited(Opie::Core::OProcess*) ),
82 this, SLOT(slotExited(Opie::Core::OProcess*)) ); 84 this, SLOT(slotExited(Opie::Core::OProcess*)) );
83 connect(m_send, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int )), 85 connect(m_send, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int )),
84 this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) ); 86 this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) );
85 87
86 // now start it 88 // now start it
87 if (!m_send->start(/*OProcess::NotifyOnExit, OProcess::AllOutput*/ ) ) { 89 if (!m_send->start(/*OProcess::NotifyOnExit, OProcess::AllOutput*/ ) ) {
88 m_count = 25; 90 m_count = 25;
89 emit error(-1 ); 91 emit error(-1 );
90 delete m_send; 92 delete m_send;
91 m_send=0; 93 m_send=0;
92 } 94 }
93 // end 95 // end
94 m_count++; 96 m_count++;
95 emit currentTry( m_count ); 97 emit currentTry( m_count );
96} 98}
97 99
98void Obex::slotExited(OProcess* proc ){ 100void Obex::slotExited(OProcess* proc ){
99 if (proc == m_rec ) // receive process 101 if (proc == m_rec ) // receive process
100 received(); 102 received();
101 else if ( proc == m_send ) 103 else if ( proc == m_send )
102 sendEnd(); 104 sendEnd();
103 105
104} 106}
105void Obex::slotStdOut(OProcess* proc, char* buf, int len){ 107void Obex::slotStdOut(OProcess* proc, char* buf, int len){
106 if ( proc == m_rec ) { // only receive 108 if ( proc == m_rec ) { // only receive
107 QByteArray ar( len ); 109 QByteArray ar( len );
108 memcpy( ar.data(), buf, len ); 110 memcpy( ar.data(), buf, len );
109 m_outp.append( ar ); 111 m_outp.append( ar );
110 } 112 }
111} 113}
112 114
113void Obex::received() { 115void Obex::received() {
114 if (m_rec->normalExit() ) { 116 if (m_rec->normalExit() ) {
115 if ( m_rec->exitStatus() == 0 ) { // we got one 117 if ( m_rec->exitStatus() == 0 ) { // we got one
116 QString filename = parseOut(); 118 QString filename = parseOut();
117 emit receivedFile( filename ); 119 emit receivedFile( filename );
118 } 120 }
119 }else{ 121 }else{
120 emit done(false); 122 emit done(false);
121 }; 123 };
122 delete m_rec; 124 delete m_rec;
123 m_rec = 0; 125 m_rec = 0;
124 receive(); 126 receive();
125} 127}
126 128