Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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);
    }	
}