-rw-r--r-- | core/obex/obexserver.cpp | 24 |
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 |