Magellan Linux

Annotation of /tags/mkinitrd-6_1_11/busybox/networking/tcpudp_perhost.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 816 - (hide annotations) (download)
Fri Apr 24 18:33:46 2009 UTC (15 years, 1 month ago) by niro
Original Path: trunk/mkinitrd-magellan/busybox/networking/tcpudp_perhost.c
File MIME type: text/plain
File size: 1147 byte(s)
-updated to busybox-1.13.4
1 niro 816 /* 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 tarball for details.
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     //}