summaryrefslogtreecommitdiff
path: root/core/obex/obexserver.cpp
Unidiff
Diffstat (limited to 'core/obex/obexserver.cpp') (more/less context) (show whitespace changes)
-rw-r--r--core/obex/obexserver.cpp28
1 files changed, 17 insertions, 11 deletions
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
@@ -198,25 +198,37 @@ static void obex_conn_event (obex_t *handle, obex_object_t *object,
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
@@ -414,38 +426,32 @@ bool ObexServer::start(RunMode runmode, Communication comm)
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) {
426 do {
427 int result; //Connection result
428 if ( fd[ 1 ] ) { 438 if ( fd[ 1 ] ) {
429 ::close(fd[1]); 439 ::close(fd[1]);
430 fd[1] = 0; 440 fd[1] = 0;
431 } 441 }
432 if ((result = OBEX_HandleInput(m_obex, 60)) < 0) { 442 do {
433 if (errno != ECONNRESET) { 443 if (OBEX_HandleInput(m_obex, 60) < 0) {
434 printf("OBEX_HandleInput error %d\n", errno); 444 fprintf(stderr,"failed to OBEX_HandleInput(), errno=%d\n",errno);
435 fflush(stdout); 445 _exit(errno?errno:-1);
436 _exit(-1);
437 }
438 else
439 _exit(0);
440 } 446 }
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