diff --git a/btpd/btpd.c b/btpd/btpd.c index 67419ed..b68439c 100644 --- a/btpd/btpd.c +++ b/btpd/btpd.c @@ -1,7 +1,7 @@ #include "btpd.h" +#include #include -#include static uint8_t m_peer_id[20]; static struct event m_sigint; @@ -80,12 +80,25 @@ void ipc_init(void); void btpd_init(void) { - srandom(time(NULL)); - + unsigned long seed; + uint8_t idcon[1024]; + struct timeval now; + int n; + + gettimeofday(&now, NULL); + n = snprintf(idcon, sizeof(idcon), "%ld%ld%d", now.tv_sec, now.tv_usec, + net_port); + if (n < sizeof(idcon)) + gethostname(idcon + n, sizeof(idcon) - n); + idcon[sizeof(idcon) - 1] = '\0'; + n = strlen(idcon); + + SHA1(idcon, n, m_peer_id); + bcopy(m_peer_id, &seed, sizeof(seed)); bcopy(BTPD_VERSION, m_peer_id, sizeof(BTPD_VERSION) - 1); m_peer_id[sizeof(BTPD_VERSION) - 1] = '|'; - for (int i = sizeof(BTPD_VERSION); i < 20; i++) - m_peer_id[i] = rand_between(0, 255); + + srandom(seed); net_init(); ipc_init();