summaryrefslogtreecommitdiff
path: root/core
Side-by-side diff
Diffstat (limited to 'core') (more/less context) (ignore whitespace changes)
-rw-r--r--core/obex/btobex.h3
-rw-r--r--core/obex/obex.pro10
-rw-r--r--core/obex/obexsend.cpp45
-rw-r--r--core/obex/obexsend.h9
-rw-r--r--core/obex/receiver.cpp2
5 files changed, 62 insertions, 7 deletions
diff --git a/core/obex/btobex.h b/core/obex/btobex.h
index 7e91c06..d9bd886 100644
--- a/core/obex/btobex.h
+++ b/core/obex/btobex.h
@@ -1,118 +1,119 @@
/*
               =. This file is part of the OPIE Project
             .=l. Copyright (c) 2002 Maximilian Reiss <max.reiss@gmx.de>
           .>+-=
 _;:,     .>    :=|. This library is free software; you can
.> <,   >  .   <= redistribute it and/or modify it under
:=1 )Y*s>-.--   : the terms of the GNU Library General Public
.="- .-=="i,     .._ License as published by the Free Software
 - .   .-<_>     .<> Foundation; version 2 of the License.
     ._= =}       :
    .%+i>       _;_.
    .i_,=:_.      -<s. This library is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
    =_        +     =;=| MERCHANTABILITY or FITNESS FOR A
  _.=:.       :    :=>: PARTICULAR PURPOSE. See the GNU
..}^=.=       =       ; Library General Public License for more
++=   -.     .     .: details.
 :     =  ...= . :.=-
 -.   .:....=;==+<; You should have received a copy of the GNU
  -_. . .   )=.  = Library General Public License along with
  --        :-= this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
* The Bluetooth OBEX manipulating class declaration
*/
#ifndef OpieBtObex_H
#define OpieBtObex_H
+#ifdef BLUETOOTH
#include "obexbase.h"
#include <qobject.h>
#include <services.h>
#include <manager.h>
#include <obexpush.h>
#include "obexserver.h"
namespace Opie {namespace Core {class OProcess;}}
class QCopChannel;
using namespace OpieTooth;
namespace OpieObex {
// Maybe this should be derved from Obex.
class BtObex : public ObexBase {
Q_OBJECT
public:
/**
* BtObex c'tor look
*/
BtObex( QObject *parent, const char* name);
/**
* d'tor
*/
~BtObex();
/** TODO mbhaynie -- Maybe opd would be a better way to receive.
* Starting listening to Bluetooth after enabled by the applet
* a signal gets emitted when received a file
*/
void receive();
void send( const QString&, const QString& );
void setReceiveEnabled( bool = false );
signals:
/**
* a signal
* @param path The path to the received file
*/
void receivedFile( const QString& path);
/**
* error signal if the program couldn't be started or the
* the connection timed out
*/
void error( int );
/**
* The current try to receive data
*/
void currentTry(unsigned int);
/**
* signal sent The file got beamed to the remote location
*/
void sent(bool);
void done(bool);
private:
int m_port;
ObexPush* m_send;
bool m_receive : 1;
OpieTooth::Manager* btManager;
void shutDownReceive();
ObexServer* m_rec;
private slots:
// Push process slots
void slotPushStatus(QCString&);
void slotPushComplete(int);
void slotPushError(int);
// the process exited
void slotExited(Opie::Core::OProcess*) ;
void slotStdOut(Opie::Core::OProcess*, char*, int);
void slotError();
void slotFoundServices(const QString&, Services::ValueList);
private:
void sendNow();
QString parseOut();
void received();
};
};
-
+#endif //BLUETOOTH
#endif
diff --git a/core/obex/obex.pro b/core/obex/obex.pro
index 1fc6958..05118ab 100644
--- a/core/obex/obex.pro
+++ b/core/obex/obex.pro
@@ -1,20 +1,24 @@
TEMPLATE = lib
CONFIG += qt warn_on
-HEADERS = obex.h btobex.h obexhandler.h obexsend.h receiver.h obeximpl.h obexbase.h obexserver.h
-SOURCES = obex.cpp btobex.cpp obexsend.cpp obexhandler.cpp receiver.cpp obeximpl.cpp obexbase.cpp obexserver.cpp
+HEADERS = obex.h obexhandler.h obexsend.h receiver.h obeximpl.h obexbase.h obexserver.h
+SOURCES = obex.cpp obexsend.cpp obexhandler.cpp receiver.cpp obeximpl.cpp obexbase.cpp obexserver.cpp
TARGET = opieobex
DESTDIR = $(OPIEDIR)/plugins/obex
INTERFACES = obexsendbase.ui
INCLUDEPATH += $(OPIEDIR)/include $(OPIEDIR)/core/launcher
DEPENDPATH +=
LIBS += -lqpe -lopiecore2
VERSION = 0.0.4
include( $(OPIEDIR)/include.pro )
target.path = $$prefix/plugins/applets
#FIXME: These parameters are used if bluetooth is used
+CONFTEST = $$system( echo $CONFIG_LIBOPIETOOTH )
+contains( CONFTEST, y ){
+HEADERS += btobex.h
+SOURCES += btobex.cpp
INCLUDEPATH += $(OPIEDIR)/noncore/net/opietooth/lib
LIBS += -lopietooth1 -lbluetooth -lopenobex
DEFINES += BLUETOOTH
-
+}
diff --git a/core/obex/obexsend.cpp b/core/obex/obexsend.cpp
index 45754e3..d58b4e9 100644
--- a/core/obex/obexsend.cpp
+++ b/core/obex/obexsend.cpp
@@ -1,313 +1,352 @@
// 7-Jul-2005 mbh@sdgsystems.com: replace hand coded form with one
// generated via QT2 Designer. The new form supports
// selection of target devices, as opposed to sending to
// all.
#include "obex.h"
+#ifdef BLUETOOTH
#include "btobex.h"
+#endif
#include "obexsend.h"
using namespace OpieObex;
+#ifdef BLUETOOTH
using namespace OpieTooth;
+#endif
/* OPIE */
#include <opie2/odebug.h>
#include <qpe/qcopenvelope_qws.h>
#include <opie2/oresource.h>
#include <qpe/version.h>
+#ifdef BLUETOOTH
#include <devicehandler.h>
#include "remotedevice.h"
+#endif
using namespace Opie::Core;
/* QT */
#include <qlabel.h>
#include <qpushbutton.h>
#include <qpixmap.h>
#include <qlistview.h>
#include <unistd.h>
/* TRANSLATOR OpieObex::SendWidget */
/* Just for backward compatibility */
#if OPIE_VERSION < 102010
#define OResource Resource
#endif
SendWidget::SendWidget( QWidget* parent, const char* name )
: obexSendBase( parent, name ) {
initUI();
}
SendWidget::~SendWidget() {
}
void SendWidget::initUI() {
m_obex = new Obex(this, "obex");
connect(m_obex, SIGNAL(error(int) ),
this, SLOT(slotIrError(int) ) );
connect(m_obex, SIGNAL(sent(bool) ),
this, SLOT(slotIrSent(bool) ) );
connect(m_obex, SIGNAL(currentTry(unsigned int) ),
this, SLOT(slotIrTry(unsigned int) ) );
QCopChannel* chan = new QCopChannel("QPE/IrDaAppletBack", this );
connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ),
this, SLOT(dispatchIrda(const QCString&,const QByteArray&) ) );
+#ifdef BLUETOOTH
m_btobex = new BtObex(this, "btobex");
connect(m_btobex, SIGNAL(error(int) ),
this, SLOT(slotBtError(int) ) );
connect(m_btobex, SIGNAL(sent(bool) ),
this, SLOT(slotBtSent(bool) ) );
connect(m_btobex, SIGNAL(currentTry(unsigned int) ),
this, SLOT(slotBtTry(unsigned int) ) );
chan = new QCopChannel("QPE/BluetoothBack", this );
connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ),
this, SLOT(dispatchBt(const QCString&,const QByteArray&) ) );
-
+#endif
}
/*
* in send we'll first set everything up
* and then wait for a list of devices.
*/
void SendWidget::send( const QString& file, const QString& desc ) {
m_file = file;
m_irDa.clear();
+#ifdef BLUETOOTH
m_bt.clear();
+#endif
m_start = 0;
fileToSend->setText(desc.isEmpty() ? file : desc );
if ( !QCopChannel::isRegistered("QPE/IrDaApplet") )
{
irdaStatus->setText(tr("not enabled."));
}
else
{
QCopEnvelope e1("QPE/IrDaApplet", "enableIrda()");
irdaStatus->setText(tr("ready"));
sendButton->setEnabled( true );
}
+#ifdef BLUETOOTH
if ( !QCopChannel::isRegistered("QPE/Bluetooth") )
{
btStatus->setText(tr("not enabled."));
}
else
{
QCopEnvelope e1("QPE/Bluetooth", "enableBluetooth()");
btStatus->setText(tr("ready."));
sendButton->setEnabled( true );
}
read_receivers();
+#endif
}
int SendWidget::addReceiver(const QString& str, const char *icon)
{
QListViewItem * item = new QListViewItem( receiverList, 0 );
item->setText( 0, str );
item->setPixmap( 1, OResource::loadPixmap( icon ) );
int id = receivers.count();
receivers[id] = item;
return id;
}
bool SendWidget::receiverSelected(int id)
{
return (bool)(receivers[id]->pixmap(2) != NULL);
}
void SendWidget::setReceiverStatus( int id, const QString& status ) {
if ( !receivers.contains(id) ) return;
receivers[id]->setText(3, status );
}
void SendWidget::slotIrDaDevices( const QStringList& list) {
for (QStringList::ConstIterator it = list.begin();
it != list.end(); ++it ) {
int id = addReceiver(*it, "obex/irda.png");
m_irDa.insert( id, (*it) );
}
irdaStatus->setText( tr("ready."));
m_irDaIt = m_irDa.begin();
}
void SendWidget::slotBTDevices( const QMap<QString, QString>& str ) {
+#ifdef BLUETOOTH
for(QMap<QString, QString>::ConstIterator it = str.begin();
it != str.end(); ++it ) {
int id = addReceiver(it.key(), "obex/bt.png");
m_bt.insert( id, Pair( it.key(), it.data() ) );
}
btStatus->setText(tr("ready."));
m_btIt = m_bt.begin();
+#else
+ (void)str;
+#endif
}
void SendWidget::slotSelectedDevice( int, int ) {
/* if ( name == m_irDeSearch ) {
for (QMap<int, QString>::Iterator it= m_irDa.begin(); it != m_irDa.end(); ++it )
m_devBox->removeDevice( it.key() );
QCopEnvelope e2("QPE/IrDaApplet", "listDevices()");
}*/
}
void SendWidget::dispatchIrda( const QCString& str, const QByteArray& ar ) {
if ( str == "devices(QStringList)" ) {
QDataStream stream( ar, IO_ReadOnly );
QStringList list;
stream >> list;
slotIrDaDevices( list );
}
}
void SendWidget::slotIrError( int ) {
irdaStatus->setText(tr("error :("));
}
void SendWidget::slotIrSent( bool b) {
+#ifdef BLUETOOTH
QString text = b ? tr("Sent") : tr("Failure");
setReceiverStatus( m_irDaIt.key(), text );
++m_irDaIt;
slotStartIrda();
+#else
+ (void)b;
+#endif
}
void SendWidget::slotIrTry(unsigned int trI) {
setReceiverStatus(m_irDaIt.key(), tr("Try %1").arg( QString::number( trI ) ));
}
void SendWidget::slotStartIrda() {
if ( !m_irDa.count() )
return;
if ( m_irDaIt == m_irDa.end() || !receiverSelected(m_irDaIt.key())) {
irdaStatus->setText(tr("complete."));
m_irDaIt = m_irDa.begin();
return;
}
setReceiverStatus( m_irDaIt.key(), tr("Start sending") );
irdaStatus->setText(tr("sending."));
m_obex->send( m_file, tr("noaddress") );
}
void SendWidget::dispatchBt( const QCString& str, const QByteArray& ar ) {
if ( str == "devices(QStringMap)" ) {
QDataStream stream( ar, IO_ReadOnly );
QMap<QString, QString> btmap;
stream >> btmap;
slotBTDevices( btmap );
}
}
void SendWidget::slotBtError( int ) {
btStatus->setText(tr("error :("));
}
void SendWidget::slotBtSent( bool b) {
+#ifdef BLUETOOTH
QString text = b ? tr("Sent") : tr("Failure");
setReceiverStatus( m_btIt.key(), text );
++m_btIt;
slotStartBt();
+#else
+ (void)b;
+#endif
}
void SendWidget::slotBtTry(unsigned int trI) {
+#ifdef BLUETOOTH
setReceiverStatus( m_btIt.key(), tr("Try %1").arg( QString::number( trI ) ) );
+#else
+ (void)trI;
+#endif
}
void SendWidget::slotStartBt() {
+#ifdef BLUETOOTH
// skip past unselected receivers
if ( !m_bt.count() )
return;
while((m_btIt != m_bt.end()) && !receiverSelected(m_btIt.key()))
++m_btIt;
if (m_btIt == m_bt.end() ) {
btStatus->setText(tr("complete."));
m_btIt = m_bt.begin();
return;
}
setReceiverStatus( m_btIt.key(), tr("Start sending") );
btStatus->setText(tr("sending."));
m_btobex->send( m_file, m_btIt.data().second() );
+#endif
}
void SendWidget::send_to_receivers() {
+#ifdef BLUETOOTH
slotStartBt();
+#endif
slotStartIrda();
}
+#ifdef BLUETOOTH
/**
* Read receivers saved by bluetooth manager
*/
void SendWidget::read_receivers()
{
QValueList<RemoteDevice> devices;
DeviceHandler handler;
QValueList<RemoteDevice>::ConstIterator it;
receiverList->clear();
receivers.clear();
sendButton->setDisabled( true );
btStatus->setText(tr("load."));
m_bt.clear();
if ( QCopChannel::isRegistered("QPE/Bluetooth") )
{
devices = handler.load();
for( it = devices.begin(); it != devices.end() ; ++it )
{
int id = addReceiver((*it).name(), "obex/bt.png");
m_bt.insert(id, Pair((*it).name(), (*it).mac()));
}
btStatus->setText(tr("ready."));
m_btIt = m_bt.begin();
sendButton->setEnabled( true );
}
}
-
+#endif
void SendWidget::scan_for_receivers()
{
sendButton->setDisabled( true );
receiverList->clear();
receivers.clear();
m_irDa.clear();
+#ifdef BLUETOOTH
m_bt.clear();
-
+#endif
if ( QCopChannel::isRegistered("QPE/IrDaApplet") )
{
irdaStatus->setText(tr("searching..."));
sendButton->setEnabled( true );
QCopEnvelope e2("QPE/IrDaApplet", "listDevices()");
}
+#ifdef BLUETOOTH
if ( QCopChannel::isRegistered("QPE/Bluetooth") )
{
btStatus->setText(tr("searching..."));
sendButton->setEnabled( true );
QCopEnvelope e3("QPE/Bluetooth", "listDevices()");
}
+#endif
}
void SendWidget::toggle_receiver(QListViewItem* item)
{
if (!item)
return;
// toggle the state of an individual receiver.
if (item->pixmap(2))
item->setPixmap(2, QPixmap());
else
item->setPixmap(2, OResource::loadPixmap("obex/check.png"));
}
void SendWidget::closeEvent( QCloseEvent* evt) {
delete m_obex;
m_obex = NULL;
+#ifdef BLUETOOTH
delete m_btobex;
m_btobex = NULL;
+#endif
obexSendBase::closeEvent(evt);
{
QCopEnvelope e("QPE/IrDaApplet", "disableIrda()");
}
+#ifdef BLUETOOTH
{
QCopEnvelope e("QPE/Bluetooth", "disableBluetooth()");
}
+#endif
}
void SendWidget::userDone() {
close();
}
QString SendWidget::file()const {
return m_file;
}
diff --git a/core/obex/obexsend.h b/core/obex/obexsend.h
index f9ba340..cc27354 100644
--- a/core/obex/obexsend.h
+++ b/core/obex/obexsend.h
@@ -1,99 +1,108 @@
#ifndef OPIE_OBEX_SEND_WIDGET_H
#define OPIE_OBEX_SEND_WIDGET_H
// 7-Jul-2005 mbh@sdgsystems.com: replace hand coded form with one
// generated via QT2 Designer. The new form supports
// selection of target devices, as opposed to sending to
// all.
#include <qstring.h>
#include <qstringlist.h>
#include <qmap.h>
#include "obexsendbase.h"
class QLabel;
class QVBoxLayout;
/**
* This is the new sending widget for Obex
* It will attemp to smart and be able to send
* it to multiple (selected) devices.
* It'll support BT + IrDa
*/
namespace OpieObex {
class Obex;
+#ifdef BLUETOOTH
class BtObex;
+#endif
struct Pair {
Pair(const QString& first = QString::null,
const QString& second = QString::null)
: m_first(first), m_second(second ) {
}
QString first()const{ return m_first; }
QString second()const { return m_second; }
private:
QString m_first;
QString m_second;
};
class SendWidget : public obexSendBase {
Q_OBJECT
public:
SendWidget( QWidget* parent = 0, const char* name = 0);
~SendWidget();
QString file()const;
protected:
void closeEvent( QCloseEvent* );
+#ifdef BLUETOOTH
void read_receivers();
+#endif
public slots:
void send( const QString& file, const QString& desc );
signals:
void done();
protected slots:
virtual void userDone();
virtual void send_to_receivers();
virtual void scan_for_receivers();
virtual void toggle_receiver(QListViewItem* item);
private slots: // QCOP slots
/* IrDa Names*/
void slotIrDaDevices( const QStringList& );
/* Bt Names + BD-Addr */
void slotBTDevices( const QMap<QString, QString>& );
+
void slotSelectedDevice( int id, int dev );
void dispatchIrda( const QCString& str, const QByteArray& ar );
void slotIrError( int );
void slotIrSent(bool);
void slotIrTry(unsigned int );
void slotStartIrda();
void dispatchBt( const QCString& str, const QByteArray& ar );
void slotBtError( int );
void slotBtSent(bool);
void slotBtTry(unsigned int );
void slotStartBt();
private:
void initUI();
int addReceiver(const QString& str, const char *icon);
void setReceiverStatus( int id, const QString& status );
bool receiverSelected(int id);
int m_start;
QMap<int, QString> m_irDa;
QMap<int, QString>::Iterator m_irDaIt;
+#ifdef BLUETOOTH
QMap<int, Pair > m_bt;
QMap<int, Pair>::Iterator m_btIt;
+#endif
QMap<int, QListViewItem *> receivers;
QString m_file;
Obex* m_obex;
+#ifdef BLUETOOTH
BtObex* m_btobex;
+#endif
};
}
#endif
diff --git a/core/obex/receiver.cpp b/core/obex/receiver.cpp
index e153152..3190353 100644
--- a/core/obex/receiver.cpp
+++ b/core/obex/receiver.cpp
@@ -1,83 +1,85 @@
#include "obex.h"
#include "btobex.h"
#include "obexbase.h"
#include "receiver.h"
using namespace OpieObex;
/* OPIE */
#include <opie2/odebug.h>
#include <qpe/applnk.h>
#include <qpe/qpeapplication.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/filemanager.h>
using namespace Opie::Core;
/* QT */
#include <qfileinfo.h>
#include <qlabel.h>
#include <qtextview.h>
#include <qpushbutton.h>
/* STD */
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <stdlib.h> // int system
#include <unistd.h>
#include <fcntl.h>
/* TRANSLATOR OpieObex::Receiver */
Receiver::Receiver(RecType type) {
if (type == REC_IRDA)
m_obex = new Obex(this, "Receiver");
+#ifdef BLUETOOTH
else
m_obex = new BtObex(this, "Receiver");
+#endif
connect(m_obex, SIGNAL(receivedFile(const QString&) ),
this, SLOT(slotReceived(const QString&) ) );
m_obex->receive();
}
Receiver::~Receiver() {
m_obex->setReceiveEnabled( false );
delete m_obex;
}
void Receiver::slotReceived( const QString& _file ) {
QString file = _file;
int check = checkFile(file);
if ( check == AddressBook )
handleAddr( file );
else if ( check == Datebook )
handleDateTodo( file );
else
handleOther( file );
}
void Receiver::handleAddr( const QString& str ) {
QCopEnvelope e("QPE/Application/addressbook", "setDocument(QString)" );
e << str;
}
/* we can not say for sure if it's a VEevent ot VTodo */
void Receiver::handleDateTodo( const QString& str ) {
QCopEnvelope e0("QPE/Application/todolist", "setDocument(QString)");
e0 << str;
QCopEnvelope e1("QPE/Application/datebook", "setDocument(QString)" );
e1 << str;
}
/*
* Handle other asks if it should accept the
* beamed object and creates a DocLnk
*/
void Receiver::handleOther( const QString& other ) {
OtherHandler* hand = new OtherHandler();
hand->handle( other );
}
void Receiver::tidyUp( QString& _file, const QString& ending) {
/* libversit fails on BASE64 encoding we try to sed it away */
QString file = _file;
char foo[24]; // big enough
(void)::strcpy(foo, "/tmp/opie-XXXXXX");
int fd = ::mkstemp(foo);
if ( fd == -1 )
return;