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 } } }
/* 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; }
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); } } }
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); } }