summaryrefslogtreecommitdiff
path: root/core/obex/obexserver.cpp
Side-by-side diff
Diffstat (limited to 'core/obex/obexserver.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/obex/obexserver.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/core/obex/obexserver.cpp b/core/obex/obexserver.cpp
index 95196de..25d8224 100644
--- a/core/obex/obexserver.cpp
+++ b/core/obex/obexserver.cpp
@@ -27,51 +27,52 @@
*/
/*
* The OBEX server class implementation
* Based on OBEX server from GPE (thanks, guys)
*/
#include "obexserver.h"
#include <unistd.h>
#include <opie2/odebug.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <qapplication.h>
#include <opie2/oprocctrl.h>
#include <qstring.h>
#include <qfile.h>
using namespace Opie::Core;
using namespace Opie::Core::Internal;
using namespace OpieObex;
-ObexServer::ObexServer() :
+ObexServer::ObexServer(int trans) :
OProcess(tr("ObexServer"), 0, "ObexServer")
{
+ transport = trans;
m_obex = NULL;
}
ObexServer::~ObexServer()
{
stop();
}
/**
* Function handles the file received
* @param name the file name
* @param data the file data
* @param data_len the data length
* @return 0 on success -1 on error
*/
static int file_received(uint8_t* name, const uint8_t* data, size_t data_len)
{
QString path("/tmp/");
path += (char*)name;
QFile out(path);
int err = 0;
if (!out.open(IO_Raw | IO_ReadWrite | IO_Truncate)) {
printf("File %s open error %d\n", (const char*)path, errno);
@@ -308,61 +309,64 @@ sdp_session_t* ObexServer::addOpushSvc(uint8_t chan, const char* name)
lsession = sdp_connect(BDADDR_ANY, BDADDR_LOCAL, SDP_RETRY_IF_BUSY);
if (lsession == NULL)
goto errout;
err = sdp_record_register(lsession, &record, 0);
if (err) {
sdp_close(lsession);
lsession = NULL;
}
errout:
sdp_data_free(channel);
sdp_list_free(proto[0], 0);
sdp_list_free(proto[1], 0);
sdp_list_free(proto[2], 0);
sdp_list_free(apseq, 0);
sdp_list_free(aproto, 0);
return lsession;
}
int ObexServer::initObex(void)
{
int channel = 10; //Channel on which we do listen
if (m_obex)
return 0;
- m_obex = ::OBEX_Init(OBEX_TRANS_BLUETOOTH, obex_event, 0);
+ m_obex = ::OBEX_Init(transport, obex_event, 0);
if (!m_obex) {
printf("OBEX initialization error %d\n", errno);
return -1;
}
- ::BtOBEX_ServerRegister(m_obex, NULL, channel);
- m_session = addOpushSvc(channel, "OBEX push service");
- if (!m_session) {
- printf("OBEX registration error %d\n", errno);
- ::OBEX_Cleanup(m_obex);
- m_obex = NULL;
- return -1;
- }
+ if (transport == OBEX_TRANS_BLUETOOTH) {
+ ::BtOBEX_ServerRegister(m_obex, NULL, channel);
+ m_session = addOpushSvc(channel, "OBEX push service");
+ if (!m_session) {
+ printf("OBEX registration error %d\n", errno);
+ ::OBEX_Cleanup(m_obex);
+ m_obex = NULL;
+ return -1;
+ }
+ } else if (transport == OBEX_TRANS_IRDA)
+ ::IrOBEX_ServerRegister(m_obex, "OBEX");
return 0;
}
bool ObexServer::start(RunMode runmode, Communication comm)
{
if ( runs )
{
return false; // cannot start a process that is already running
// or if no executable has been assigned
}
run_mode = runmode;
status = 0;
if ( !setupCommunication( comm ) )
qWarning( "Could not setup Communication!" );
// We do this in the parent because if we do it in the child process
// gdb gets confused when the application runs from gdb.
uid_t uid = getuid();
gid_t gid = getgid();
#ifdef HAVE_INITGROUPS
struct passwd *pw = getpwuid( uid );
#endif