AddressMap.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "tcglobal.h"
00018 #include "AddressMap.h"
00019
00020 #include <QStringList>
00021
00022
00023
00024 #define DATE_FMT "\"yyyy-MM-dd HH:mm:ss\""
00025
00026
00027
00028
00029 void
00030 AddressMap::add(const QString &from, const QString &to,
00031 const QDateTime &expires)
00032 {
00033 tc::debug("New address mapping: %1 -> %2 (expires %3)").arg(from)
00034 .arg(to)
00035 .arg(expires.isValid() ? expires.toString(DATE_FMT)
00036 : "never");
00037 insert(from, AddressMapEntry(to, expires));
00038 }
00039
00040
00041
00042
00043
00044
00045
00046 void
00047 AddressMap::add(const QString &mapping)
00048 {
00049 QStringList parts = mapping.split(" ");
00050 if (parts.size() >= 2) {
00051 QDateTime expires;
00052 if (parts.size() >= 4 && parts.at(2) != "NEVER") {
00053 expires = QDateTime::fromString(parts.at(2) + " " + parts.at(3),
00054 DATE_FMT);
00055
00056
00057
00058 expires.setTimeSpec(Qt::UTC);
00059 expires = expires.toLocalTime();
00060 }
00061 add(parts.at(0), parts.at(1), expires);
00062 }
00063 }
00064
00065
00066 bool
00067 AddressMap::isExpired(const AddressMapEntry &entry) const
00068 {
00069 if (entry.second.isValid())
00070 return (entry.second < QDateTime::currentDateTime());
00071 return false;
00072 }
00073
00074
00075
00076 bool
00077 AddressMap::isMapped(const QString &addr) const
00078 {
00079 return (contains(addr) && !isExpired(value(addr)));
00080 }
00081
00082
00083
00084
00085 QString
00086 AddressMap::mappedTo(const QString &addr) const
00087 {
00088 AddressMapEntry entry = value(addr);
00089 return (isExpired(entry) ? QString() : entry.first);
00090 }
00091
00092
00093
00094 AddressMap
00095 AddressMap::reverse() const
00096 {
00097 AddressMap reverseMap;
00098 foreach (QString from, keys()) {
00099
00100 AddressMapEntry entry = value(from);
00101 reverseMap.add(entry.first, from, entry.second);
00102 }
00103 return reverseMap;
00104 }
00105