arping: change a few message strings to be closer to iputils arping
[oweals/busybox.git] / networking / tcpudp_perhost.c
1 /* Based on ipsvd utilities written by Gerrit Pape <pape@smarden.org>
2  * which are released into public domain by the author.
3  * Homepage: http://smarden.sunsite.dk/ipsvd/
4  *
5  * Copyright (C) 2007 Denys Vlasenko.
6  *
7  * Licensed under GPLv2, see file LICENSE in this source tree.
8  */
9
10 #include "libbb.h"
11 #include "tcpudp_perhost.h"
12
13 static struct hcc *cc;
14 static unsigned cclen;
15
16 /* to be optimized */
17
18 void ipsvd_perhost_init(unsigned c)
19 {
20 //      free(cc);
21         cc = xzalloc(c * sizeof(*cc));
22         cclen = c;
23 }
24
25 unsigned ipsvd_perhost_add(char *ip, unsigned maxconn, struct hcc **hccpp)
26 {
27         unsigned i;
28         unsigned conn = 1;
29         int freepos = -1;
30
31         for (i = 0; i < cclen; ++i) {
32                 if (!cc[i].ip) {
33                         freepos = i;
34                         continue;
35                 }
36                 if (strcmp(cc[i].ip, ip) == 0) {
37                         conn++;
38                         continue;
39                 }
40         }
41         if (freepos == -1) return 0;
42         if (conn <= maxconn) {
43                 cc[freepos].ip = ip;
44                 *hccpp = &cc[freepos];
45         }
46         return conn;
47 }
48
49 void ipsvd_perhost_remove(int pid)
50 {
51         unsigned i;
52         for (i = 0; i < cclen; ++i) {
53                 if (cc[i].pid == pid) {
54                         free(cc[i].ip);
55                         cc[i].ip = NULL;
56                         cc[i].pid = 0;
57                         return;
58                 }
59         }
60 }
61
62 //void ipsvd_perhost_free(void)
63 //{
64 //      free(cc);
65 //}