void ICQClient::setStatus(unsigned short status) { if (status == ICQ_STATUS_OFFLINE){ switch (m_state){ case Reconnect:{ m_reconnectTime = 0; m_state = Logoff; ICQEvent e(EVENT_STATUS_CHANGED, Uin); process_event(&e); break; } case Logoff: break; default: close(); uStatus = ICQ_STATUS_OFFLINE; if (m_state == ForceReconnect){ m_state = Reconnect; time_t reconnect; time(&reconnect); reconnect += RECONNECT_TIMEOUT; if (m_reconnectTime < reconnect) m_reconnectTime = reconnect; }else{ m_state = Logoff; } ICQEvent e(EVENT_STATUS_CHANGED, Uin); process_event(&e); time_t now; time(&now); list<ICQUser*>::iterator it; for (it = contacts.users.begin(); it != contacts.users.end(); it++){ if ((*it)->uStatus == ICQ_STATUS_OFFLINE) continue; (*it)->setOffline(); ICQEvent e(EVENT_STATUS_CHANGED, (*it)->Uin); process_event(&e); } } return; } if (m_fd == -1){ m_nSequence = rand() & 0x7FFFF; m_nMsgSequence = 1; m_reconnectTime = 0; m_state = Uin ? Connect : Register; ICQEvent e(EVENT_STATUS_CHANGED, Uin); process_event(&e); connect(ServerHost.c_str(), ServerPort()); } if (m_state != Logged){ m_nLogonStatus = status; return; } sendStatus(status); }
bool SendReportRequest(const char *uri, const std::string &data, Buffer *output = NULL) { bool result = false; net::AutoInit netInit; http::Client http; Buffer theVoid; if (output == NULL) output = &theVoid; if (http.Resolve(ServerHostname(), ServerPort())) { http.Connect(); http.POST("/report/message", data, "application/x-www-form-urlencoded", output); http.Disconnect(); result = true; } return result; }
bool SendReportRequest(const char *uri, const std::string &data, const std::string &mimeType, Buffer *output = NULL) { bool result = false; http::Client http; Buffer theVoid; if (output == NULL) output = &theVoid; const char *serverHost = ServerHostname(); if (!serverHost) return false; if (http.Resolve(serverHost, ServerPort())) { http.Connect(); int result = http.POST(uri, data, mimeType, output); http.Disconnect(); return result >= 200 && result < 300; } else { return false; } }