From 53212446ad419c58dadceb5d6007bb289fad43ef Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Thu, 5 Jun 2014 20:18:24 -0400 Subject: [PATCH] Jupiter now in working state. Version changed to 0.9-rc1. --- Jupiter/IRC_Client.cpp | 114 ++++++++++++++++++----------------------- Jupiter/Jupiter.h | 2 +- Release/Jupiter.lib | Bin 215808 -> 216542 bytes 3 files changed, 52 insertions(+), 64 deletions(-) diff --git a/Jupiter/IRC_Client.cpp b/Jupiter/IRC_Client.cpp index 5351b49..4821ada 100644 --- a/Jupiter/IRC_Client.cpp +++ b/Jupiter/IRC_Client.cpp @@ -717,7 +717,7 @@ int Jupiter::IRC::Client::primaryHandler() } if (!sasl) { - Jupiter::IRC::Client::data_->sock->send("CAP END" ENDL); + Jupiter::IRC::Client::data_->sock->send(STRING_LITERAL_AS_REFERENCE("CAP END" ENDL)); Jupiter::IRC::Client::data_->registerClient(); } } @@ -853,29 +853,29 @@ int Jupiter::IRC::Client::primaryHandler() case IRC_RPL_LUSERCLIENT: // 251 { Jupiter::CStringL key = "RawData."; - unsigned int offset; + size_t offset; unsigned int i = 1; - do + while (true) { offset = key.aformat("%u", i); - const Jupiter::ReadableString &tVal = Jupiter::IRC::Client::readConfigValue(key); - if (tVal.size() == 0) break; - key -= offset; - Jupiter::IRC::Client::send(tVal); + const Jupiter::ReadableString &value = Jupiter::IRC::Client::readConfigValue(key); + if (value.isEmpty()) break; + key.truncate(offset); + Jupiter::IRC::Client::send(value); i++; - } while (1); + } key = "Channel."; i = 1; - do + while (true) { offset = key.aformat("%u", i); const Jupiter::ReadableString &tVal = Jupiter::IRC::Client::readConfigValue(key); - if (tVal.size() == 0) break; - key -= offset; + if (tVal.isEmpty()) break; + key.truncate(offset); Jupiter::IRC::Client::joinChannel(tVal); i++; - } while (1); + } Jupiter::IRC::Client::data_->connectionStatus = 5; Jupiter::IRC::Client::data_->reconnectAttempts = 0; @@ -1002,8 +1002,10 @@ int Jupiter::IRC::Client::primaryHandler() channel->data_->isAddingNames = true; if (channel->getType() < 0) { - if (Jupiter::IRC::Client::data_->autoPartMessage.size() != 0) Jupiter::IRC::Client::partChannel(chan, Jupiter::IRC::Client::data_->autoPartMessage); - else Jupiter::IRC::Client::partChannel(chan); + if (Jupiter::IRC::Client::data_->autoPartMessage.size() != 0) + Jupiter::IRC::Client::partChannel(chan, Jupiter::IRC::Client::data_->autoPartMessage); + else + Jupiter::IRC::Client::partChannel(chan); } } else if (i >= 0) Jupiter::IRC::Client::data_->channels.get(i)->addUser(Jupiter::IRC::Client::data_->findUserOrAdd(nick)); @@ -1381,25 +1383,14 @@ Jupiter::IRC::Client::User *Jupiter::IRC::Client::Data::findUser(const Jupiter:: Jupiter::IRC::Client::User *Jupiter::IRC::Client::Data::findUserOrAdd(const Jupiter::ReadableString &name) { - unsigned int wc = name.wordCount("!@"); - Jupiter::ReferenceString nick = (wc == 1) ? (name) : Jupiter::ReferenceString::getWord(name, 0, "!@"); + Jupiter::ReferenceString nick = Jupiter::ReferenceString::getWord(name, 0, "!"); Jupiter::IRC::Client::User *r = Jupiter::IRC::Client::Data::findUser(nick); if (r == nullptr) { r = new Jupiter::IRC::Client::User(); - switch (wc) - { - case 3: - r->data_->hostname = Jupiter::ReferenceString::getWord(name, 2, "!@"); - case 2: // This shouldn't EVER happen. - r->data_->username = Jupiter::ReferenceString::getWord(name, 1, "!@"); - case 1: // No user/host is in the string. - r->data_->nickname = nick; - break; - default: - fprintf(stderr, "ERROR: Failed to parse name mask: %.*s" ENDL, name.size(), name.ptr()); - break; - } + r->data_->nickname = nick; + r->data_->username = Jupiter::ReferenceString::getWord(name, 1, "!@"); + r->data_->hostname = Jupiter::ReferenceString::getWord(name, 2, "!@"); Jupiter::IRC::Client::Data::users.add(r); } return r; @@ -1496,48 +1487,45 @@ size_t Jupiter::IRC::Client::User::getChannelCount() const Jupiter::IRC::Client::Channel::Channel(const Jupiter::ReadableString &channelName, Jupiter::IRC::Client *iFace) { Jupiter::IRC::Client::Channel::data_ = new Jupiter::IRC::Client::Channel::Data(); - unsigned int i = 0; - const Jupiter::ReadableString *ptr = nullptr; - Jupiter::ReferenceString section = iFace->getConfigSection(); + Jupiter::IRC::Client::Channel::data_->channel = channelName; + Jupiter::IRC::Client::Channel::data_->serverPrefixSetPtr = iFace->getPrefixes(); + Jupiter::String key = "Channel."; + size_t offset = key.aformat("%.*s.Type", channelName.size(), channelName.ptr()); + + iFace->readConfigValue(key); + Jupiter::ReferenceString value = iFace->readConfigValue(key); + if (value.size() != 0) + { + Jupiter::IRC::Client::Channel::data_->type = value.asInt(); + return; + } - size_t offset = 0; // TODO: Make this more efficient -- consider moving responsibility elsewhere. - while (1) + for (unsigned int i = 1;; i++) { - i++; + key.truncate(offset); offset = key.aformat("%u", i); - ptr = &Jupiter::IRC::Client::Config->get(iFace->getConfigSection(), Jupiter::ReferenceString(key)); - if (ptr->size() == 0) - { - if (section != iFace->getConfigSection()) break; - i = 0; - section = STRING_LITERAL_AS_REFERENCE("Default"); - key.truncate(offset); - continue; - } - if (Jupiter::ReferenceString::getWord(*ptr, 0, WHITESPACE).equalsi(channelName)) + value.set(iFace->readConfigValue(key)); + + if (value.size() == 0) // No more channels in the list. + break; + + if (value.getWord(0, WHITESPACE).equalsi(channelName)) // This is our channel. { - offset += key.aformat(".Type", i); - ptr = &Jupiter::IRC::Client::Config->get(iFace->getConfigSection(), Jupiter::ReferenceString(key)); - if (ptr->size() != 0) - { - Jupiter::IRC::Client::Channel::data_->type = ptr->asInt(); - key.truncate(offset); - break; - } + offset += key.concat(".Type"); + value.set(iFace->readConfigValue(key)); + if (value.size() != 0) + Jupiter::IRC::Client::Channel::data_->type = value.asInt(); + else if (iFace->getDefaultChanType() < 0) + Jupiter::IRC::Client::Channel::data_->type = 0; + else + Jupiter::IRC::Client::Channel::data_->type = iFace->getDefaultChanType(); + return; } - key.truncate(offset); - } - if (ptr->size() == 0) - { - key.aformat("%.*s.Type", channelName.size(), channelName.ptr()); - Jupiter::CStringS val = iFace->readConfigValue(key); - if (val.size() != 0) Jupiter::IRC::Client::Channel::data_->type = val.asInt(); - else Jupiter::IRC::Client::Channel::data_->type = iFace->getDefaultChanType(); } - Jupiter::IRC::Client::Channel::data_->channel = channelName; - Jupiter::IRC::Client::Channel::data_->serverPrefixSetPtr = iFace->getPrefixes(); + + Jupiter::IRC::Client::Channel::data_->type = iFace->getDefaultChanType(); } Jupiter::IRC::Client::Channel::~Channel() diff --git a/Jupiter/Jupiter.h b/Jupiter/Jupiter.h index 24b0b1a..6a24995 100644 --- a/Jupiter/Jupiter.h +++ b/Jupiter/Jupiter.h @@ -35,7 +35,7 @@ #define JUPITER_API #endif // _WIN32 -#define JUPITER_VERSION "Jupiter 0.9" /** Version of this program at compile time. */ +#define JUPITER_VERSION "Jupiter 0.9-rc1" /** Version of this program at compile time. */ #if defined __cplusplus extern "C" diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index 642be88c0c9d78cb56b66bd75afa3d803318fe69..15a00595a7b1172798824474a983345a0b376183 100644 GIT binary patch delta 27583 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