Beispiel #1
0
int svcBrowse(uuid_t *groupToExtract)
{
	int 		status = -1, i;
	uint16_t	count = 0;
	slist_t		*searchList = NULL;
	slist_t		*attrIdList = NULL;
	slist_t		*svcRecList = NULL;
	sdpsvc_t	*svcRec;

	s_list_append(&searchList, groupToExtract);
	s_list_append_uint(&attrIdList, 0x0000ffff);
	status = sdp_search_attr_req(srvHandle, searchList, 
			RangeOfAttributes, attrIdList, 0xFFFF, &svcRecList, &count);
	s_list_free(&attrIdList);
	s_list_free(&searchList);
	//printf("Status : %d Count : %d, list: %d\n", status, count, s_list_length(svcRecList));
	
	if (status || count == 0)
		return status;

	for (i = 0; i < s_list_length(svcRecList); i++) {
		printf("==============================\n");

		svcRec = (sdpsvc_t *)s_list_nth_data(svcRecList, i);
		print_info_attr(svcRec);
		printf("------------------------------\n");

		printf("SvcRecHdl: 0x%x\n", svcRec->serviceRecordHandle);

		if (!verboseflag) {
			print_svc_class(svcRec);
			print_access_proto(svcRec);
			print_profile_desc(svcRec);
			print_group(svcRec);
		} else {
			// print detailed info
		}

		if (sdp_is_group(svcRec)) {
			uuid_t	*groupId;

			// printf("SvcRec : 0x%x is a group\n", svcRecHandle);
			printf("This is a group.\n");
			groupId = sdp_get_group_attr(svcRec);
			printf("  0x%s\n", sdp_uuid2str(groupId));
			if (sdp_uuidcmp(groupId, groupToExtract) != 0) {
				printf("Extracting it\n");
				svcBrowse(groupId);
			}
		}
	}
	sdp_free_svclist(&svcRecList);
	return status;
}
Beispiel #2
0
/**
 * Append a string to end of the string list.
 */
S_API void s_str_list_append(s_str_list *self, const char *string, s_erc *error)
{
	char *new_string;


	S_CLR_ERR(error);
	if ((self == NULL) || (string == NULL))
		return;

	new_string = s_strdup(string, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "s_str_list_append",
				  "Call to \"s_strdup\" failed"))
		return;

	s_list_append(self, new_string, error);
	if (S_CHK_ERR(error, S_CONTERR,
				  "s_str_list_append",
				  "Call to \"s_list_append\" failed"))
	{
		S_FREE(new_string);
	}
}
Beispiel #3
0
void *read_trd_fn(void *trd_data)
{
    // A new thread has been created, only one of its kind.
    // It was created in p2_actions
    // trd_data points to a struct r_trd_data which contains
    // (1) a linked list of all the lines from the input file
    // (2) a struct foo iterator of all the -m options supplied by the command line.
    struct r_trd_dat *infile_m_lines = (struct r_trd_dat *)trd_data;

    printf("Initting semaphore variable\n");
/*    sem_init(&search_sem, 0, 1); // Initial value of search_sem set to 1
    sem_init(&n_sem, 0, 0);      // n_sem for producer/consumer, init to 0
    sem_init(&more_data_sem, 0, 0);

    sem_init(&empty, 0, 1);
    sem_init(&full, 0, 0);*/
    pthread_mutex_init(&mutex, NULL);

    struct foo *m = infile_m_lines->m_list;
    l_list *infile_list = infile_m_lines->infile_list;

    // Create list of search threads
    s_list *search_threads = s_list_init();

    // initialize p3_data:
    p3_data = l_list_init();

    int s_count = 0;

    for(; m != NULL; m = m->next)
        s_count++;


    int i = 0;
    // create each search thread:
    for(m = infile_m_lines->m_list; m != NULL; m = m->next)
    {
        s_node *s = (s_node *)malloc(sizeof(s_node));
        if(s == NULL)
            err_sys("malloc (read_trd_fn)");
    
        s->next = NULL;
        s->_m = strdup(m->string);
        if(s->_m == NULL)
            err_sys("strdup (read_trd_fn)");

        // Copy input file buffer over to this s node:
        s->infile_list = l_list_init();
        node *copy_iter = infile_list->head;
        for(; copy_iter != NULL; copy_iter = copy_iter->next)
        {
            l_list_append(s->infile_list, copy_iter->data);
        }

        // Append the newly created s_node to the list.
        if(s_list_append(search_threads, s) != 0)
            exit(0);

        pthread_create(&s->tid, NULL, search_trd_fn, (void *)s);

        pthread_join(s->tid, NULL);

        i++;
    }

    printf("s_count = %d\n", s_count);

    // Now all the search threads have been created (for 3 -m options supplied, there should be 3 threads)
    // Now put each line from the input file into each (search_thread's) s_node's _protected char*.

    node *end;
    for(end = p3_data->head; end != NULL; end = end->next)
        fprintf(infile_m_lines->fp, "%s", end->data);

    pthread_exit(NULL);
    return NULL;
}