GByteArray * sqlx_pack_PROPSET_pairs(struct sqlx_name_s *name, gboolean flush, GSList *pairs) { MESSAGE req = make_request(NAME_MSGNAME_SQLX_PROPSET, name); if (flush) metautils_message_add_field_strint (req, NAME_MSGKEY_FLUSH, 1); metautils_message_add_body_unref (req, key_value_pairs_marshall_gba (pairs, NULL)); return message_marshall_gba_and_clean(req); }
GByteArray * sqlx_pack_PROPSET_tab(const struct sqlx_name_s *name, gboolean flush, gchar **kv) { MESSAGE req = make_request(NAME_MSGNAME_SQLX_PROPSET, name); if (flush) metautils_message_add_field_strint (req, NAME_MSGKEY_FLUSH, 1); metautils_message_add_body_unref (req, KV_encode_gba((gchar**)kv)); return message_marshall_gba_and_clean(req); }
GByteArray* message_marshall_gba(MESSAGE m, GError **err) { asn_enc_rval_t encRet; /*sanity check */ if (!m) { GSETERROR(err, "Invalid parameter"); return NULL; } /*set an ID if it is not present */ if (!metautils_message_has_ID(m)) { const char *reqid = oio_ext_get_reqid (); if (!reqid) oio_ext_set_random_reqid (); reqid = oio_ext_get_reqid (); metautils_message_set_ID(m, (guint8*)reqid, strlen(reqid)); } metautils_message_add_field_strint(m, NAME_MSGKEY_ADMIN_COMMAND, oio_ext_is_admin()); /*try to encode */ guint32 u32 = 0; GByteArray *result = g_byte_array_sized_new(256); g_byte_array_append(result, (guint8*)&u32, sizeof(u32)); encRet = der_encode(&asn_DEF_Message, m, metautils_asn1c_write_gba, result); if (encRet.encoded < 0) { g_byte_array_free(result, TRUE); GSETERROR(err, "Encoding error (Message)"); return NULL; } guint32 s32 = result->len - 4; *((guint32*)(result->data)) = g_htonl(s32); return result; }