unsigned long get_ip(Data &p) { IP *ip = (IP*)p.ptr; if (ip) return ip->ip(); return 0; }
unsigned long get_ip(void *p) { IP *ip = (IP*)p; if (ip) return ip->ip(); return 0; }
void IPResolver::start_resolve() { if (resolver && resolver->isWorking()) return; if (queue.empty()) return; IP *ip = *queue.begin(); m_addr = ip->ip(); struct in_addr inaddr; inaddr.s_addr = m_addr; log(L_DEBUG, "start resolve %s", inet_ntoa(inaddr)); #if COMPAT_QT_VERSION >= 0x030000 if (resolver) delete resolver; resolver = new QDns(QHostAddress(htonl(m_addr)), QDns::Ptr); connect(resolver, SIGNAL(resultsReady()), this, SLOT(resolve_ready())); #else resolver->setLabel(QHostAddress(htonl(m_addr))); #endif }
EXPORT string save_data(const DataDef *def, void *data) { string res; unsigned offs = 0; for (; def->name; def++){ string value; bool bSave = false; unsigned i; if (def->type == DATA_STRUCT){ string s = save_data((DataDef*)(def->def_value), ((char*)data) + offs); if (s.length()){ if (res.length()) res += "\n"; res += s; } }else if (*def->name){ switch (def->type){ case DATA_IP:{ IP *p = *((IP**)(((char*)data) + offs)); if (p && p->ip()){ struct in_addr inaddr; inaddr.s_addr = p->ip(); value = inet_ntoa(inaddr); const char *host = p->host(); if (host && *host){ value += ","; value += host; } bSave = true; } break; } case DATA_STRLIST:{ STRING_MAP *p = *((STRING_MAP**)(((char*)data) + offs)); if (p){ for (STRING_MAP::iterator it = p->begin(); it != p->end(); ++it){ if (res.length()) res += "\n"; res += def->name; res += "="; res += number((*it).first); res += ","; res += quoteString((*it).second.c_str()); } } break; } case DATA_UTFLIST:{ STRING_MAP *p = *((STRING_MAP**)(((char*)data) + offs)); if (p){ for (STRING_MAP::iterator it = p->begin(); it != p->end(); ++it){ if (res.length()) res += "\n"; res += def->name; res += "="; res += number((*it).first); res += ","; QString s = QString::fromUtf8((*it).second.c_str()); QCString ls = s.local8Bit(); if (QString::fromLocal8Bit(ls) == s){ res += quoteString((const char*)ls); }else{ res += quoteString((const char*)(s.utf8())); res += "u"; } } } break; } case DATA_STRING:{ char **p = (char**)(((char*)data) + offs); for (i = 0; i < def->n_values; i++, p++){ if (value.length()) value += ","; if (def->def_value){ if ((*p == NULL) || strcmp(*p, (char*)(def->def_value))){ value += quoteString(*p); bSave = true; } }else{ if ((*p != NULL) && **p){ value += quoteString(*p); bSave = true; } } } break; } case DATA_UTF:{ char **p = (char**)(((char*)data) + offs); for (i = 0; i < def->n_values; i++, p++){ if (value.length()) value += ","; QString s; if (*p != NULL) s = QString::fromUtf8(*p); if (def->def_value){ if (s != i18n((const char*)(def->def_value))) bSave = true; }else{ if (s.length()) bSave = true; } if (bSave){ QCString ls = s.local8Bit(); if (QString::fromLocal8Bit(ls) == s){ value += quoteString((const char*)ls); }else{ value += quoteString((const char*)(s.utf8())); value += "u"; } } } break; } case DATA_BOOL:{ unsigned long *p = (unsigned long*)(((char*)data) + offs); for (i = 0; i < def->n_values; i++, p++){ if (value.length()) value += ","; if ((*p != 0) != (def->def_value != 0)){ if (*p){ value += "true"; }else{ value += "false"; } bSave = true; } } break; } case DATA_LONG:{ long *p = (long*)(((char*)data) + offs); for (i = 0; i < def->n_values; i++, p++){ if (value.length()) value += ","; if (*p != (long)(def->def_value)){ char b[32]; snprintf(b, sizeof(b), "%li", *p); value += b; bSave = true; } } break; } case DATA_ULONG:{ unsigned long *p = (unsigned long*)(((char*)data) + offs); for (i = 0; i < def->n_values; i++, p++){ if (value.length()) value += ","; if (*p != (unsigned long)(def->def_value)){ char b[32]; snprintf(b, sizeof(b), "%lu", *p); value += b; bSave = true; } } break; } } if (bSave){ if (res.length()) res += "\n"; res += def->name; res += "="; res += value; } } offs += sizeof(void*) * def->n_values; } return res; }