busybox/networking/tcpudp_perhost.c
<<
>>
Prefs
   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 tarball for details.
   8 */
   9
  10#include "libbb.h"
  11#include "tcpudp_perhost.h"
  12
  13static struct hcc *cc;
  14static unsigned cclen;
  15
  16/* to be optimized */
  17
  18void ipsvd_perhost_init(unsigned c)
  19{
  20//      free(cc);
  21        cc = xzalloc(c * sizeof(*cc));
  22        cclen = c;
  23}
  24
  25unsigned 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
  49void 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//}
  66