Mercurial > hg > freeDiameter
diff freeDiameter/peers.c @ 86:e3e22d89e023
Started routing module
author | Sebastien Decugis <sdecugis@nict.go.jp> |
---|---|
date | Thu, 03 Dec 2009 17:36:35 +0900 |
parents | a58f0757c06a |
children | 5510f73e1737 |
line wrap: on
line diff
--- a/freeDiameter/peers.c Thu Dec 03 14:59:23 2009 +0900 +++ b/freeDiameter/peers.c Thu Dec 03 17:36:35 2009 +0900 @@ -158,6 +158,32 @@ return ret; } +/* Search for a peer */ +int fd_peer_getbyid( char * diamid, struct peer_hdr ** peer ) +{ + struct fd_list * li; + + TRACE_ENTRY("%p %p", diamid, peer); + CHECK_PARAMS( diamid && peer ); + + *peer = NULL; + + /* Search in the list */ + CHECK_POSIX( pthread_rwlock_rdlock(&fd_g_peers_rw) ); + for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { + struct fd_peer * next = (struct fd_peer *)li; + int cmp = strcasecmp( diamid, next->p_hdr.info.pi_diamid ); + if (cmp > 0) + continue; + if (cmp == 0) + *peer = &next->p_hdr; + break; + } + CHECK_POSIX( pthread_rwlock_unlock(&fd_g_peers_rw) ); + + return 0; +} + #define free_null( _v ) \ if (_v) { \