javacall_result bt_push_update_record(bt_sddbid_t sddbid, const bt_record_t *record) { bt_push_t *push = g_registry; while (push != NULL) { bt_record_t *rec = &push->record; if (rec->id == sddbid) { rec->id = record->id; rec->classes = record->classes; if (rec->size != record->size) { void *data = pcsl_mem_realloc(rec->data, record->size); if (data == NULL) { return JAVACALL_FAIL; } rec->data = data; rec->size = record->size; } memcpy(rec->data, record->data, record->size); push_save(); return JAVACALL_OK; } push = push->next; } return JAVACALL_FAIL; }
javacall_result bt_push_unregister_url(const char *url) { bt_port_t port; bt_push_t *push, *prev; REPORT_INFO(LC_PUSH, "Bluetooth PushRegistry URL un-registration:"); REPORT_INFO1(LC_PUSH, "%s", url); bt_push_parse_url(url, &port, NULL); push = find_push(&port, &prev); if (push == NULL) { return JAVACALL_FAIL; } /* remove the service record */ javacall_bt_sddb_remove_record(push->record.id); /* close server and client connections */ close_all(push); /* remove the entry */ if (prev != NULL) { prev->next = push->next; } else { g_registry = push->next; } g_count--; pcsl_mem_free(push); push_save(); javacall_bt_stack_set_service_classes(javacall_bt_sddb_get_service_classes(0)); REPORT_INFO(LC_PUSH, "Un-registration successful."); return JAVACALL_OK; }
javacall_result bt_push_register_url(const char *url, const void *data, size_t size) { bt_port_t port; bt_params_t params; bt_push_t *push; REPORT_INFO(LC_PUSH, "Bluetooth PushRegistry URL registration:"); REPORT_INFO1(LC_PUSH, "%s", url); bt_push_parse_url(url, &port, ¶ms); push = find_push(&port, NULL); if (push != NULL) { /* found existing entry with the same protocol/uuid, can not proceed */ REPORT_ERROR(LC_PUSH, "Entry already exists, registration failed."); return JAVACALL_FAIL; } /* save the entry in the registry */ push = (bt_push_t *)pcsl_mem_malloc(sizeof(bt_push_t)); if (push == NULL) { REPORT_ERROR(LC_PUSH, "Failed to allocate memory."); return JAVACALL_FAIL; } memcpy(&push->port, &port, sizeof(bt_port_t)); memcpy(&push->params, ¶ms, sizeof(bt_params_t)); push->record.id = BT_INVALID_SDDB_HANDLE; push->record.classes = 0; if (data != NULL) { push->record.data = pcsl_mem_malloc(size); if (push->record.data == NULL) { pcsl_mem_free(push); return JAVACALL_FAIL; } memcpy(push->record.data, data, size); } else { push->record.data = NULL; } push->record.size = size; push->server = BT_INVALID_HANDLE; push->client = NULL; push->next = g_registry; g_registry = push; g_count++; if (javacall_bt_sddb_update_record(&push->record.id, push->record.classes, push->record.data, push->record.size) != JAVACALL_OK) { return JAVACALL_FAIL; } push_save(); REPORT_INFO(LC_PUSH, "Registration successful."); return JAVACALL_OK; }
static int serial_tozip(lua_State *L) { serial_type *s = (serial_type*)auxiliar_checkclass(L, "core{serial}", 1); int ktype, etype; bool skip; /* Allows & disallows */ lua_rawgeti(L, LUA_REGISTRYINDEX, s->allow); // -5 lua_rawgeti(L, LUA_REGISTRYINDEX, s->disallow); // -4 lua_rawgeti(L, LUA_REGISTRYINDEX, s->disallow2); // -3 /* table is in the stack at index 't' */ lua_pushvalue(L, 2); /* table */ lua_pushnil(L); /* first key */ const char *filename = get_name(L, s, -2); /* Init the buffer */ s->buf = malloc(2 * 1024); s->buflen = 2 * 1024; s->bufpos = 0; writeTblFixed(s, "d={}\n", 5); writeTblFixed(s, "setLoaded('", 11); writeTbl(s, get_name(L, s, -2)); writeTblFixed(s, "', d)\n", 6); while (lua_next(L, -2) != 0) { skip = FALSE; ktype = lua_type(L, -2); etype = lua_type(L, -1); if (s->allow != LUA_REFNIL) { lua_pushvalue(L, -2); lua_rawget(L, -7); skip = lua_isnil(L, -1); lua_pop(L, 1); } else if (s->disallow != LUA_REFNIL) { lua_pushvalue(L, -2); lua_rawget(L, -6); skip = !lua_isnil(L, -1); lua_pop(L, 1); } if (s->disallow2 != LUA_REFNIL) { lua_pushvalue(L, -2); lua_rawget(L, -5); skip = !lua_isnil(L, -1); lua_pop(L, 1); } if (!skip) { writeTblFixed(s, "d[", 2); tbl_basic_serialize(L, s, ktype, -2); writeTblFixed(s, "]=", 2); tbl_basic_serialize(L, s, etype, -1); writeTblFixed(s, "\n", 1); } /* removes 'value'; keeps 'key' for next iteration */ lua_pop(L, 1); } writeTblFixed(s, "\nreturn d", 9); push_save(s->zf, s->zfname, filename, s->buf, s->bufpos); lua_pushboolean(L, TRUE); return 1; }