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;
 }