obex_t *obex_open(int fd, obex_callback_t *callback, void *data) { obex_t *handle; obex_context_t *context; context = malloc(sizeof(*context)); if (!context) return NULL; memset(context, 0, sizeof(*context)); context->state = OBEX_OPEN; context->cid = CID_INVALID; handle = OBEX_Init(OBEX_TRANS_FD, obex_event, 0); if (!handle) { free(context); return NULL; } context->user_data = data; context->callback = callback; context->tx_max = sizeof(context->buf); OBEX_SetUserData(handle, context); OBEX_SetTransportMTU(handle, sizeof(context->buf), sizeof(context->buf)); if (FdOBEX_TransportSetup(handle, fd, fd, 0) < 0) { OBEX_Cleanup(handle); return NULL; } return handle; }
static int OBEXServer_init(OBEXServer *self, PyObject *args) { int fd; PyObject *cb_error; PyObject *cb_newrequest; PyObject *cb_requestdone; int mtu = 1024; /* todo make this a keyword arg */ if (!PyArg_ParseTuple(args, "iOOO", &fd, &cb_error, &cb_newrequest, &cb_requestdone)) { return -1; } if (!PyCallable_Check(cb_error) || !PyCallable_Check(cb_newrequest) || !PyCallable_Check(cb_requestdone)) { PyErr_SetString(PyExc_TypeError, "given callback is not callable"); return -1; } if (self->cb_error == NULL) { Py_INCREF(cb_error); self->cb_error = cb_error; } if (self->cb_newrequest == NULL) { Py_INCREF(cb_newrequest); self->cb_newrequest = cb_newrequest; } if (self->cb_requestdone == NULL) { Py_INCREF(cb_requestdone); self->cb_requestdone = cb_requestdone; } if (self->obex == NULL) { self->obex = OBEX_Init(OBEX_TRANS_FD, obexserver_event, 0); if (self->obex == NULL) { PyErr_SetString(PyExc_IOError, "error creating OBEX object"); return -1; } if (FdOBEX_TransportSetup(self->obex, fd, fd, mtu) < 0) { PyErr_SetString(PyExc_IOError, "error initialising transport"); return -1; } } OBEX_SetUserData(self->obex, self); return 0; }
/* * obex_start_server() * * runs obex server fds transport */ int obexsrv_run(obexsrv_t *srv, int rfd, int wfd) { int err = 0, to; srv->handle = OBEX_Init(OBEX_TRANS_FD, obexsrv_event, 0); if (!srv->handle) { BTERROR( "OBEX_Init failed:%s", strerror(errno)); return -1; } /* init some members */ srv->sfd = -1; srv->name = NULL; srv->flags = 0; srv->buf = NULL; // set private pointer OBEX_SetUserData(srv->handle, srv); FdOBEX_TransportSetup(srv->handle, rfd, wfd, 0); for (;;) { /* request processing loop */ DBPRT("Processing request...\n"); srv->serverdone = FALSE; to = 1000; /* unlimmited - waiting for request */ while (!srv->serverdone) { if ((err = OBEX_HandleInput(srv->handle, to)) < 0) { BTERROR("Error while doing OBEX_HandleInput()"); break; } to = 5; /* processing request */ } if (srv->state == SRVSTATE_CLOSED) break; if (err < 0) break; } OBEX_Cleanup(srv->handle); srv->handle = NULL; return 0; }