summaryrefslogtreecommitdiff
authorpaule <paule>2007-07-16 09:38:45 (UTC)
committer paule <paule>2007-07-16 09:38:45 (UTC)
commit6e556a6cd6b4edf2abcf08a657c9f0b19a0fca76 (patch) (unidiff)
treede3724f66caa45e5fee614c22494587657093de8
parent15fbd2a9189281ca84d89ad6a77261d0046add36 (diff)
downloadopie-6e556a6cd6b4edf2abcf08a657c9f0b19a0fca76.zip
opie-6e556a6cd6b4edf2abcf08a657c9f0b19a0fca76.tar.gz
opie-6e556a6cd6b4edf2abcf08a657c9f0b19a0fca76.tar.bz2
Commit "thanks-pfalcon-this-one-is-better.patch" as attached to bug #1854. This fixes libopieobex previously being built without being linked to libopenobex, as well as some other issues that prevented IR recieve from working.upstream
Original patch by Marek Vasut <marek.vasut@gmail.com>; improved with input from pfalcon & polyonymous.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/obex/obex.pro4
-rw-r--r--core/obex/obexserver.cpp36
2 files changed, 23 insertions, 17 deletions
diff --git a/core/obex/obex.pro b/core/obex/obex.pro
index 05118ab..2372d12 100644
--- a/core/obex/obex.pro
+++ b/core/obex/obex.pro
@@ -1,24 +1,24 @@
1 TEMPLATE= lib 1 TEMPLATE= lib
2 CONFIG += qt warn_on 2 CONFIG += qt warn_on
3 HEADERS= obex.h obexhandler.h obexsend.h receiver.h obeximpl.h obexbase.h obexserver.h 3 HEADERS= obex.h obexhandler.h obexsend.h receiver.h obeximpl.h obexbase.h obexserver.h
4 SOURCES= obex.cpp obexsend.cpp obexhandler.cpp receiver.cpp obeximpl.cpp obexbase.cpp obexserver.cpp 4 SOURCES= obex.cpp obexsend.cpp obexhandler.cpp receiver.cpp obeximpl.cpp obexbase.cpp obexserver.cpp
5 TARGET = opieobex 5 TARGET = opieobex
6 DESTDIR = $(OPIEDIR)/plugins/obex 6 DESTDIR = $(OPIEDIR)/plugins/obex
7INTERFACES = obexsendbase.ui 7INTERFACES = obexsendbase.ui
8INCLUDEPATH += $(OPIEDIR)/include $(OPIEDIR)/core/launcher 8INCLUDEPATH += $(OPIEDIR)/include $(OPIEDIR)/core/launcher
9DEPENDPATH += 9DEPENDPATH +=
10LIBS += -lqpe -lopiecore2 10LIBS += -lqpe -lopiecore2 -lopenobex
11 VERSION = 0.0.4 11 VERSION = 0.0.4
12 12
13include( $(OPIEDIR)/include.pro ) 13include( $(OPIEDIR)/include.pro )
14target.path = $$prefix/plugins/applets 14target.path = $$prefix/plugins/applets
15 15
16#FIXME: These parameters are used if bluetooth is used 16#FIXME: These parameters are used if bluetooth is used
17CONFTEST = $$system( echo $CONFIG_LIBOPIETOOTH ) 17CONFTEST = $$system( echo $CONFIG_LIBOPIETOOTH )
18contains( CONFTEST, y ){ 18contains( CONFTEST, y ){
19HEADERS += btobex.h 19HEADERS += btobex.h
20SOURCES += btobex.cpp 20SOURCES += btobex.cpp
21INCLUDEPATH += $(OPIEDIR)/noncore/net/opietooth/lib 21INCLUDEPATH += $(OPIEDIR)/noncore/net/opietooth/lib
22LIBS += -lopietooth1 -lbluetooth -lopenobex 22LIBS += -lopietooth1 -lbluetooth
23DEFINES += BLUETOOTH 23DEFINES += BLUETOOTH
24} 24}
diff --git a/core/obex/obexserver.cpp b/core/obex/obexserver.cpp
index f1fb205..59fcb0f 100644
--- a/core/obex/obexserver.cpp
+++ b/core/obex/obexserver.cpp
@@ -186,49 +186,61 @@ static void obex_conn_event (obex_t *handle, obex_object_t *object,
186 int mode, int event, int obex_cmd, int obex_rsp) 186 int mode, int event, int obex_cmd, int obex_rsp)
187{ 187{
188 (void)mode; 188 (void)mode;
189 (void)obex_rsp; 189 (void)obex_rsp;
190 190
191 switch(event) { 191 switch(event) {
192 case OBEX_EV_REQHINT: 192 case OBEX_EV_REQHINT:
193 switch(obex_cmd) { 193 switch(obex_cmd) {
194 case OBEX_CMD_PUT: 194 case OBEX_CMD_PUT:
195 case OBEX_CMD_CONNECT: 195 case OBEX_CMD_CONNECT:
196 case OBEX_CMD_DISCONNECT: 196 case OBEX_CMD_DISCONNECT:
197 OBEX_ObjectSetRsp (object, OBEX_RSP_CONTINUE, OBEX_RSP_SUCCESS); 197 OBEX_ObjectSetRsp (object, OBEX_RSP_CONTINUE, OBEX_RSP_SUCCESS);
198 break; 198 break;
199 default: 199 default:
200 OBEX_ObjectSetRsp (object, OBEX_RSP_NOT_IMPLEMENTED, 200 OBEX_ObjectSetRsp (object, OBEX_RSP_NOT_IMPLEMENTED,
201 OBEX_RSP_NOT_IMPLEMENTED); 201 OBEX_RSP_NOT_IMPLEMENTED);
202 break; 202 break;
203 } 203 }
204 break; 204 break;
205 205
206 case OBEX_EV_REQ: 206 case OBEX_EV_REQ:
207 /* Comes when a server-request has been received. */ 207 /* Comes when a server-request has been received. */
208 handle_request (handle, object, event, obex_cmd); 208 handle_request (handle, object, event, obex_cmd);
209 break; 209 break;
210 210 case OBEX_EV_REQDONE:
211 switch(obex_cmd) {
212 case OBEX_CMD_PUT:
213 case OBEX_CMD_CONNECT:
214 break;
215 case OBEX_CMD_DISCONNECT:
216 OBEX_TransportDisconnect(handle);
217 _exit(0);
218 break;
219 default:
220 break;
221 }
222 break;
211 case OBEX_EV_LINKERR: 223 case OBEX_EV_LINKERR:
212 break; 224 break;
213 } 225 }
214} 226}
215 227
216/** 228/**
217 * Function handles OBEX event 229 * Function handles OBEX event
218 * @param handle OBEX connection handle 230 * @param handle OBEX connection handle
219 * @param object OBEX object itself 231 * @param object OBEX object itself
220 * @param mode 232 * @param mode
221 * @param event event code 233 * @param event event code
222 * @param obex_cmd OBEX command itself 234 * @param obex_cmd OBEX command itself
223 * @param obex_rsp OBEX responce 235 * @param obex_rsp OBEX responce
224 */ 236 */
225static void obex_event (obex_t* handle, obex_object_t* object, int mode, 237static void obex_event (obex_t* handle, obex_object_t* object, int mode,
226 int event, int obex_cmd, int obex_rsp) 238 int event, int obex_cmd, int obex_rsp)
227{ 239{
228 240
229 obex_t *obex; //OBEX connection handle 241 obex_t *obex; //OBEX connection handle
230 242
231 switch (event) { 243 switch (event) {
232 case OBEX_EV_ACCEPTHINT: 244 case OBEX_EV_ACCEPTHINT:
233 obex = OBEX_ServerAccept (handle, obex_conn_event, NULL); 245 obex = OBEX_ServerAccept (handle, obex_conn_event, NULL);
234 break; 246 break;
@@ -402,63 +414,57 @@ bool ObexServer::start(RunMode runmode, Communication comm)
402 } 414 }
403 // The child process 415 // The child process
404 if ( !commSetupDoneC() ) 416 if ( !commSetupDoneC() )
405 qWarning( "Could not finish comm setup in child!" ); 417 qWarning( "Could not finish comm setup in child!" );
406 418
407 setupEnvironment(); 419 setupEnvironment();
408 420
409 // Matthias 421 // Matthias
410 if ( run_mode == DontCare ) 422 if ( run_mode == DontCare )
411 setpgid( 0, 0 ); 423 setpgid( 0, 0 );
412 // restore default SIGPIPE handler (Harri) 424 // restore default SIGPIPE handler (Harri)
413 struct sigaction act; 425 struct sigaction act;
414 sigemptyset( &( act.sa_mask ) ); 426 sigemptyset( &( act.sa_mask ) );
415 sigaddset( &( act.sa_mask ), SIGPIPE ); 427 sigaddset( &( act.sa_mask ), SIGPIPE );
416 act.sa_handler = SIG_DFL; 428 act.sa_handler = SIG_DFL;
417 act.sa_flags = 0; 429 act.sa_flags = 0;
418 sigaction( SIGPIPE, &act, 0L ); 430 sigaction( SIGPIPE, &act, 0L );
419 431
420 // We set the close on exec flag. 432 // We set the close on exec flag.
421 // Closing of fd[1] indicates that the execvp succeeded! 433 // Closing of fd[1] indicates that the execvp succeeded!
422 if ( fd[ 1 ] ) 434 if ( fd[ 1 ] )
423 fcntl( fd[ 1 ], F_SETFD, FD_CLOEXEC ); 435 fcntl( fd[ 1 ], F_SETFD, FD_CLOEXEC );
424 436
425 if (initObex() == 0) { 437 if (initObex() == 0) {
438 if ( fd[ 1 ] ) {
439 ::close(fd[1]);
440 fd[1] = 0;
441 }
426 do { 442 do {
427 int result; //Connection result 443 if (OBEX_HandleInput(m_obex, 60) < 0) {
428 if ( fd[ 1 ] ) { 444 fprintf(stderr,"failed to OBEX_HandleInput(), errno=%d\n",errno);
429 ::close(fd[1]); 445 _exit(errno?errno:-1);
430 fd[1] = 0; 446 }
431 }
432 if ((result = OBEX_HandleInput(m_obex, 60)) < 0) {
433 if (errno != ECONNRESET) {
434 printf("OBEX_HandleInput error %d\n", errno);
435 fflush(stdout);
436 _exit(-1);
437 }
438 else
439 _exit(0);
440 }
441 } while(1); 447 } while(1);
442 } 448 }
443 char resultByte = 1; 449 char resultByte = 1;
444 if ( fd[ 1 ] ) 450 if ( fd[ 1 ] )
445 write( fd[ 1 ], &resultByte, 1 ); 451 write( fd[ 1 ], &resultByte, 1 );
446 _exit( -1 ); 452 _exit( -1 );
447 } 453 }
448 else if ( -1 == pid_ ) 454 else if ( -1 == pid_ )
449 { 455 {
450 // forking failed 456 // forking failed
451 457
452 runs = false; 458 runs = false;
453 return false; 459 return false;
454 } 460 }
455 else 461 else
456 { 462 {
457 if ( fd[ 1 ] ) 463 if ( fd[ 1 ] )
458 close( fd[ 1 ] ); 464 close( fd[ 1 ] );
459 // the parent continues here 465 // the parent continues here
460 466
461 // Discard any data for stdin that might still be there 467 // Discard any data for stdin that might still be there
462 input_data = 0; 468 input_data = 0;
463 469
464 // Check whether client could be started. 470 // Check whether client could be started.