Пример #1
0
// -----------------------------------------------------------------------------
// 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);
}
Пример #2
0
/**
 * 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;
}
Пример #3
0
/**
 * 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;
}
Пример #4
0
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;
}