void UsrPacket::answer(const char *cmd, vector<string> &args) { if (strcmp(cmd, "USR")){ QTimer::singleShot(0, m_client, SLOT(authFailed())); return; } if (args[0] == "OK"){ QTimer::singleShot(0, m_client, SLOT(authOk())); return; } if (args[1] == "S"){ MD5_CTX c; unsigned char md[MD5_DIGEST_LENGTH]; MD5_Init(&c); string user; user = m_client->getLogin().utf8(); MD5_Update(&c, args[2].c_str(),(unsigned long)args[2].length()); string pswd; pswd = m_client->getPassword().utf8(); MD5_Update(&c, pswd.c_str(), pswd.length()); MD5_Final(md, &c); string digest = ""; for (unsigned i = 0; i < MD5_DIGEST_LENGTH; i++){ char b[3]; sprintf(b, "%02x",md[i]); digest += b; } MSNPacket *packet = new UsrPacket(m_client, digest.c_str()); packet->send(); } }
bool CvrPacket::answer(const char*, vector<string> &arg) { m_client->setVersion(arg[0].c_str()); MSNPacket *packet = new UsrPacket(m_client); packet->send(); return false; }
void InfPacket::answer(const char*, vector<string>&) { MSNPacket *packet = new UsrPacket(m_client); packet->send(); }
bool VerPacket::answer(const char*, vector<string>&) { MSNPacket *packet = new CvrPacket(m_client); packet->send(); return false; }
void CvrPacket::answer(const QStringList &arg) { m_client->setVersion(arg[0]); MSNPacket *packet = new UsrPacket(m_client); packet->send(); }
void VerPacket::answer(const QStringList&) { MSNPacket *packet = new CvrPacket(m_client); packet->send(); }
void CvrPacket::answer(vector<string> &arg) { m_client->setVersion(arg[0].c_str()); MSNPacket *packet = new UsrPacket(m_client); packet->send(); }
void VerPacket::answer(vector<string>&) { MSNPacket *packet = new CvrPacket(m_client); packet->send(); }