public bool FilterUpdate(string destination, update_record_entry record) { string baseUri = "/LogStreamer/out/" + record.table + "/"; bool retv = true; // block sending by default Response response; lock (_negativeCache) { if (!_negativeCache.Contains(baseUri)) { response = Self.GET(baseUri + destination); if (response == null || response.StatusCode == 404) { _negativeCache.Add(baseUri); } else if (response.StatusCode == 200) { // 200 will allow sending unless POST forbids it retv = false; if (response.Body != null) { record = StringSerializer.DeserializeUpdateRecordEntry(new StringReader(response.Body)); } } } baseUri += "update/"; if (!_negativeCache.Contains(baseUri)) { response = Self.POST(baseUri + destination, StringSerializer.Serialize(new StringBuilder(), record).ToString()); if (response == null || response.StatusCode == 404) { _negativeCache.Add(baseUri); } else if (response.StatusCode == 200) { retv = false; if (response.Body != null) { record = StringSerializer.DeserializeUpdateRecordEntry(new StringReader(response.Body)); } } else { // allow POST to override the GET retv = true; } } } return retv; }
static public StringBuilder Serialize(StringBuilder sb, update_record_entry ure) { sb.Append(TypeUpdateRecordEntry); Serialize(sb, ure.table); Serialize(sb, ure.key); for (int index = 0; index < ure.columns.Length; index++) Serialize(sb, ure.columns[index]); sb.Append(' '); return sb; }