// ----------------------------------------------------------------------------- // Insert a Full path of Items and creates all new nodes TreeNode *TreeInsertItems(Tree *tree, TreeNode *parent, HTTPCHAR *strpath) { TreeNode *node; HTTPCHAR *str = _tcsdup(strpath); int IsFolder = (str[strlen(str) - 1] == '/'); HTTPCHAR *path = _tcstok(str, "/"); if (!path) { node = TreeInsert(tree, parent, ""); } else { TreeNode *currentparent = parent; Tree *base = tree; do { node = TreeInsert(base, currentparent, path); path = _tcstok(NULL, "/"); if ((path) || (IsFolder)) { if (!node->SubItems) { node->SubItems = TreeInitialize("/"); } currentparent = node; base = node->SubItems; } else { break; } } while (path != NULL); } free(str); return (node); }
/** * Initialize the socket module for outbound communications */ void Socket_outInitialize() { #if defined(WIN32) WORD winsockVer = 0x0202; WSADATA wsd; FUNC_ENTRY; WSAStartup(winsockVer, &wsd); #else FUNC_ENTRY; signal(SIGPIPE, SIG_IGN); #endif SocketBuffer_initialize(); #if !defined(USE_POLL) s.clientsds = ListInitialize(); s.connect_pending = ListInitialize(); s.write_pending = ListInitialize(); s.cur_clientsds = NULL; FD_ZERO(&(s.rset)); /* Initialize the descriptor set */ FD_ZERO(&(s.pending_wset)); s.maxfdp1 = 0; memcpy((void*)&(s.rset_saved), (void*)&(s.rset), sizeof(s.rset_saved)); FD_ZERO(&(s.pending_wset)); #else s.fds_tree = TreeInitialize(TreeSockCompare); s.epoll_fds = epoll_create(1024); s.cur_sds = 0; s.no_ready = 0; #endif s.newSockets = ListInitialize(); FUNC_EXIT; }
/** * Start up the broker. * @return completion code, success == 0 */ int Broker_startup() { int rc; FUNC_ENTRY; signal(SIGINT, finish); signal(SIGTERM, finish); signal(SIGHUP, HUPHandler); #if !defined(_DEBUG) set_sigsegv(); #endif BrokerState.clients = TreeInitialize(clientSocketCompare); TreeAddIndex(BrokerState.clients, clientIDCompare); BrokerState.disconnected_clients = TreeInitialize(clientIDCompare); #if defined(MQTTS) BrokerState.mqtts_clients = TreeInitialize(clientAddrCompare); TreeAddIndex(BrokerState.mqtts_clients, clientIDCompare); BrokerState.disconnected_mqtts_clients = TreeInitialize(clientIDCompare); #endif #if !defined(SINGLE_LISTENER) BrokerState.listeners = ListInitialize(); #endif Users_initialize(&BrokerState); if ((rc = Persistence_read_config(config, &BrokerState, config_set)) == 0) { BrokerState.se = SubscriptionEngines_initialize(); rc = Protocol_initialize(&BrokerState); #if !defined(SINGLE_LISTENER) rc = Socket_initialize(BrokerState.listeners); #else rc = Socket_initialize(BrokerState.bind_address, BrokerState.port, BrokerState.ipv6); #endif #if !defined(NO_BRIDGE) Bridge_initialize(&(BrokerState.bridge), BrokerState.se); #endif Log_setPublish(true); } FUNC_EXIT_RC(rc); return rc; }
int test(int limit) { int i, *ip, *todelete; Node* current = NULL; Tree* t = TreeInitialize(TreeIntCompare); int rc = 0; printf("Tree initialized\n"); srand(time(NULL)); ip = malloc(sizeof(int)); *ip = 2; TreeAdd(t, (void*)ip, sizeof(int)); check(t); i = 2; void* result = TreeRemove(t, (void*)&i); if (result) free(result); int actual[limit]; for (i = 0; i < limit; i++) { void* replaced = NULL; ip = malloc(sizeof(int)); *ip = rand(); replaced = TreeAdd(t, (void*)ip, sizeof(int)); if (replaced) /* duplicate */ { free(replaced); actual[i] = -1; } else actual[i] = *ip; if (i==5) todelete = ip; printf("Tree element added %d\n", *ip); if (1 % 1000 == 0) { rc = check(t); printf("%d elements, check result %d\n", i+1, rc); if (rc != 0) return 88; } } check(t); for (i = 0; i < limit; i++) { int parm = actual[i]; if (parm == -1) continue; Node* found = TreeFind(t, (void*)&parm); if (found) printf("Tree find %d %d\n", parm, *(int*)(found->content)); else { printf("%d not found\n", parm); traverse(t, parm); return -2; } } check(t); for (i = limit -1; i >= 0; i--) { int parm = actual[i]; void *found; if (parm == -1) /* skip duplicate */ continue; found = TreeRemove(t, (void*)&parm); if (found) { printf("%d Tree remove %d %d\n", i, parm, *(int*)(found)); free(found); } else { int count = 0; printf("%d %d not found\n", i, parm); traverse(t, parm); for (i = 0; i < limit; i++) if (actual[i] == parm) ++count; printf("%d occurs %d times\n", parm, count); return -2; } if (i % 1000 == 0) { rc = check(t); printf("%d elements, check result %d\n", i+1, rc); if (rc != 0) return 88; } } printf("finished\n"); return 0; }