YAZ only offers HTTP as transport carrier for SOAP, but it is relatively easy to change that.
The following definition of Z_GDU (Generic Data
Unit) allows for both HTTP and Z39.50 in one packet.
#include <yaz/zgdu.h>
#define Z_GDU_Z3950 1
#define Z_GDU_HTTP_Request 2
#define Z_GDU_HTTP_Response 3
typedef struct {
int which;
union {
Z_APDU *z3950;
Z_HTTP_Request *HTTP_Request;
Z_HTTP_Response *HTTP_Response;
} u;
} Z_GDU ;
The corresponding Z_GDU encoder/decoder is z_GDU.
The z3950 is any of the known BER encoded Z39.50
APDUs.
HTTP_Request and HTTP_Response
is the HTTP Request and Response respectively.