From patchwork Thu Mar 28 11:38:18 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Berger X-Patchwork-Id: 231988 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 3B99B2C0040 for ; Thu, 28 Mar 2013 22:42:44 +1100 (EST) Received: from localhost ([::1]:41766 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ULBEA-0002ft-3r for incoming@patchwork.ozlabs.org; Thu, 28 Mar 2013 07:42:42 -0400 Received: from eggs.gnu.org ([208.118.235.92]:43464) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ULBAt-000787-UN for qemu-devel@nongnu.org; Thu, 28 Mar 2013 07:39:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ULBAq-0006JD-7Z for qemu-devel@nongnu.org; Thu, 28 Mar 2013 07:39:19 -0400 Received: from e8.ny.us.ibm.com ([32.97.182.138]:59518) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ULBAq-0006J7-3G for qemu-devel@nongnu.org; Thu, 28 Mar 2013 07:39:16 -0400 Received: from /spool/local by e8.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 28 Mar 2013 07:39:15 -0400 Received: from d01dlp02.pok.ibm.com (9.56.250.167) by e8.ny.us.ibm.com (192.168.1.108) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 28 Mar 2013 07:39:14 -0400 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 4FF156E801D for ; Thu, 28 Mar 2013 07:39:11 -0400 (EDT) Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r2SBchSZ312422 for ; Thu, 28 Mar 2013 07:38:43 -0400 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r2SBchkd017174 for ; Thu, 28 Mar 2013 07:38:43 -0400 Received: from k-d941f-5.watson.ibm.com (k-d941f-5.watson.ibm.com [9.2.141.165]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r2SBcgmU017141 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 28 Mar 2013 07:38:42 -0400 Received: from k-d941f-5.watson.ibm.com (localhost.localdomain [127.0.0.1]) by k-d941f-5.watson.ibm.com (8.14.5/8.14.3) with ESMTP id r2SBcfJR016313; Thu, 28 Mar 2013 07:38:41 -0400 Received: (from root@localhost) by k-d941f-5.watson.ibm.com (8.14.5/8.14.5/Submit) id r2SBceV7016312; Thu, 28 Mar 2013 07:38:40 -0400 From: Stefan Berger To: stefanb@linux.vnet.ibm.com, qemu-devel@nongnu.org, anthony@codemonkey.ws Date: Thu, 28 Mar 2013 07:38:18 -0400 Message-Id: <1364470699-16223-8-git-send-email-stefanb@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1364470699-16223-1-git-send-email-stefanb@linux.vnet.ibm.com> References: <1364470699-16223-1-git-send-email-stefanb@linux.vnet.ibm.com> X-TM-AS-MML: No x-cbid: 13032811-9360-0000-0000-000011827BFA X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 32.97.182.138 Cc: jschopp@linux.vnet.ibm.com, coreyb@linux.vnet.ibm.com, mdroth@linux.vnet.ibm.com, mst@redhat.com Subject: [Qemu-devel] [PATCH v5 7/8] Extend test-visitor-serialization with ASN.1 visitor(s) X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Add BER visitor hooks to test-visitor-serialization Cc: Michael Tsirkin Cc: Stefan Berger Signed-off-by: Joel Schopp --- tests/Makefile | 2 +- tests/test-visitor-serialization.c | 78 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/tests/Makefile b/tests/Makefile index 567e36e..578d732 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -124,7 +124,7 @@ tests/test-qmp-output-visitor$(EXESUF): tests/test-qmp-output-visitor.o $(test-q tests/test-qmp-input-visitor$(EXESUF): tests/test-qmp-input-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a tests/test-qmp-input-strict$(EXESUF): tests/test-qmp-input-strict.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a tests/test-qmp-commands$(EXESUF): tests/test-qmp-commands.o tests/test-qmp-marshal.o $(test-qapi-obj-y) qapi-types.o qapi-visit.o libqemuutil.a libqemustub.a -tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a +tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y) $(block-obj-y) libqemuutil.a libqemustub.a tests/test-mul64$(EXESUF): tests/test-mul64.o libqemuutil.a diff --git a/tests/test-visitor-serialization.c b/tests/test-visitor-serialization.c index 3c6b8df..ef3c8e8 100644 --- a/tests/test-visitor-serialization.c +++ b/tests/test-visitor-serialization.c @@ -23,6 +23,9 @@ #include "qapi/qmp-output-visitor.h" #include "qapi/string-input-visitor.h" #include "qapi/string-output-visitor.h" +#include "qapi/ber-input-visitor.h" +#include "qapi/ber-output-visitor.h" +#include "migration/qemu-file.h" typedef struct PrimitiveType { union { @@ -701,6 +704,66 @@ static void string_cleanup(void *datap) string_input_visitor_cleanup(d->siv); } + +typedef struct BERSerializeData { + BEROutputVisitor *sov; + QEMUFile *qoutfile; + BERInputVisitor *siv; + QEMUFile *qinfile; +} BERSerializeData; + +static void ber_serialize(void *native_in, void **datap, + VisitorFunc visit, Error **errp, + BERLengthEncoding ber_length_encoding) +{ + BERSerializeData *d = g_malloc0(sizeof(*d)); + + d->qoutfile = qemu_bufopen("w", NULL); + d->sov = ber_output_visitor_new(d->qoutfile, ber_length_encoding); + visit(ber_output_get_visitor(d->sov), &native_in, errp); + *datap = d; +} + +static void ber_definite_serialize(void *native_in, void **datap, + VisitorFunc visit, Error **errp) +{ + ber_serialize(native_in, datap, visit, errp, + BER_LENGTH_ENCODING_DEFINITE); +} + +static void ber_indefinite_serialize(void *native_in, void **datap, + VisitorFunc visit, Error **errp) +{ + ber_serialize(native_in, datap, visit, errp, + BER_LENGTH_ENCODING_INDEFINITE); +} + +static void ber_deserialize(void **native_out, void *datap, + VisitorFunc visit, Error **errp) +{ + BERSerializeData *d = datap; + const QEMUSizedBuffer *qsb = qemu_buf_get(d->qoutfile); + QEMUSizedBuffer *new_qsb = qsb_clone(qsb); + g_assert(new_qsb != NULL); + + d->qinfile = qemu_bufopen("r", new_qsb); + + d->siv = ber_input_visitor_new(d->qinfile, ~0); + visit(ber_input_get_visitor(d->siv), native_out, errp); +} + +static void ber_cleanup(void *datap) +{ + BERSerializeData *d = datap; + + ber_output_visitor_cleanup(d->sov); + ber_input_visitor_cleanup(d->siv); + qemu_fclose(d->qinfile); + qemu_fclose(d->qoutfile); + g_free(d); +} + + /* visitor registration, test harness */ /* note: to function interchangeably as a serialization mechanism your @@ -722,6 +785,21 @@ static const SerializeOps visitors[] = { .cleanup = string_cleanup, .caps = VCAP_PRIMITIVES }, + { + .type = "ASN.1 BER indefinite l.e.", + .serialize = ber_indefinite_serialize, + .deserialize = ber_deserialize, + .cleanup = ber_cleanup, + .caps = VCAP_PRIMITIVES | VCAP_STRUCTURES | VCAP_LISTS + }, + { + .type = "ASN.1 BER definite l.e.", + .serialize = ber_definite_serialize, + .deserialize = ber_deserialize, + .cleanup = ber_cleanup, + .caps = VCAP_PRIMITIVES | VCAP_STRUCTURES | VCAP_LISTS + }, + { NULL } };