private WvDbusMsg setup_msg(string query) { WvDbusMsg msg = methodcall("ExecChunkRecordset", "s"); WvDbusWriter mw = new WvDbusWriter(); mw.Write(query); msg.Body = mw.ToArray(); return msg; }
private WvDbusMsg setup_msg(string call, string sig, object data) { WvDbusMsg msg = methodcall(call, sig); WvDbusWriter mw = new WvDbusWriter(); if (sig == "s") mw.Write((string)data); if (sig == "u") mw.Write((uint)data); msg.Body = mw.ToArray(); return msg; }
// // The ISchema interface // // Note: this implementation ignores the sums. public VxSchemaErrors Put(VxSchema schema, VxSchemaChecksums sums, VxPutOpts opts) { WvDbusMsg call = methodcall("PutSchema", String.Format("{0}i", VxSchema.GetDbusSignature())); WvDbusWriter writer = new WvDbusWriter(); schema.WriteSchema(writer); writer.Write((int)opts); call.Body = writer.ToArray(); WvDbusMsg reply = bus.send_and_wait(call); if (reply.signature == VxSchemaErrors.GetDbusSignature()) return new VxSchemaErrors(reply.iter().pop()); else reply.check(VxSchemaErrors.GetDbusSignature()); return null; }
public WvDbusMsg err_reply(string errcode, string errstr) { WvDbusMsg r = reply(); r.type = Dbus.MType.Error; r.err = errcode; if (errstr.ne()) { r.signature = "s"; var w = new WvDbusWriter(); w.Write(errstr); r.Body = w.ToArray(); } return r; }
public WvDbusMsg write(WvDbusWriter w) { Body = w.ToArray(); return this; }
// Header format is: yyyyuua{yv} public byte[] GetHeaderData() { WvDbusWriter w = new WvDbusWriter(); w.Write((byte)endian); w.Write((byte)type); w.Write((byte)flags); w.Write((byte)Dbus.Protocol.Version); w.Write(Body != null ? (uint)Body.Length : 0); w.Write((uint)serial); // This two-step process is a little convoluted because of the // way the WriteArray function needs to work. That, in turn, // is convoluted because the alignment of an array is complicated: // there's different padding for zero-element arrays than for // nonzero-element arrays, and WriteArray does that for us, // which means it needs to know in advance how many elements // are in our array. var l = new List<Dbus.Field>(); if (sender.ne()) l.Add(Dbus.Field.Sender); if (dest.ne()) l.Add(Dbus.Field.Destination); if (rserial.HasValue) l.Add(Dbus.Field.ReplySerial); if (signature.ne()) l.Add(Dbus.Field.Signature); if (path.ne()) l.Add(Dbus.Field.Path); if (ifc.ne()) l.Add(Dbus.Field.Interface); if (method.ne()) l.Add(Dbus.Field.Member); if (err.ne()) l.Add(Dbus.Field.ErrorName); w.WriteArray(8, l, (w2, i) => { switch (i) { case Dbus.Field.Sender: wws(w2, i, "s", sender); break; case Dbus.Field.Destination: wws(w2, i, "s", dest); break; case Dbus.Field.ReplySerial: wv.assert(rserial.Value != 0); wwu(w2, i, "u", rserial.Value); break; case Dbus.Field.Signature: wwsig(w2, i, "g", signature); break; case Dbus.Field.Path: wws(w2, i, "o", path); break; case Dbus.Field.Interface: wws(w2, i, "s", ifc); break; case Dbus.Field.Member: wws(w2, i, "s", method); break; case Dbus.Field.ErrorName: wws(w2, i, "s", err); break; default: break; // unknown field code, ignore } }); w.WritePad(8); // the header is *always* a multiple of 8 return w.ToArray(); }
// Utility API so you can say Get("foo"). public VxSchema Get(params string[] keys) { WvDbusMsg call = methodcall("GetSchema", "as"); WvDbusWriter writer = new WvDbusWriter(); if (keys == null) keys = new string[0]; writer.WriteArray(4, keys, (w2, k) => { w2.Write(k); }); call.Body = writer.ToArray(); WvDbusMsg reply = bus.send_and_wait(call); reply.check("a(sssy)"); VxSchema schema = new VxSchema(reply.iter().pop()); return schema; }
public void PutSchemaData(string tablename, string text, int seqnum) { WvDbusMsg call = methodcall("PutSchemaData", "ss"); WvDbusWriter writer = new WvDbusWriter(); writer.Write(tablename); writer.Write(text); call.Body = writer.ToArray(); WvDbusMsg reply = bus.send_and_wait(call); reply.check(""); }
public string GetSchemaData(string tablename, int seqnum, string where, Dictionary<string,string> replaces, List<string> skipfields) { WvDbusMsg call = methodcall("GetSchemaData", "ss"); WvDbusWriter writer = new WvDbusWriter(); if (where == null) where = ""; writer.Write(tablename); writer.Write(where); call.Body = writer.ToArray(); WvDbusMsg reply = bus.send_and_wait(call); reply.check("s"); return reply.iter().pop(); }
// A method exported over DBus but not exposed in ISchemaBackend public VxSchemaErrors DropSchema(params string[] keys) { WvDbusMsg call = methodcall("DropSchema", "as"); WvDbusWriter writer = new WvDbusWriter(); writer.WriteArray(4, keys, (w2, k) => { w2.Write(k); }); call.Body = writer.ToArray(); WvDbusMsg reply = bus.send_and_wait(call); if (reply.signature == VxSchemaErrors.GetDbusSignature()) return new VxSchemaErrors(reply.iter().pop()); else reply.check(VxSchemaErrors.GetDbusSignature()); return null; }