|
@@ -3,6 +3,7 @@
|
|
|
dmq_peer_list_t* init_peer_list() {
|
|
|
dmq_peer_list_t* peer_list = shm_malloc(sizeof(dmq_peer_list_t));
|
|
|
memset(peer_list, 0, sizeof(dmq_peer_list_t));
|
|
|
+ lock_init(&peer_list->lock);
|
|
|
return peer_list;
|
|
|
}
|
|
|
|
|
@@ -15,6 +16,7 @@ dmq_peer_t* search_peer_list(dmq_peer_list_t* peer_list, dmq_peer_t* peer) {
|
|
|
if(strncasecmp(cur->peer_id.s, peer->peer_id.s, len) == 0) {
|
|
|
return cur;
|
|
|
}
|
|
|
+ cur = cur->next;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -22,17 +24,26 @@ dmq_peer_t* search_peer_list(dmq_peer_list_t* peer_list, dmq_peer_t* peer) {
|
|
|
void add_peer(dmq_peer_list_t* peer_list, dmq_peer_t* peer) {
|
|
|
dmq_peer_t* new_peer = shm_malloc(sizeof(dmq_peer_t));
|
|
|
*new_peer = *peer;
|
|
|
+
|
|
|
+ /* copy the str's */
|
|
|
+ new_peer->peer_id.s = shm_malloc(peer->peer_id.len);
|
|
|
+ memcpy(new_peer->peer_id.s, peer->peer_id.s, peer->peer_id.len);
|
|
|
+ new_peer->description.s = shm_malloc(peer->description.len);
|
|
|
+ memcpy(new_peer->peer_id.s, peer->peer_id.s, peer->peer_id.len);
|
|
|
+
|
|
|
new_peer->next = peer_list->peers;
|
|
|
peer_list->peers = new_peer;
|
|
|
}
|
|
|
|
|
|
int register_dmq_peer(dmq_peer_t* peer) {
|
|
|
+ lock_get(&peer_list->lock);
|
|
|
if(search_peer_list(peer_list, peer)) {
|
|
|
LM_ERR("peer already exists: %.*s %.*s\n", peer->peer_id.len, peer->peer_id.s,
|
|
|
peer->description.len, peer->description.s);
|
|
|
return -1;
|
|
|
}
|
|
|
add_peer(peer_list, peer);
|
|
|
+ lock_release(&peer_list->lock);
|
|
|
return 0;
|
|
|
}
|
|
|
|