X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Flimit-connect.cpp;h=776a574bfdac3965a9b1db83469a15f8de9cf380;hb=805b4fdf7b70b0e9b298064f24ceff0c1d38e05b;hp=3b63759141c93628e21d1e006087024ed2800824;hpb=660f5e8b270182001d931f65fa03ff95819c3b92;p=yazpp-moved-to-github.git diff --git a/src/limit-connect.cpp b/src/limit-connect.cpp index 3b63759..776a574 100644 --- a/src/limit-connect.cpp +++ b/src/limit-connect.cpp @@ -1,5 +1,5 @@ /* This file is part of the yazpp toolkit. - * Copyright (C) 1998-2009 Index Data and Mike Taylor + * Copyright (C) 1998-2013 Index Data and Mike Taylor * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -25,41 +25,51 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#if HAVE_CONFIG_H +#include +#endif #include #include #include #include +#include using namespace yazpp_1; +struct LimitConnect::Rep { + int m_period; + Peer *m_peers; + Peer **lookup(const char *peername); +}; + struct LimitConnect::Peer { - friend class LimitConnect; - Peer(int sz, const char *peername); ~Peer(); void add_connect(); - + char *m_peername; - Yaz_bw m_bw; + TimeStat m_bw; Peer *m_next; }; LimitConnect::LimitConnect() { - m_period = 60; - m_peers = 0; + m_p = new Rep; + m_p->m_period = 60; + m_p->m_peers = 0; } LimitConnect::~LimitConnect() { cleanup(true); + delete m_p; } void LimitConnect::set_period(int sec) { - m_period = sec; + m_p->m_period = sec; } LimitConnect::Peer::Peer(int sz, const char *peername) : m_bw(sz) @@ -78,7 +88,7 @@ void LimitConnect::Peer::add_connect() m_bw.add_bytes(1); } -LimitConnect::Peer **LimitConnect::lookup(const char *peername) +LimitConnect::Peer **LimitConnect::Rep::lookup(const char *peername) { Peer **p = &m_peers; while (*p) @@ -92,15 +102,15 @@ LimitConnect::Peer **LimitConnect::lookup(const char *peername) void LimitConnect::add_connect(const char *peername) { - Peer **p = lookup(peername); + Peer **p = m_p->lookup(peername); if (!*p) - *p = new Peer(m_period, peername); + *p = new Peer(m_p->m_period, peername); (*p)->add_connect(); } int LimitConnect::get_total(const char *peername) { - Peer **p = lookup(peername); + Peer **p = m_p->lookup(peername); if (!*p) return 0; return (*p)->m_bw.get_total(); @@ -108,7 +118,7 @@ int LimitConnect::get_total(const char *peername) void LimitConnect::cleanup(bool all) { - Peer **p = &m_peers; + Peer **p = &m_p->m_peers; while (*p) { Peer *tp = *p;