diff options
Diffstat (limited to 'Slimber/Server.cpp')
| -rw-r--r-- | Slimber/Server.cpp | 30 | 
1 files changed, 20 insertions, 10 deletions
diff --git a/Slimber/Server.cpp b/Slimber/Server.cpp index c331416..b7c7052 100644 --- a/Slimber/Server.cpp +++ b/Slimber/Server.cpp @@ -84,6 +84,7 @@ void Server::handleSessionFinished(boost::shared_ptr<ServerFromClientSession>) {  	selfJID_ = JID();  	rosterRequested_ = false;  	onSelfConnected(false); +	lastPresence_.reset();  }  void Server::handleLinkLocalSessionFinished(boost::shared_ptr<Session> session) { @@ -129,6 +130,7 @@ void Server::handleElementReceived(boost::shared_ptr<Element> element, boost::sh  			else {  				dnsSDService_->updateService(getLinkLocalServiceInfo(presence));  			} +			lastPresence_ = presence;  		}  		else {  			unregisterService(); @@ -148,14 +150,16 @@ void Server::handleElementReceived(boost::shared_ptr<Element> element, boost::sh  					session->sendElement(IQ::createError(iq->getFrom(), iq->getID(), Error::Forbidden, Error::Cancel));  				}  			} -			if (iq->getPayload<VCard>()) { +			if (boost::shared_ptr<VCard> vcard = iq->getPayload<VCard>()) {  				if (iq->getType() == IQ::Get) { -					boost::shared_ptr<VCard> vcard(new VCard()); -					vcard->setNickname(iq->getFrom().getNode()); -					session->sendElement(IQ::createResult(iq->getFrom(), iq->getID(), vcard)); +					session->sendElement(IQ::createResult(iq->getFrom(), iq->getID(), vCardCollection_->getOwnVCard()));  				}  				else { -					session->sendElement(IQ::createError(iq->getFrom(), iq->getID(), Error::Forbidden, Error::Cancel)); +					vCardCollection_->setOwnVCard(vcard); +					session->sendElement(IQ::createResult(iq->getFrom(), iq->getID())); +					if (lastPresence_) { +						dnsSDService_->updateService(getLinkLocalServiceInfo(lastPresence_)); +					}  				}  			}  			else { @@ -259,12 +263,18 @@ void Server::handlePresenceChanged(boost::shared_ptr<Presence> presence) {  LinkLocalServiceInfo Server::getLinkLocalServiceInfo(boost::shared_ptr<Presence> presence) {  	LinkLocalServiceInfo info; -	info.setFirstName("Remko"); -	info.setLastName("Tron\xc3\xa7on"); -	info.setEMail("email@example.com"); -	info.setJID(JID("jid@example.com")); +	boost::shared_ptr<VCard> vcard = vCardCollection_->getOwnVCard(); +	if (!vcard->getFamilyName().isEmpty() || !vcard->getGivenName().isEmpty()) { +		info.setFirstName(vcard->getGivenName()); +		info.setLastName(vcard->getFamilyName()); +	} +	if (!vcard->getNickname().isEmpty()) { +		info.setNick(vcard->getNickname()); +	} +	if (!vcard->getEMail().isEmpty()) { +		info.setEMail(vcard->getEMail()); +	}  	info.setMessage(presence->getStatus()); -	info.setNick("Remko");  	switch (presence->getShow()) {  		case StatusShow::Online:   		case StatusShow::None:   | 
 Swift