public bool FilterCreate(string destination, create_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.DeserializeCreateRecordEntry(new StringReader(response.Body)); } } } baseUri += "create/"; 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.DeserializeCreateRecordEntry(new StringReader(response.Body)); } } else { // allow POST to override the GET retv = true; } } } return retv; }
static public StringBuilder Serialize(StringBuilder sb, create_record_entry cre) { sb.Append(TypeCreateRecordEntry); Serialize(sb, cre.table); Serialize(sb, cre.key); for (int index = 0; index < cre.columns.Length; index++) Serialize(sb, cre.columns[index]); sb.Append(' '); return sb; }