X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Flimit-connect.cpp;h=776a574bfdac3965a9b1db83469a15f8de9cf380;hb=805b4fdf7b70b0e9b298064f24ceff0c1d38e05b;hp=57cb5bd05524cbe0fd724569e2bd277da87b1724;hpb=0084c40d8bc6babaeb0b833b12d9cd625c807525;p=yazpp-moved-to-github.git diff --git a/src/limit-connect.cpp b/src/limit-connect.cpp index 57cb5bd..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-2012 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: @@ -37,13 +37,17 @@ 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; TimeStat m_bw; Peer *m_next; @@ -51,19 +55,21 @@ struct LimitConnect::Peer { 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) @@ -82,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) @@ -96,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(); @@ -112,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;