summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/launcher/qcopbridge.cpp93
-rw-r--r--core/launcher/qcopbridge.h3
2 files changed, 96 insertions, 0 deletions
diff --git a/core/launcher/qcopbridge.cpp b/core/launcher/qcopbridge.cpp
index f780235..9cb56ce 100644
--- a/core/launcher/qcopbridge.cpp
+++ b/core/launcher/qcopbridge.cpp
@@ -27,6 +27,7 @@
27#include <qtopia/qpeapplication.h> 27#include <qtopia/qpeapplication.h>
28#include <qtopia/global.h> 28#include <qtopia/global.h>
29#include <qtopia/version.h> 29#include <qtopia/version.h>
30#include <qtopia/config.h>
30 31
31#include <qdir.h> 32#include <qdir.h>
32#include <qfile.h> 33#include <qfile.h>
@@ -80,6 +81,7 @@ QCopBridge::QCopBridge( Q_UINT16 port, QObject *parent,
80 } 81 }
81 sendSync = FALSE; 82 sendSync = FALSE;
82 openConnections.setAutoDelete( TRUE ); 83 openConnections.setAutoDelete( TRUE );
84 authorizeConnections();
83} 85}
84 86
85QCopBridge::~QCopBridge() 87QCopBridge::~QCopBridge()
@@ -91,6 +93,9 @@ QCopBridge::~QCopBridge()
91 93
92void QCopBridge::authorizeConnections() 94void QCopBridge::authorizeConnections()
93{ 95{
96 Config cfg("Security");
97 cfg.setGroup("SyncMode");
98 m_mode = Mode(cfg.readNumEntry("Mode", Sharp ));
94 QListIterator<QCopBridgePI> it(openConnections); 99 QListIterator<QCopBridgePI> it(openConnections);
95 while ( it.current() ) { 100 while ( it.current() ) {
96 if ( !it.current()->verifyAuthorised() ) { 101 if ( !it.current()->verifyAuthorised() ) {
@@ -152,12 +157,98 @@ void QCopBridge::desktopMessage( const QCString &command, const QByteArray &data
152 startTimer( 20000 ); 157 startTimer( 20000 );
153 } 158 }
154 159
160 if ( m_mode & Qtopia1_7 ) {
155 // send the command to all open connections 161 // send the command to all open connections
156 QCopBridgePI *pi; 162 QCopBridgePI *pi;
157 for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) { 163 for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) {
158 pi->sendDesktopMessage( command, data ); 164 pi->sendDesktopMessage( command, data );
159 } 165 }
160} 166}
167 if ( m_mode & Sharp )
168 sendDesktopMessageOld( command, data );
169}
170
171#ifndef OPIE_NO_OLD_SYNC_CODE
172/*
173 * Old compat mode
174 */
175void QCopBridge::sendDesktopMessageOld( const QCString& command, const QByteArray& args) {
176 command.stripWhiteSpace();
177
178 int paren = command.find( "(" );
179 if ( paren <= 0 ) {
180 qDebug("DesktopMessage: bad qcop syntax");
181 return;
182 }
183
184 QString params = command.mid( paren + 1 );
185 if ( params[params.length()-1] != ')' ) {
186 qDebug("DesktopMessage: bad qcop syntax");
187 return;
188 }
189
190 params.truncate( params.length()-1 );
191
192 QStringList paramList = QStringList::split( ",", params );
193 QString data;
194 if ( paramList.count() ) {
195 QDataStream stream( args, IO_ReadOnly );
196 for ( QStringList::Iterator it = paramList.begin(); it != paramList.end(); ++it ) {
197 QString str;
198 if ( *it == "QString" ) {
199 stream >> str;
200 } else if ( *it == "QCString" ) {
201 QCString cstr;
202 stream >> cstr;
203 str = QString::fromLocal8Bit( cstr );
204 } else if ( *it == "int" ) {
205 int i;
206 stream >> i;
207 str = QString::number( i );
208 } else if ( *it == "bool" ) {
209 int i;
210 stream >> i;
211 str = QString::number( i );
212 } else {
213 qDebug(" cannot route the argument type %s throught the qcop bridge", (*it).latin1() );
214 return;
215 }
216 QString estr;
217 for (int i=0; i<(int)str.length(); i++) {
218 QChar ch = str[i];
219 if ( ch.row() )
220 goto quick;
221 switch (ch.cell()) {
222 case '&':
223 estr.append( "&amp;" );
224 break;
225 case ' ':
226 estr.append( "&0x20;" );
227 break;
228 case '\n':
229 estr.append( "&0x0d;" );
230 break;
231 case '\r':
232 estr.append( "&0x0a;" );
233 break;
234 default: quick:
235 estr.append(ch);
236 }
237 }
238 data += " " + estr;
239 }
240 }
241 QString sendCommand = QString(command.data()) + data;
242
243
244 // send the command to all open connections
245 QCopBridgePI *pi;
246 for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() )
247 pi->sendDesktopMessage( sendCommand );
248
249}
250#endif
251
161 252
162void QCopBridge::timerEvent( QTimerEvent * ) 253void QCopBridge::timerEvent( QTimerEvent * )
163{ 254{
@@ -229,6 +320,7 @@ void QCopBridgePI::sendDesktopMessage( const QCString &msg, const QByteArray& da
229{ 320{
230 if ( !isOpen() ) // eg. Forbidden 321 if ( !isOpen() ) // eg. Forbidden
231 return; 322 return;
323
232 const char hdr[]="CALLB QPE/Desktop "; 324 const char hdr[]="CALLB QPE/Desktop ";
233 writeBlock(hdr,sizeof(hdr)-1); 325 writeBlock(hdr,sizeof(hdr)-1);
234 writeBlock(msg,msg.length()); 326 writeBlock(msg,msg.length());
@@ -236,6 +328,7 @@ void QCopBridgePI::sendDesktopMessage( const QCString &msg, const QByteArray& da
236 QByteArray b64 = Opie::Global::encodeBase64(data); 328 QByteArray b64 = Opie::Global::encodeBase64(data);
237 writeBlock(b64.data(),b64.size()); 329 writeBlock(b64.data(),b64.size());
238 writeBlock("\r\n",2); 330 writeBlock("\r\n",2);
331
239} 332}
240 333
241 334
diff --git a/core/launcher/qcopbridge.h b/core/launcher/qcopbridge.h
index bae3f88..9483d9d 100644
--- a/core/launcher/qcopbridge.h
+++ b/core/launcher/qcopbridge.h
@@ -37,6 +37,7 @@ class QCopBridge : public QServerSocket
37 Q_OBJECT 37 Q_OBJECT
38 38
39public: 39public:
40 enum Mode { Qtopia1_7= 0x01, Sharp = 0x02, Both = Qtopia1_7 | Sharp };
40 QCopBridge( Q_UINT16 port, QObject *parent = 0, const char* name = 0 ); 41 QCopBridge( Q_UINT16 port, QObject *parent = 0, const char* name = 0 );
41 virtual ~QCopBridge(); 42 virtual ~QCopBridge();
42 43
@@ -53,12 +54,14 @@ signals:
53 54
54protected: 55protected:
55 void timerEvent( QTimerEvent * ); 56 void timerEvent( QTimerEvent * );
57 void sendDesktopMessageOld( const QCString&, const QByteArray& );
56 58
57private: 59private:
58 QCopChannel *desktopChannel; 60 QCopChannel *desktopChannel;
59 QCopChannel *cardChannel; 61 QCopChannel *cardChannel;
60 QList<QCopBridgePI> openConnections; 62 QList<QCopBridgePI> openConnections;
61 bool sendSync; 63 bool sendSync;
64 Mode m_mode;
62}; 65};
63 66
64 67