| 87 | } |
| 88 | |
| 89 | bool ServerItem::readFromFile(std::istream& in) { |
| 90 | char buffer[ServerListCache::max_string + 1]; |
| 91 | |
| 92 | //read description |
| 93 | memset(buffer, 0, sizeof(buffer)); |
| 94 | in.read(buffer, sizeof(buffer)); |
| 95 | if ((size_t)in.gcount() < sizeof(buffer)) { return false; } // failed to read entire string |
| 96 | description = buffer; |
| 97 | |
| 98 | //read name |
| 99 | memset(buffer, 0, sizeof(buffer)); |
| 100 | in.read(buffer, sizeof(buffer)); |
| 101 | if ((size_t)in.gcount() < sizeof(buffer)) { return false; } // failed to read entire string |
| 102 | name = buffer; |
| 103 | |
| 104 | bool pingWorked = ping.readFromFile(in); |
| 105 | if (!pingWorked) { return false; } // pingpacket failed to read |
| 106 | |
| 107 | // read in favorite flag |
| 108 | uint8_t fav; |
| 109 | in.read(buffer, 1); |
| 110 | nboUnpackUInt8(buffer, fav); |
| 111 | favorite = (fav != 0); |
| 112 | |
| 113 | // read in recent flag |
| 114 | uint8_t rec; |
| 115 | in.read(buffer, 1); |
| 116 | nboUnpackUInt8(buffer, rec); |
| 117 | recent = (rec != 0); |
| 118 | |
| 119 | // read in recent time |
| 120 | in.read(&buffer[0], 4); |
| 121 | if (in.gcount() < 4) { return false; } |
| 122 | int32_t rTime; |
| 123 | nboUnpackInt32(&buffer[0], rTime); |
| 124 | recentTime = (time_t) rTime; |
| 125 | |
| 126 | // recent server from more than 10 days ago, unmark as recent |
| 127 | if ((recent) && ((getNow() - recentTime) >= 60 * 60 * 24 * 10)) { |
| 128 | recent = false; |
| 129 | recentTime = 0; |
| 130 | } |
| 131 | |
| 132 | // read in time |
| 133 | in.read(&buffer[0], 4); |
| 134 | if (in.gcount() < 4) { return false; } |
| 135 | int32_t theTime; |
| 136 | nboUnpackInt32(&buffer[0], theTime); |
| 137 | updateTime = (time_t) theTime; |
| 138 | cached = true; |
| 139 | return true; |
| 140 | } |
| 141 | |
| 142 | // set the last updated time to now |
| 143 | void ServerItem::resetAge() { |
no test coverage detected