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; }
// // Create an ircp client // ircp_client_t *ircp_cli_open(ircp_info_cb_t infocb) { ircp_client_t *cli; DEBUG(4, "\n"); cli = malloc(sizeof(ircp_client_t)); if(cli == NULL) return NULL; cli->infocb = infocb; cli->fd = -1; #ifdef DEBUG_TCP cli->obexhandle = OBEX_Init(OBEX_TRANS_INET, cli_obex_event, 0); #else cli->obexhandle = OBEX_Init(OBEX_TRANS_IRDA, cli_obex_event, 0); #endif if(cli->obexhandle == NULL) { goto out_err; } OBEX_SetUserData(cli->obexhandle, cli); /* Buffer for body */ cli->buf = malloc(STREAM_CHUNK); return cli; out_err: if(cli->obexhandle != NULL) OBEX_Cleanup(cli->obexhandle); free(cli); return NULL; }
// // Close an ircp client // void ircp_cli_close(ircp_client_t *cli) { DEBUG(4, "\n"); ircp_return_if_fail(cli != NULL); OBEX_Cleanup(cli->obexhandle); free(cli->buf); free(cli); }
static void OBEXServer_dealloc(OBEXServer *self) { if (self->obex) OBEX_Cleanup(self->obex); Py_XDECREF(self->fileobj); Py_XDECREF(self->tempbuf); self->ob_type->tp_free((PyObject *)self); }
/** Close an obexftp client and free the resources. \param cli the obexftp_client_t to be shut done and free'd. It's save to pass NULL here. Closes the given obexftp client and frees the resources. It's recommended to set the client reference to NULL afterwards. */ void obexftp_close(obexftp_client_t *cli) { DEBUG(3, "%s()\n", __func__); return_if_fail(cli != NULL); OBEX_Cleanup(cli->obexhandle); if (cli->buf_data) { DEBUG(1, "%s: Warning: purging left-over buffer.\n", __func__); free(cli->buf_data); } cache_purge(&cli->cache, NULL); free(cli->stream_chunk); free(cli); }
void obex_close(obex_t *handle) { obex_context_t *context = OBEX_GetUserData(handle); g_return_if_fail(context != NULL); OBEX_SetUserData(handle, NULL); if (context->pending) OBEX_ObjectDelete(handle, context->pending); free(context); OBEX_Cleanup(handle); }
void obex_close(int od) { obex_t *handle = obex_handles[0]; struct obex_context *context; context = OBEX_GetUserData(handle); if (context->state == OBEX_CONNECTED) obex_disconnect(od); OBEX_SetUserData(handle, NULL); free(context); obex_handles[0] = NULL; OBEX_Cleanup(handle); }
/* * 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; }
int main (int argc, char *argv[]) { char cmd[10]; int num, end = 0; int cobex = FALSE, tcpobex = FALSE, btobex = FALSE, r320 = FALSE, usbobex = FALSE; obex_t *handle; #ifdef HAVE_BLUETOOTH bdaddr_t bdaddr; uint8_t channel = 0; #endif #ifdef HAVE_USB obex_interface_t *obex_intf; #endif struct context global_context = {0,}; #ifndef _WIN32 char *port; obex_ctrans_t custfunc; if( (argc == 2 || argc ==3) && (strcmp(argv[1], "-s") == 0 ) ) cobex = TRUE; if( (argc == 2 || argc ==3) && (strcmp(argv[1], "-r") == 0 ) ) { cobex = TRUE; r320 = TRUE; } #endif if( (argc == 2) && (strcmp(argv[1], "-i") == 0 ) ) tcpobex = TRUE; if( (argc >= 2) && (strcmp(argv[1], "-b") == 0 ) ) btobex = TRUE; if( (argc >= 2) && (strcmp(argv[1], "-u") == 0 ) ) usbobex = TRUE; if(cobex) { #ifndef _WIN32 if(argc == 3) port = argv[2]; else port = "/dev/ttyS0"; if(r320) printf("OBEX to R320 on %s!\n", port); else printf("OBEX on %s!\n", port); custfunc.customdata = cobex_open(port, r320); if(custfunc.customdata == NULL) { printf("cobex_open() failed\n"); return -1; } if(! (handle = OBEX_Init(OBEX_TRANS_CUSTOM, obex_event, 0))) { perror( "OBEX_Init failed"); return -1; } custfunc.connect = cobex_connect; custfunc.disconnect = cobex_disconnect; custfunc.write = cobex_write; custfunc.handleinput = cobex_handle_input; custfunc.listen = cobex_connect; // Listen and connect is 100% same on cable if(OBEX_RegisterCTransport(handle, &custfunc) < 0) { printf("Custom transport callback-registration failed\n"); } #else printf("Not implemented in Win32 yet.\n"); #endif // _WIN32 } else if(tcpobex) { printf("Using TCP transport\n"); if(! (handle = OBEX_Init(OBEX_TRANS_INET, obex_event, 0))) { perror( "OBEX_Init failed"); exit(0); } } else if(btobex) { #ifndef _WIN32 switch (argc) { #ifdef HAVE_BLUETOOTH case 4: str2ba(argv[2], &bdaddr); channel = atoi(argv[3]); break; case 3: str2ba(argv[2], &bdaddr); if (bacmp(&bdaddr, BDADDR_ANY) == 0) channel = atoi(argv[2]); else channel = BT_CHANNEL; break; case 2: bacpy(&bdaddr, BDADDR_ANY); channel = BT_CHANNEL; break; #endif default: printf("Wrong number of arguments\n"); exit(0); } printf("Using Bluetooth RFCOMM transport\n"); if(! (handle = OBEX_Init(OBEX_TRANS_BLUETOOTH, obex_event, 0))) { perror( "OBEX_Init failed"); exit(0); } #else printf("Not implemented in Win32 yet.\n"); #endif // _WIN32 } else if(usbobex) { #ifdef HAVE_USB int i, interfaces_number, intf_num; switch (argc) { case 2: printf("Using USB transport, querying available interfaces\n"); if(! (handle = OBEX_Init(OBEX_TRANS_USB, obex_event, 0))) { perror( "OBEX_Init failed"); exit(0); } interfaces_number = OBEX_FindInterfaces(handle, &obex_intf); for (i=0; i < interfaces_number; i++) printf("Interface %d: %s %s %s\n", i, obex_intf[i].usb.manufacturer, obex_intf[i].usb.product, obex_intf[i].usb.control_interface); printf("Use '%s -u interface_number' to run interactive OBEX test client\n", argv[0]); OBEX_Cleanup(handle); exit(0); break; case 3: intf_num = atoi(argv[2]); printf("Using USB transport \n"); if(! (handle = OBEX_Init(OBEX_TRANS_USB, obex_event, 0))) { perror( "OBEX_Init failed"); exit(0); } interfaces_number = OBEX_FindInterfaces(handle, &obex_intf); if (intf_num >= interfaces_number) { printf( "Invalid interface number\n"); exit(0); } obex_intf += intf_num; break; default: printf("Wrong number of arguments\n"); exit(0); } #else printf("Not compiled with USB support\n"); exit(0); #endif } else { printf("Using IrDA transport\n"); if(! (handle = OBEX_Init(OBEX_TRANS_IRDA, obex_event, 0))) { perror( "OBEX_Init failed"); exit(0); } } OBEX_SetUserData(handle, &global_context); printf( "OBEX Interactive test client/server.\n"); while (!end) { printf("> "); num = scanf("%s", cmd); switch (cmd[0] | 0x20) { case 'q': end=1; break; case 'g': get_client(handle, &global_context); break; case 't': setpath_client(handle); break; case 'p': put_client(handle); break; case 'x': push_client(handle); break; case 'c': /* First connect transport */ if(tcpobex) { if(TcpOBEX_TransportConnect(handle, NULL, 0) < 0) { printf("Transport connect error! (TCP)\n"); break; } } if(cobex) { if(OBEX_TransportConnect(handle, (void*) 1, 0) < 0) { printf("Transport connect error! (Serial)\n"); break; } } if(btobex) { #ifdef HAVE_BLUETOOTH if (bacmp(&bdaddr, BDADDR_ANY) == 0) { printf("Device address error! (Bluetooth)\n"); break; } if(BtOBEX_TransportConnect(handle, BDADDR_ANY, &bdaddr, channel) <0) { printf("Transport connect error! (Bluetooth)\n"); break; } #else printf("Transport not found! (Bluetooth)\n"); #endif } if (usbobex) { #ifdef HAVE_USB if (OBEX_InterfaceConnect(handle, obex_intf) < 0) { printf("Transport connect error! (USB)\n"); break; } #else printf("Transport not found! (USB)\n"); #endif } if (!tcpobex && !cobex && !btobex && !usbobex) { if(IrOBEX_TransportConnect(handle, IR_SERVICE) < 0) { printf("Transport connect error! (IrDA)\n"); break; } } // Now send OBEX-connect. connect_client(handle); break; case 'd': disconnect_client(handle); break; case 's': /* First register server */ if(tcpobex) { if(TcpOBEX_ServerRegister(handle, NULL, 0) < 0) { printf("Server register error! (TCP)\n"); break; } } if(cobex) { if(OBEX_ServerRegister(handle, (void*) 1, 0) < 0) { printf("Server register error! (Serial)\n"); break; } } if(btobex) { #ifdef HAVE_BLUETOOTH if(BtOBEX_ServerRegister(handle, BDADDR_ANY, channel) < 0) { printf("Server register error! (Bluetooth)\n"); break; } #else printf("Transport not found! (Bluetooth)\n"); #endif } if (usbobex) { printf("Transport not found! (USB)\n"); } if (!tcpobex && !cobex && !btobex && !usbobex) { if(IrOBEX_ServerRegister(handle, IR_SERVICE) < 0) { printf("Server register error! (IrDA)\n"); break; } } /* No process server events */ server_do(handle); break; default: printf("Unknown command %s\n", cmd); } } #ifndef _WIN32 if(cobex) cobex_close(custfunc.customdata); #endif return 0; }
obex_t *smartpen_connect(short vendor, short product) { obex_t *handle; obex_object_t *obj; int rc, num, i; struct obex_state *state; obex_interface_t *obex_intf; obex_headerdata_t hd; int size, count; char *buf; again: handle = OBEX_Init(OBEX_TRANS_USB, obex_event, 0); if (!handle) goto out; num = OBEX_EnumerateInterfaces(handle); for (i=0; i<num; i++) { obex_intf = OBEX_GetInterfaceByIndex(handle, i); if (!strcmp(obex_intf->usb.manufacturer, "Livescribe")) break; } if (i == num) { printf("No such device\n"); handle = NULL; goto out; } state = malloc(sizeof(struct obex_state)); if (!state) { handle = NULL; goto out; } memset(state, 0, sizeof(struct obex_state)); if (!swizzle_usb(vendor, product)) { handle = NULL; goto out; } rc = OBEX_InterfaceConnect(handle, obex_intf); if (rc < 0) { printf("Connect failed %d\n", rc); handle = NULL; goto out; } OBEX_SetUserData(handle, state); OBEX_SetTransportMTU(handle, 0x400, 0x400); obj = OBEX_ObjectNew(handle, OBEX_CMD_CONNECT); hd.bs = (unsigned char *)"LivescribeService"; size = strlen((char*)hd.bs)+1; OBEX_ObjectAddHeader(handle, obj, OBEX_HDR_TARGET, hd, size, 0); rc = OBEX_Request(handle, obj); count = state->req_done; while (rc == 0 && state->req_done <= count) { OBEX_HandleInput(handle, 100); } if (rc < 0 || !state->got_connid) { printf("Retry connection...\n"); OBEX_Cleanup(handle); goto again; } buf = get_named_object(handle, "ppdata?key=pp0000", &rc); if (!buf) { printf("Retry connection...\n"); OBEX_Cleanup(handle); pen_reset(vendor, product); goto again; } out: return handle; }