Exemplo n.º 1
0
    private WvDbusMsg setup_msg(string query)
    {
	WvDbusMsg msg = methodcall("ExecChunkRecordset", "s");

	WvDbusWriter mw = new WvDbusWriter();
	mw.Write(query);

	msg.Body = mw.ToArray();

	return msg;
    }
Exemplo n.º 2
0
    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;
    }
Exemplo n.º 3
0
    // 
    // 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;
    }
Exemplo n.º 4
0
	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;
	}
Exemplo n.º 5
0
	public WvDbusMsg write(WvDbusWriter w)
	{
	    Body = w.ToArray();
	    return this;
	}
Exemplo n.º 6
0
	// 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();
	}
Exemplo n.º 7
0
    // 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;
    }
Exemplo n.º 8
0
    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("");
    }
Exemplo n.º 9
0
    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();
    }
Exemplo n.º 10
0
    // 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;
    }