From: <bd...@bd...> - 2005-07-15 01:21:39
|
Author: bdash Date: 2005-07-15 13:21:24 +1200 (Fri, 15 Jul 2005) New Revision: 364 Modified: trunk/msn/buddy.cpp trunk/msn/buddy.h trunk/msn/impl/buddy.h trunk/msn/impl/connection.cpp trunk/msn/impl/notificationserver.cpp trunk/msn/impl/notificationserver.h trunk/msn/msntest.cpp trunk/msn/notificationserver.cpp trunk/msn/notificationserver.h trunk/msn/passport.cpp trunk/msn/passport.h Log: May as well update to MSNP11 while I'm at it. Authentication + synchroni= sation is working as well as it was in previous revision. The challenge = isn't handled so we get disconnected after about 30s. Modified: trunk/msn/buddy.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/buddy.cpp 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/buddy.cpp 2005-07-15 01:21:24 UTC (rev 364) @@ -25,7 +25,7 @@ =20 namespace MSN=20 { - Buddy::Buddy(const std::string & userName, const std::string & frien= dlyName) : impl_(new BuddyImpl(userName, friendlyName)) + Buddy::Buddy(const Passport & userName, const std::string & friendly= Name) : impl_(new BuddyImpl(userName, friendlyName)) { } =20 @@ -39,7 +39,7 @@ this->impl_ =3D NULL; } =20 - std::string Buddy::userName() const + Passport Buddy::userName() const { return this->impl_->userName(); } @@ -99,7 +99,7 @@ } =20 =20 - Group::Group(unsigned int groupID, const std::string & groupName) : = impl_(new GroupImpl(groupID, groupName)) + Group::Group(const std::string & groupID, const std::string & groupN= ame) : impl_(new GroupImpl(groupID, groupName)) { } =20 @@ -118,7 +118,7 @@ this->impl_->addBuddy(buddy); } =20 - unsigned int Group::groupID() const + std::string Group::groupID() const { return this->impl_->groupID(); } Modified: trunk/msn/buddy.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/buddy.h 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/buddy.h 2005-07-15 01:21:24 UTC (rev 364) @@ -54,6 +54,7 @@ class GroupImpl; =20 class Group; + class Passport; /** The Buddy class contains information about a member of a buddy l= ist. * * Each Buddy is made up of their passport address (@a userName), @@ -81,10 +82,10 @@ PhoneNumberImpl *impl_; }; =20 - Buddy(const std::string & userName, const std::string & friendly= Name); + Buddy(const Passport & userName, const std::string & friendlyNam= e); Buddy(const Buddy & buddy); virtual ~Buddy(); - std::string userName() const; + Passport userName() const; std::string friendlyName() const; =20 void addGroup(Group * group); @@ -105,12 +106,12 @@ class Group : private Uncopyable { public: - Group(unsigned int groupID, const std::string & groupName); + Group(const std::string & groupID, const std::string & groupName= ); Group(const Group & group); virtual ~Group(); =20 void addBuddy(Buddy * buddy); - unsigned int groupID() const; + std::string groupID() const; std::string name() const; private: GroupImpl *impl_; Modified: trunk/msn/impl/buddy.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/impl/buddy.h 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/impl/buddy.h 2005-07-15 01:21:24 UTC (rev 364) @@ -62,7 +62,7 @@ =20 BuddyImpl(const BuddyImpl & buddy); =20 - std::string userName() const { return this->userName_; }; + Passport userName() const { return this->userName_; }; std::string friendlyName() const { return this->friendlyName_; }= ; =20 void addGroup(Group * group); @@ -80,7 +80,7 @@ class GroupImpl : private Uncopyable { /** The group ID */ - int groupID_; + std::string groupID_; =20 /** The group name */ std::string name_; @@ -90,12 +90,12 @@ =20 public: /** Initialize a Group with the given @a groupID_ and @a name_ *= / - GroupImpl(int groupID, std::string name) + GroupImpl(const std::string groupID, std::string name) : groupID_(groupID), name_(name), buddies_() {}; GroupImpl(const GroupImpl & group); =20 void addBuddy(Buddy * buddy); - unsigned int groupID() const { return this->groupID_; }; + std::string groupID() const { return this->groupID_; }; std::string name() const { return this->name_; }; }; =20 Modified: trunk/msn/impl/connection.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/impl/connection.cpp 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/impl/connection.cpp 2005-07-15 01:21:24 UTC (rev 364) @@ -262,19 +262,16 @@ =20 Message ConnectionImpl::parseMSG(std::vector<std::string> & args) { - int msglen; - std::string raw; - size_t tmp; - =20 int msgLength =3D decimalFromString(args[3]); - raw =3D this->readBuffer_.substr(0, msgLength); + std::string raw =3D this->readBuffer_.substr(0, msgLength); this->readBuffer_ =3D this->readBuffer_.substr(msgLength); =20 Message msg(raw); =20 std::string contentType =3D msg["Content-Type"]; =20 - if ((tmp =3D contentType.find("; charset")) !=3D std::string::np= os) + size_t tmp =3D contentType.find("; charset"); + if (tmp !=3D std::string::npos) contentType =3D contentType.substr(0, tmp); =20 msg["X-Parsed-Content-Type"] =3D contentType; Modified: trunk/msn/impl/notificationserver.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/impl/notificationserver.cpp 2005-07-14 12:22:34 UTC (rev 36= 3) +++ trunk/msn/impl/notificationserver.cpp 2005-07-15 01:21:24 UTC (rev 36= 4) @@ -172,6 +172,7 @@ commandHandlers_["ADG"] =3D &NotificationServerConnectionImp= l::handle_ADG; commandHandlers_["RMG"] =3D &NotificationServerConnectionImp= l::handle_RMG; commandHandlers_["REG"] =3D &NotificationServerConnectionImp= l::handle_REG; + commandHandlers_["UBX"] =3D &NotificationServerConnectionImp= l::handle_UBX; } } =20 @@ -349,7 +350,14 @@ this->notificationServerCallbacks().gotLatestListSerial(decimalF= romString(args[2])); } =20 - + void NotificationServerConnectionImpl::handle_UBX(std::vector<std::s= tring> & args) + { + assertConnectionStateIsAtLeast(NS_CONNECTED); + int msgLength =3D decimalFromString(args[2]); + std::string raw =3D this->readBuffer().substr(0, msgLength); + this->setReadBuffer(this->readBuffer().substr(msgLength)); + } + =20 void NotificationServerConnectionImpl::setState(BuddyStatus state) { assertConnectionStateIsAtLeast(NS_CONNECTED); @@ -450,7 +458,7 @@ assertConnectionStateIsNot(NS_SYNCHRONISING); =20 std::ostringstream buf; - buf << "SYN " << this->nextTrID() << " " << 0 << "\r\n"; + buf << "SYN " << this->nextTrID() << " 2000-01-01T01:01:01.00000= 00-00:00 2000-01-01T01:01:01.0000000-00:00\r\n"; write(buf); =20 this->addCallback(&NotificationServerConnectionImpl::callback_Sy= ncData, this->trID(), static_cast<void *>(new ListSyncInfo())); // (void = *)info); @@ -533,7 +541,7 @@ this->socketConnectionCompleted(); =20 std::ostringstream buf; - buf << "VER " << this->nextTrID() << " MSNP8\r\n"; + buf << "VER " << this->nextTrID() << " MSNP11\r\n"; write(buf); this->addCallback(&NotificationServerConnectionImpl::callback_Ne= gotiateCVR, this->trID(), NULL); } @@ -574,11 +582,13 @@ while (this->isWholeLineAvailable()) { std::vector<std::string> args =3D this->getLine(); - if (args[0] =3D=3D "MSG" || args[0] =3D=3D "NOT" || args[0] = =3D=3D "IPG") + if (args[0] =3D=3D "MSG" || args[0] =3D=3D "NOT" || args[0] = =3D=3D "IPG" || args[0] =3D=3D "UBX") { int dataLength; if (args[0] =3D=3D "MSG") dataLength =3D decimalFromString(args[3]); + else if (args[0] =3D=3D "UBX") + dataLength =3D decimalFromString(args[2]); else dataLength =3D decimalFromString(args[1]); =20 @@ -618,7 +628,7 @@ return; } =20 - if ((args.size() >=3D 4 && (args[0] =3D=3D "LST" || args[0] = =3D=3D "LSG")) || + if ((args.size() >=3D 3 && (args[0] =3D=3D "LST" || args[0] = =3D=3D "LSG")) || (args.size() >=3D 2 && (args[0] =3D=3D "GTC" || args[0] = =3D=3D "BLP")) || (args.size() >=3D 3 && args[0] =3D=3D "BPR") ) @@ -666,6 +676,25 @@ } } =20 + class stringStartsWith + { + std::string prefix_; +public: + stringStartsWith(const std::string & s) : prefix_(s) {}; + bool operator()(const std::string & s) const + { + return (s.substr(0, this->prefix_.size()) =3D=3D this->prefi= x_); + } + }; + =20 + bool isDecimal(const std::string & s) + { + unsigned int n =3D decimalFromString(s); + std::ostringstream buf; + buf << n; + return (buf.str() =3D=3D s); + } + =20 void NotificationServerConnectionImpl::callback_SyncData(std::vector= <std::string> & args, int trid, void *data) throw (std::runtime_error) { assertConnectionStateIs(NS_SYNCHRONISING); @@ -673,33 +702,35 @@ =20 if (args[0] =3D=3D "SYN") { - int serverListVersion =3D decimalFromString(args[2]); - if (info->listVersion() =3D=3D serverListVersion) - { - delete info; - info =3D NULL; - this->removeCallback(trid); - this->notificationServerCallbacks().gotBuddyListInfo(NUL= L); - this->setConnectionState(NS_CONNECTED); =20 - return; - } =20 - unsigned int usersInList =3D decimalFromString(args[3]); - unsigned int groupsInList =3D decimalFromString(args[4]); - info->startedSynchronisation(serverListVersion, usersInList,= groupsInList); - this->notificationServerCallbacks().gotLatestListSerial(info= ->listVersion()); + unsigned int usersInList =3D decimalFromString(args[4]); + unsigned int groupsInList =3D decimalFromString(args[5]); + info->startedSynchronisation(0, usersInList, groupsInList); } else if (args[0] =3D=3D "LST") { - unsigned int listID =3D decimalFromString(args[3]); - Buddy thisBuddy(args[1], decodeURL(args[2])); + std::string passportAddress, friendlyName, contactID; + std::vector<std::string>::iterator n =3D std::find_if(args.b= egin(), args.end(), stringStartsWith("N=3D")); + if (n !=3D args.end()) + passportAddress =3D splitString(*n, "=3D")[1]; + =20 + n =3D std::find_if(args.begin(), args.end(), stringStartsWit= h("F=3D")); + if (n !=3D args.end()) + friendlyName =3D splitString(*n, "=3D")[1]; + + n =3D std::find_if(args.begin(), args.end(), stringStartsWit= h("C=3D")); + if (n !=3D args.end()) + contactID =3D splitString(*n, "=3D")[1]; + =20 + n =3D std::find_if(args.begin(), args.end(), isDecimal); + unsigned int listID =3D decimalFromString(*n); + =20 + Buddy thisBuddy(passportAddress, decodeURL(friendlyName)); bool inForwardList =3D info->addBuddyToList(thisBuddy, listI= D); - if (inForwardList) + if (*n !=3D args.back() && inForwardList) { - std::vector<std::string> groups(splitString(args[4], ","= )); - std::list<unsigned int> groupNumbers; - std::transform(groups.begin(), groups.end(), std::back_i= nserter(groupNumbers), decimalFromString); - info->addLastBuddyToGroups(groupNumbers); + std::vector<std::string> groupIDs(splitString(args[args.= size() - 1], ",")); + info->addLastBuddyToGroups(groupIDs); } } else if (args[0] =3D=3D "GTC") @@ -714,7 +745,7 @@ } else if (args[0] =3D=3D "LSG") { - Group group(decimalFromString(args[1]), decodeURL(args[2])); + Group group(args[2], decodeURL(args[1])); info->addGroup(group); info->groups(); } @@ -744,7 +775,7 @@ assertConnectionStateIsAtLeast(NS_CONNECTED); this->removeCallback(trid); =20 - if (args.size() >=3D 3 && args[0] !=3D "VER" || args[2] !=3D "MS= NP8") + if (args.size() >=3D 3 && args[0] !=3D "VER" || args[2] !=3D "MS= NP11") { this->genericCallbacks().showError(NULL, "Protocol negotiati= on failed"); this->disconnect(); @@ -979,9 +1010,9 @@ return (lists & ListSyncInfo::LST_FL) =3D=3D ListSyncInfo::LST_F= L; } =20 - void ListSyncInfoImpl::addLastBuddyToGroups(const std::list<unsigned= int> & groups) + void ListSyncInfoImpl::addLastBuddyToGroups(const std::vector<std::s= tring> & groups) { - std::list<unsigned int>::const_iterator i =3D groups.begin(); + std::vector<std::string>::const_iterator i =3D groups.begin(); Buddy *buddy =3D this->forwardList_.back(); for (; i !=3D groups.end(); i++) { @@ -1031,7 +1062,7 @@ ListSyncInfo::COMPLETE_BLP | List= SyncInfo::COMPLETE_GTC); } =20 - Group *_groupOfPair(std::pair<int, Group *> p) + Group *_groupOfPair(std::pair<std::string, Group *> p) { return p.second; } Modified: trunk/msn/impl/notificationserver.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/impl/notificationserver.h 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/impl/notificationserver.h 2005-07-15 01:21:24 UTC (rev 364) @@ -71,7 +71,7 @@ =20 bool addBuddyToList(const Buddy & buddy, unsigned int lists); =20 - void addLastBuddyToGroups(const std::list<unsigned int> & groups= ); + void addLastBuddyToGroups(const std::vector<std::string> & group= s); =20 void addPhoneNumberForLastBuddy(const Buddy::PhoneNumber & phone= Number); =20 @@ -90,7 +90,7 @@ const std::list<Group *> groups() const; private: /** A list of groups that are on our buddy list */ - std::map<int, Group *> groups_; + std::map<std::string, Group *> groups_; =20 std::list<Buddy *> buddies_; =20 @@ -293,6 +293,7 @@ void handle_ADG(std::vector<std::string> & args); void handle_RMG(std::vector<std::string> & args); void handle_REG(std::vector<std::string> & args); + void handle_UBX(std::vector<std::string> & args); =20 void callback_SyncData(std::vector<std::string> & args, int trid= , void *data) throw (std::runtime_error); void callback_NegotiateCVR(std::vector<std::string> & args, int = trid, void *data); Modified: trunk/msn/msntest.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/msntest.cpp 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/msntest.cpp 2005-07-15 01:21:24 UTC (rev 364) @@ -453,7 +453,7 @@ std::list<MSN::Group *>::const_iterator g =3D groups.begin(); for (; g !=3D groups.end(); g++) { - printf(" %d: %s\n", (*g)->groupID(), (*g)->name().c_str()); + printf(" %s: %s\n", (*g)->groupID().c_str(), (*g)->name().c_s= tr()); } } =20 Modified: trunk/msn/notificationserver.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/notificationserver.cpp 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/notificationserver.cpp 2005-07-15 01:21:24 UTC (rev 364) @@ -156,7 +156,7 @@ return this->impl_->addBuddyToList(buddy, lists); } =20 - void ListSyncInfo::addLastBuddyToGroups(const std::list<unsigned int= > & groups) + void ListSyncInfo::addLastBuddyToGroups(const std::vector<std::strin= g> & groups) { this->impl_->addLastBuddyToGroups(groups); } Modified: trunk/msn/notificationserver.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/notificationserver.h 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/notificationserver.h 2005-07-15 01:21:24 UTC (rev 364) @@ -85,7 +85,7 @@ void startedSynchronisation(unsigned int serverListVersion, unsi= gned int numberOfBuddies, unsigned int numberOfGroups); =20 bool addBuddyToList(const Buddy & buddy, unsigned int lists); - void addLastBuddyToGroups(const std::list<unsigned int> & groups= ); + void addLastBuddyToGroups(const std::vector<std::string> & group= s); void addPhoneNumberForLastBuddy(const Buddy::PhoneNumber & phone= Number); void addGroup(const Group & group); =20 Modified: trunk/msn/passport.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/passport.cpp 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/passport.cpp 2005-07-15 01:21:24 UTC (rev 364) @@ -27,36 +27,36 @@ { void Passport::validate() { - if (email.find(" ") !=3D std::string::npos) + if (email_.find(" ") !=3D std::string::npos) throw InvalidPassport("Passport must not contain any spaces!= "); =20 - if (email.find("@") =3D=3D std::string::npos || email.find("@") = !=3D email.rfind("@")) + if (email_.find("@") =3D=3D std::string::npos || email_.find("@"= ) !=3D email_.rfind("@")) throw InvalidPassport("Passport must contain exactly one '@'= character!"); =20 - if (email.find("@") =3D=3D 0) + if (email_.find("@") =3D=3D 0) throw InvalidPassport("Passport must have at least one chara= cter before the '@'!"); =20 - if (email.find(".", email.find("@")) =3D=3D std::string::npos) + if (email_.find(".", email_.find("@")) =3D=3D std::string::npos) throw InvalidPassport("Passport must have at least one '.' a= fter the '@'!"); =20 - if (email.find(".", email.find("@")) - email.find("@") < 2) + if (email_.find(".", email_.find("@")) - email_.find("@") < 2) throw InvalidPassport("Passport must have at least one chara= cter between the '@' and the '.'!"); =20 - if (email[email.size() - 1] =3D=3D '.') + if (email_[email_.size() - 1] =3D=3D '.') throw InvalidPassport("Passport must not end with a '.' char= acter!"); =20 - if (email.size() < 5) + if (email_.size() < 5) throw InvalidPassport("Passport must contain at least 5 char= acters!"); } =20 Passport::operator std::string() const { - return email; + return email_; } =20 const char *Passport::c_str() const { - return email.c_str(); + return email_.c_str(); } } =20 Modified: trunk/msn/passport.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/msn/passport.h 2005-07-14 12:22:34 UTC (rev 363) +++ trunk/msn/passport.h 2005-07-15 01:21:24 UTC (rev 364) @@ -55,19 +55,19 @@ * @throws InvalidPassport This will throw an InvalidPassport e= xception * if @a email_ is not a valid email ad= dress. */ - Passport(std::string email_) : email(email_) { validate(); }; + Passport(const std::string & email) : email_(email) { validate()= ; }; =20 /** @sa Passport(std::string email_) */ - Passport(const char *email_) : email(std::string(email_)) { vali= date(); }; + Passport(const char *email) : email_(email) { validate(); }; =20 /** Copy a Passport instance */ - Passport(const Passport& passport_) : email(passport_.email) {}; + Passport(const Passport& passport) : email_(passport.email_) {}; =20 /** Create an empty unitialized Passport instance. * * The empty passport instance can be populated by the operator = >>(std::istream & is, Passport & p) method */ - Passport() : email("") {}; + Passport() : email_("") {}; =20 /** Convert this to a std::string */ operator std::string() const; @@ -76,27 +76,27 @@ const char *c_str() const; =20 /** Simple equality test */ - bool operator =3D=3D(const Passport & other) const { return this= ->email =3D=3D other.email; }; + bool operator =3D=3D(const Passport & other) const { return this= ->email_ =3D=3D other.email_; }; =20 /** Passport.email =3D=3D std::string ? */ - friend bool operator =3D=3D(const Passport & p, const std::strin= g & other) { return p.email =3D=3D other; }; + friend bool operator =3D=3D(const Passport & p, const std::strin= g & other) { return p.email_ =3D=3D other; }; =20 /** Passport.email !=3D std::string ? */ - friend bool operator !=3D(const Passport & p, const std::string = & other) { return p.email !=3D other; }; + friend bool operator !=3D(const Passport & p, const std::string = & other) { return p.email_ !=3D other; }; =20 /** std::string =3D=3D Passport.email ? */ - friend bool operator =3D=3D(const std::string & other, const Pas= sport & p) { return p.email =3D=3D other; }; + friend bool operator =3D=3D(const std::string & other, const Pas= sport & p) { return p.email_ =3D=3D other; }; =20 /** std::string !=3D Passport.email ? */ - friend bool operator !=3D(const std::string & other, const Passp= ort & p) { return p.email !=3D other; }; + friend bool operator !=3D(const std::string & other, const Passp= ort & p) { return p.email_ !=3D other; }; =20 /** Extract Passport from std::istream */ - friend std::istream& operator >>(std::istream & is, Passport & p= ) { is >> p.email; p.validate(); return is; } + friend std::istream& operator >>(std::istream & is, Passport & p= ) { is >> p.email_; p.validate(); return is; } =20 - Passport &operator=3D(const Passport & passport_) { email =3D pa= ssport_.email; return *this; } + Passport &operator=3D(const Passport & passport) { this->email_ = =3D passport.email_; return *this; } private: void validate(); - std::string email; + std::string email_; }; } =20 |