void CAudioScrobbler::Handshake() { std::string username=""; for(unsigned int i = 0; i < Config->getLUsername().length(); i++) { username.append(1, tolower(Config->getLUsername().c_str()[i])); } std::string authtoken(md5sum((char*)"%s%s", username.c_str(), Config->getLPassword().c_str())); std::ostringstream query, sig; query << "method=auth.getMobileSession&username="******"&authToken=" << authtoken << "&api_key=" << APIKEY; sig << "api_key" << APIKEY << "authToken" << authtoken << "methodauth.getMobileSessionusername" << Config->getLUsername() << SECRET; std::string sighash(md5sum((char*)"%s", sig.str().c_str())); query << "&api_sig=" << sighash; OpenURL(ROOTURL, query.str().c_str()); if(_response.find("<lfm status=\"ok\">") != std::string::npos) { size_t start, end; start = _response.find("<key>") + 5; end = _response.find("</key>"); _sessionid = _response.substr(start, end-start); iprintf("%s%s", "Last.fm handshake successful. SessionID: ", _sessionid.c_str()); _authed = true; } else if(_response.find("<lfm status=\"failed\">") != std::string::npos) { CheckFailure(_response); exit(EXIT_FAILURE); } CLEANUP(); }
smtp::smtp(boost::asio::io_service& _io_service, std::string user, std::string passwd, std::string _mailserver) :io_service(_io_service), m_mailaddr(user), m_passwd(passwd), m_mailserver(_mailserver) { // 计算 m_AUTH std::vector<char> authtoken(user.length() + passwd.length() + 2); std::copy(user.begin(), user.end(), &authtoken[1]); std::copy(passwd.begin(), passwd.end(), &authtoken[user.length()+2]); //ADQ2NDg5MzQ5MAB0ZXN0cGFzc3dk m_AUTH = boost::base64_encode(std::string(authtoken.data(), authtoken.size())); if(m_mailserver.empty()) // 自动从 mailaddress 获得. { if( m_mailaddr.find("@") == std::string::npos) m_mailserver = "smtp.qq.com"; // 如果 邮箱是 qq 号码(没@),就默认使用 smtp.qq.com . else m_mailserver = std::string("smtp.") + m_mailaddr.substr(m_mailaddr.find_last_of("@")+1); } }