Merge branch 'master' of github.com:hanzz/libtransport
This commit is contained in:
commit
1a7e4719ea
7 changed files with 74 additions and 52 deletions
|
@ -96,9 +96,9 @@ void MyIrcSession::on_joined(IrcMessage *message) {
|
|||
bool op = 0;
|
||||
std::string nickname = TO_UTF8(m->sender().name());
|
||||
op = correctNickname(nickname);
|
||||
getIRCBuddy(TO_UTF8(m->channel()), nickname).setOp(op);
|
||||
np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel()) + suffix, op, pbnetwork::STATUS_ONLINE);
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " joined " << TO_UTF8(m->channel()) + suffix);
|
||||
getIRCBuddy(TO_UTF8(m->channel().toLower()), nickname).setOp(op);
|
||||
np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel().toLower()) + suffix, op, pbnetwork::STATUS_ONLINE);
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " joined " << TO_UTF8(m->channel().toLower()) + suffix);
|
||||
}
|
||||
|
||||
|
||||
|
@ -107,9 +107,9 @@ void MyIrcSession::on_parted(IrcMessage *message) {
|
|||
bool op = 0;
|
||||
std::string nickname = TO_UTF8(m->sender().name());
|
||||
op = correctNickname(nickname);
|
||||
removeIRCBuddy(TO_UTF8(m->channel()), nickname);
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " parted " << TO_UTF8(m->channel()) + suffix);
|
||||
np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel()) + suffix, op, pbnetwork::STATUS_NONE, TO_UTF8(m->reason()));
|
||||
removeIRCBuddy(TO_UTF8(m->channel().toLower()), nickname);
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " parted " << TO_UTF8(m->channel().toLower()) + suffix);
|
||||
np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel().toLower()) + suffix, op, pbnetwork::STATUS_NONE, TO_UTF8(m->reason()));
|
||||
}
|
||||
|
||||
void MyIrcSession::on_quit(IrcMessage *message) {
|
||||
|
@ -172,7 +172,7 @@ void MyIrcSession::on_topicChanged(IrcMessage *message) {
|
|||
correctNickname(nickname);
|
||||
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " topic changed to " << TO_UTF8(m->topic()));
|
||||
np->handleSubject(user, TO_UTF8(m->channel()) + suffix, TO_UTF8(m->topic()), nickname);
|
||||
np->handleSubject(user, TO_UTF8(m->channel().toLower()) + suffix, TO_UTF8(m->topic()), nickname);
|
||||
}
|
||||
|
||||
void MyIrcSession::on_messageReceived(IrcMessage *message) {
|
||||
|
@ -190,7 +190,7 @@ void MyIrcSession::on_messageReceived(IrcMessage *message) {
|
|||
msg = QString("/me ") + msg;
|
||||
}
|
||||
|
||||
std::string target = TO_UTF8(m->target());
|
||||
std::string target = TO_UTF8(m->target().toLower());
|
||||
LOG4CXX_INFO(logger, user << ": Message from " << target);
|
||||
if (target.find("#") == 0) {
|
||||
std::string nickname = TO_UTF8(m->sender().name());
|
||||
|
@ -229,10 +229,10 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) {
|
|||
if (nick.find("/") != std::string::npos) {
|
||||
nick = nick.substr(0, nick.find("/"));
|
||||
}
|
||||
np->handleSubject(user, TO_UTF8(parameters[1]) + suffix, m_topicData, nick);
|
||||
np->handleSubject(user, TO_UTF8(parameters[1].toLower()) + suffix, m_topicData, nick);
|
||||
break;
|
||||
case 352: {
|
||||
channel = parameters[1];
|
||||
channel = parameters[1].toLower();
|
||||
nick = TO_UTF8(parameters[5]);
|
||||
IRCBuddy &buddy = getIRCBuddy(TO_UTF8(channel), nick);
|
||||
|
||||
|
@ -249,7 +249,7 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) {
|
|||
break;
|
||||
}
|
||||
case 353:
|
||||
channel = parameters[2];
|
||||
channel = parameters[2].toLower();
|
||||
members = parameters[3].split(" ");
|
||||
|
||||
LOG4CXX_INFO(logger, user << ": Received members for " << TO_UTF8(channel) << suffix);
|
||||
|
@ -265,7 +265,7 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) {
|
|||
break;
|
||||
case 366:
|
||||
// ask /who to get away states
|
||||
channel = parameters[1];
|
||||
channel = parameters[1].toLower();
|
||||
LOG4CXX_INFO(logger, user << "Asking /who for channel " << TO_UTF8(channel));
|
||||
sendCommand(IrcCommand::createWho(channel));
|
||||
break;
|
||||
|
|
|
@ -13,15 +13,15 @@ admin_password=test
|
|||
#cert=server.pfx #patch to PKCS#12 certificate
|
||||
#cert_password=test #password to that certificate if any
|
||||
users_per_backend=10
|
||||
backend=../..//backends/swiften/spectrum2_swiften_backend
|
||||
#backend=../..//backends/swiften/spectrum2_swiften_backend
|
||||
#backend=../../backends/twitter/spectrum2_twitter_backend
|
||||
#backend=/home/hanzz/code/libtransport/backends/libcommuni/spectrum2_libcommuni_backend
|
||||
backend=/home/hanzz/code/libtransport/backends/libcommuni/spectrum2_libcommuni_backend
|
||||
protocol=prpl-jabber
|
||||
#protocol=prpl-msn
|
||||
#protocol=any
|
||||
#protocol=prpl-icq
|
||||
working_dir=./
|
||||
portfile=$jid.port
|
||||
portfile=./$jid.port
|
||||
irc_server=irc.freenode.org
|
||||
|
||||
[backend]
|
||||
|
|
|
@ -138,6 +138,9 @@ int main(int argc, char **argv)
|
|||
else if (command[0] == "list") {
|
||||
std::vector<std::string> list = show_list(&config);
|
||||
}
|
||||
else if (command[0] == "restart") {
|
||||
return restart_instances(&config);
|
||||
}
|
||||
else if (command[0] == "server") {
|
||||
Server server(&config);
|
||||
if (server.start() == false) {
|
||||
|
|
|
@ -136,30 +136,38 @@ static void initLogging(Config *config, std::string key, bool only_create_dir =
|
|||
p.setProperty("id", id);
|
||||
#endif
|
||||
|
||||
std::string dir;
|
||||
std::vector<std::string> dirs;
|
||||
BOOST_FOREACH(const log4cxx::LogString &prop, p.propertyNames()) {
|
||||
// if (boost::ends_with(prop, ".File")) {
|
||||
if (boost::ends_with(prop, ".File")) {
|
||||
std::string dir;
|
||||
log4cxx::helpers::Transcoder::encode(p.get(prop), dir);
|
||||
boost::replace_all(dir, "${jid}", jid);
|
||||
boost::replace_all(dir, "${pid}", pid);
|
||||
boost::replace_all(dir, "${id}", id);
|
||||
break;
|
||||
// }
|
||||
dirs.push_back(dir);
|
||||
}
|
||||
}
|
||||
mode_t old_cmask;
|
||||
if (!dir.empty()) {
|
||||
// create directories
|
||||
// create directories
|
||||
#ifndef WIN32
|
||||
old_cmask = umask(0007);
|
||||
old_cmask = umask(0007);
|
||||
#endif
|
||||
try {
|
||||
Transport::Util::createDirectories(config, boost::filesystem::path(dir).parent_path());
|
||||
}
|
||||
catch (const boost::filesystem::filesystem_error &e) {
|
||||
std::cerr << "Can't create logging directory directory " << boost::filesystem::path(dir).parent_path().string() << ": " << e.what() << ".\n";
|
||||
|
||||
BOOST_FOREACH(std::string &dir, dirs) {
|
||||
if (!dir.empty()) {
|
||||
try {
|
||||
Transport::Util::createDirectories(config, boost::filesystem::path(dir).parent_path());
|
||||
}
|
||||
catch (const boost::filesystem::filesystem_error &e) {
|
||||
std::cerr << "Can't create logging directory directory " << boost::filesystem::path(dir).parent_path().string() << ": " << e.what() << ".\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef WIN32
|
||||
umask(old_cmask);
|
||||
#endif
|
||||
|
||||
if (only_create_dir) {
|
||||
return;
|
||||
}
|
||||
|
@ -168,24 +176,20 @@ static void initLogging(Config *config, std::string key, bool only_create_dir =
|
|||
|
||||
// Change owner of main log file
|
||||
#ifndef WIN32
|
||||
if (!CONFIG_STRING(config, "service.group").empty() && !CONFIG_STRING(config, "service.user").empty()) {
|
||||
struct group *gr;
|
||||
if ((gr = getgrnam(CONFIG_STRING(config, "service.group").c_str())) == NULL) {
|
||||
std::cerr << "Invalid service.group name " << CONFIG_STRING(config, "service.group") << "\n";
|
||||
BOOST_FOREACH(std::string &dir, dirs) {
|
||||
if (!CONFIG_STRING(config, "service.group").empty() && !CONFIG_STRING(config, "service.user").empty()) {
|
||||
struct group *gr;
|
||||
if ((gr = getgrnam(CONFIG_STRING(config, "service.group").c_str())) == NULL) {
|
||||
std::cerr << "Invalid service.group name " << CONFIG_STRING(config, "service.group") << "\n";
|
||||
}
|
||||
struct passwd *pw;
|
||||
if ((pw = getpwnam(CONFIG_STRING(config, "service.user").c_str())) == NULL) {
|
||||
std::cerr << "Invalid service.user name " << CONFIG_STRING(config, "service.user") << "\n";
|
||||
}
|
||||
chown(dir.c_str(), pw->pw_uid, gr->gr_gid);
|
||||
}
|
||||
struct passwd *pw;
|
||||
if ((pw = getpwnam(CONFIG_STRING(config, "service.user").c_str())) == NULL) {
|
||||
std::cerr << "Invalid service.user name " << CONFIG_STRING(config, "service.user") << "\n";
|
||||
}
|
||||
chown(dir.c_str(), pw->pw_uid, gr->gr_gid);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
if (!dir.empty()) {
|
||||
umask(old_cmask);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -280,6 +280,15 @@ void RosterManager::handleRemoteRosterResponse(boost::shared_ptr<Swift::RosterPa
|
|||
|
||||
LOG4CXX_INFO(logger, m_user->getJID().toString() << ": This server supports remote roster protoXEP");
|
||||
m_supportRemoteRoster = true;
|
||||
|
||||
//If we receive empty RosterPayload on login (not register) initiate full RosterPush
|
||||
if(!m_buddies.empty() && payload->getItems().empty()){
|
||||
LOG4CXX_INFO(logger, "Received empty Roster upon login. Pushing full Roster.");
|
||||
for(std::map<std::string, Buddy *, std::less<std::string>, boost::pool_allocator< std::pair<std::string, Buddy *> > >::const_iterator c_it = m_buddies.begin();
|
||||
c_it != m_buddies.end(); c_it++) {
|
||||
sendBuddyRosterPush(c_it->second);
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
BOOST_FOREACH(const Swift::RosterItemPayload &item, payload->getItems()) {
|
||||
|
|
15
src/user.cpp
15
src/user.cpp
|
@ -320,6 +320,21 @@ void User::handlePresence(Swift::Presence::ref presence, bool forceJoin) {
|
|||
|
||||
if (presence->getType() == Swift::Presence::Unavailable) {
|
||||
m_conversationManager->removeJID(presence->getFrom());
|
||||
|
||||
std::string presences;
|
||||
std::vector<Swift::Presence::ref> ps = m_presenceOracle->getAllPresence(m_jid);
|
||||
BOOST_FOREACH(Swift::Presence::ref p, ps) {
|
||||
if (p != presence) {
|
||||
presences += p->getFrom().toString() + " ";
|
||||
}
|
||||
};
|
||||
|
||||
if (!presences.empty()) {
|
||||
LOG4CXX_INFO(logger, m_jid.toString() << ": User is still connected from following clients: " << presences);
|
||||
}
|
||||
else {
|
||||
LOG4CXX_INFO(logger, m_jid.toString() << ": Last client disconnected");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -79,9 +79,6 @@ void UserRegistry::stopLogin(const Swift::JID& user, Swift::ServerFromClientSess
|
|||
LOG4CXX_WARN(logger, key << ": Stopping login process (user probably disconnected while logging in), but this is not active session");
|
||||
}
|
||||
}
|
||||
else {
|
||||
LOG4CXX_WARN(logger, key << ": Stopping login process (user probably disconnected while logging in) for invalid user");
|
||||
}
|
||||
|
||||
// ::removeLater can be called only by libtransport, not by Swift and libtransport
|
||||
// takes care about user disconnecting itself, so don't call our signal.
|
||||
|
@ -96,21 +93,15 @@ void UserRegistry::onPasswordValid(const Swift::JID &user) {
|
|||
users[key].session->handlePasswordValid();
|
||||
users.erase(key);
|
||||
}
|
||||
else {
|
||||
LOG4CXX_INFO(logger, key << ": onPasswordValid called for invalid user");
|
||||
}
|
||||
}
|
||||
|
||||
void UserRegistry::onPasswordInvalid(const Swift::JID &user, const std::string &error) {
|
||||
std::string key = user.toBare().toString();
|
||||
if (users.find(key) != users.end()) {
|
||||
LOG4CXX_INFO(logger, key << ": Password is invalid");
|
||||
LOG4CXX_INFO(logger, key << ": Password is invalid or there was an error when connecting the legacy network");
|
||||
users[key].session->handlePasswordInvalid(error);
|
||||
users.erase(key);
|
||||
}
|
||||
else {
|
||||
LOG4CXX_INFO(logger, key << ": onPasswordInvalid called for invalid user");
|
||||
}
|
||||
}
|
||||
|
||||
void UserRegistry::handleRemoveTimeout(const Swift::JID &user) {
|
||||
|
|
Loading…
Add table
Reference in a new issue