Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
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;
}