# # # patch "ChangeLog" # from [75b4a58f05b4c01f9386cd1952b9d08b52e9d06d] # to [2d5c3302d23ca38ca7e277e7c76c0bc0e3cbb193] # # patch "roster_delta.cc" # from [c78fd99ec874ac047c4c5b2581f8e974a1adf648] # to [555ee6a8d7ffc2aeacd4decfdf067487b2832b77] # ============================================================ --- ChangeLog 75b4a58f05b4c01f9386cd1952b9d08b52e9d06d +++ ChangeLog 2d5c3302d23ca38ca7e277e7c76c0bc0e3cbb193 @@ -1,3 +1,9 @@ +2007-02-06 Thomas Moschny + + * roster_delta.cc (get_content_from_roster_delta): Added a missing + case: We might need to fetch a file's hash from the set of added + files of the roster_delta in question. + 2007-02-02 Thomas Moschny * roster_delta.{cc|hh} ============================================================ --- roster_delta.cc c78fd99ec874ac047c4c5b2581f8e974a1adf648 +++ roster_delta.cc 555ee6a8d7ffc2aeacd4decfdf067487b2832b77 @@ -531,19 +531,33 @@ get_content_from_roster_delta(roster_del roster_delta_t d; parse_roster_delta_t(pars, d); - std::map::const_iterator i = d.deltas_applied.find(nid); + roster_delta_t::deltas_applied_t::const_iterator i = d.deltas_applied.find(nid); if (i != d.deltas_applied.end()) { content = i->second; return true; } + // special case 1: the node was deleted, so we know for sure it's not + // there anymore in this roster if (d.nodes_deleted.find(nid) != d.nodes_deleted.end()) { content = file_id(); return true; } - + + // special case 2: the node was added, so we need to get the current + // content hash from the add stanza + for (roster_delta_t::files_added_t::const_iterator j = d.files_added.begin(); + j != d.files_added.end(); ++j) + { + if (j->second.first == nid) + { + content = j->second.second; + return true; + } + } + return false; }