Example #1
0
void on_adv_info_riuc(adv_server_t *adv_server, adv_request_t *request, char *caddr_str) {
    node_t *node = adv_server->user_data;

    int i;
    void *found = NULL;
    int idx;
    int *pidx;

    for (i = 0; i < MAX_NODE; i++) {
        SHOW_LOG(3, "LIST TABLE\n");
        ht_list_item(&node[i].group_table);
        SHOW_LOG(3, "=========== NODE :%s ========\n", node[i].id);
        found = node_in_group(&node[i], "OIUC-FEDORA");
        SHOW_LOG(3, "node_id: %s, adv_owner:%s, found:%d \n", node[i].id, "OIUC-FEDORA", found);
        found = node_in_group(&node[i], "OIUC-UBUNTU");
        SHOW_LOG(3, "node_id: %s, adv_owner:%s, found:%d \n", node[i].id, "OIUC-UBUNTU", found);
        SHOW_LOG(3, "=============================\n");
    }

    for (i = 0; i < MAX_NODE; i++) {
        found = node_in_group(&node[i], request->adv_info.adv_owner);
    
        if (found != NULL) {
            SHOW_LOG(3, "New session: %s(%s:%d)\n", request->adv_info.adv_owner, request->adv_info.sdp_mip, request->adv_info.sdp_port);

            if(!node_has_media(&node[i])) {
                SHOW_LOG(1, "Node does not have media endpoints configured\n");
                return;
            }

            pidx = (int *)ht_get_item(&node[i].group_table, request->adv_info.adv_owner);
            if (pidx != NULL) {
                idx = *pidx;
                //idx = *((int *)ht_get_item(&node[i].group_table, request->adv_info.adv_owner);
                SHOW_LOG(3, "idx(ht_get_item): %d for owner: %s\n", idx, request->adv_info.adv_owner);
#if 1
                if( request->adv_info.sdp_port > 0 ) {
                    receiver_stop(node[i].receiver, idx);

                    //for (i = 0; i < node->receiver->nstreams; i++) {
                    receiver_config_stream(node[i].receiver, request->adv_info.sdp_mip, request->adv_info.sdp_port, idx);
                    //}

                    receiver_start(node[i].receiver);
                    riuc4_on_ptt(&riuc_data.riuc4, node[i].radio_port);
                }
                else {
                    receiver_stop(node[i].receiver, idx);
                    riuc4_off_ptt(&riuc_data.riuc4, node[i].radio_port);
                }
                usleep(250*1000);
            }
#endif
        }
    }
}
Example #2
0
/* get a key from the hash table. If it exists then return
 * a pointer to the key otherwise return NULL
 */
void *hashtable_get_key(void *key, size_t size, hashtable_td *table)
{
	unsigned int hash = table->hashf(key);
	htitem_td *item = NULL;

	if((item = ht_get_item(hash, key, size, table)) == NULL)
		return NULL;

	return item->key;
}
Example #3
0
void asterisk_acc_unpack_socket(char *buff, perm_node_t **key_list, asterisk_acc_table_t *asterisk_acc_table, opool_t *opool) {
    int i;
    json_object *new_obj, *jvalue;
    opool_item_t *item, *item2;
    perm_node_t *key_element, *value_element, *data_list;

    perm_node_t *temp, *entry;
    perm_node_t *temp2, *entry2;
    perm_node_t *data_list2;

    char id[10], pwd[10];

	new_obj = json_tokener_parse(buff);
	//printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));

    for(i = 0; i < json_object_array_length(new_obj); i++)
	{ 
        item = opool_get(opool);
        EXIT_IF_TRUE(item == NULL, "Cannot get from object pool\n");
        key_element = (perm_node_t *)item->data;

        item2 = opool_get(opool);
        EXIT_IF_TRUE(item == NULL, "Cannot get from object pool\n");
        value_element = (perm_node_t *)item2->data;

        json_object *obj = json_object_array_get_idx(new_obj, i);

        json_object_object_get_ex(obj, "account", &jvalue);
        strcpy(id, json_object_get_string(jvalue));

        json_object_object_get_ex(obj, "password", &jvalue);
        strcpy(pwd, json_object_get_string(jvalue));

        ansi_copy_str(key_element->value, id);
        ansi_copy_str(value_element->value, pwd);

        data_list = (perm_node_t *)ht_get_item(asterisk_acc_table, (void *)id);
        if (data_list == NULL) {
            DL_APPEND(*key_list, key_element);
            DL_APPEND(data_list, value_element);
            ht_add_item(asterisk_acc_table, id, data_list);
        }
        else {
            DL_APPEND(data_list, value_element);
        }
    }

}
Example #4
0
void on_leaving_server(char *owner_id, char *adv_ip) {
    int *pret;
    int i, ret;
    int count = 0;
    for (i = 0; i < MAX_NODE; i++) {
        pret = (int *)ht_get_item(&riuc_data.node[i].group_table, (void *)owner_id);

        if (pret != NULL) {
            ret = *pret;
            if (ret < 0) {
                count++;
            }
        }
        if (pret == NULL) {
            count++;
        }
    }

    if (count == MAX_NODE) {
        SHOW_LOG(3, "Leave %s\n", adv_ip);
        adv_server_leave(riuc_data.node[0].adv_server, adv_ip);
    }
}