Blob Blame History Raw
/*
 * wsman-soap.i
 *
 * soap structure accessors for openwsman swig bindings
 *
 */

%ignore __WsmanFaultCodeTable;
%ignore __WsmanFaultDetailTable;

%include "wsman-faults.h"


%nodefault __WsEnumerateInfo;
%rename(EnumerateInfo) __WsEnumerateInfo;
struct __WsEnumerateInfo {};

/*
 * Document-class: EnumerateInfo
 *
 * EnumerateInfo contains all information related to an enumeration
 * request.
 *
 * The initial client.enumerate operation only returns a +context+
 * (String) which can be used to +pull+ the next enumeration item.
 * This item contains the next context in the chain.
 *
 */
%extend __WsEnumerateInfo {
  ~__WsEnumerateInfo() {
  }
  /*
   * Return the maximum number of items that will be returned by this enumeration
   * call-seq:
   *    enumerate_info.max_items -> Integer
   *
   */
  int max_items() { return $self->maxItems; }
#if defined(SWIGRUBY)
  %rename("max_items=") set_max_items(int mi);
#endif
  /*
   * Set the maximum number of items returned by this enumeration
   * call-seq:
   *    enumerate_info.max_items = 100
   *
   */
  void set_max_items(int mi) { $self->maxItems = mi; }

  /*
   * enumeration flags
   * call-seq:
   *    enumerate_info.flags -> Integer
   *
   */
  int flags() {
    return $self->flags;
  }
  
  /*
   * The URL of the endpoint receiving the enumeration
   * call-seq:
   *    enumerate_info.epr_to -> String
   *
   */
  const char *epr_to() {
    return $self->epr_to;
  }
  /*
   * The URI of the end point reference
   * call-seq:
   *    enumerate_info.epr_uri -> String
   *
   */
  const char *epr_uri() {
    return $self->epr_uri;
  }
  /*
   * The current encoding (defaults to 'utf-8')
   * call-seq:
   *    enumerate_info.encoding -> String
   *
   */
  const char *encoding() {
    return $self->encoding;
  }
  /*
   * The Filter for this enumeration
   * call-seq:
   *    enumerate_info.filter -> Openwsman::Filter
   *
   */
  const filter_t *filter() {
    return $self->filter;
  }
  /*
   * The current index (number of the last returned item)
   * call-seq:
   *    enumerate_info.index -> Integer
   *
   */
  int index() {
    return $self->index;
  }
#if defined(SWIGRUBY)
  %rename("index=") set_index(int i);
#endif
  /*
   * Set a specific index (used to skip ahead)
   * call-seq:
   *    enumerate_info.index = 42
   *
   */
  void set_index(int i) {
    $self->index = i;
  }
  /*
   * The total number of items in this enumeration
   *
   * index is the number already returned, this is the total number
   * call-seq:
   *    enumerate_info.total_items -> Integer
   *
   */
  int total_items() {
    return $self->totalItems;
  }
#if defined(SWIGRUBY)
  %rename("total_items=") set_total_items(int i);
#endif
  /*
   * Set the total number of items in this enumeration
   * call-seq:
   *    enumerate_info.total_items = 10
   *
   */
  void set_total_items(int i) {
    $self->totalItems = i;
  }

  /*
   * XmlDoc representing the result pulled last
   * call-seq:
   *    enumerate_info.pull_result -> Openwsman::XmlDoc
   *
   */
  WsXmlDocH pull_result() {
    return (WsXmlDocH)$self->pullResultPtr;
  }
#if defined(SWIGRUBY)
  %rename("pull_result=") set_pull_result(WsXmlDocH result);
#endif
  /*
   * Set the pull result (XmlDoc)
   *
   * Used for server-side plugin extensions
   * call-seq:
   *    enumerate_info.pull_result = xml_doc
   *
   */
  void set_pull_result(WsXmlDocH result) {
    $self->pullResultPtr = (void *)result;
  }
}


/*
 * __SoapOp -> SoapOp
 */
 
%nodefault __SoapOp;
%rename(SoapOp) __SoapOp;
struct __SoapOp {};

/*
 * Document-class: SoapOp
 *
 * SoapOp represents a SOAP operation
 *
 */
%extend __SoapOp {
  /*
   * The incoming XmlDoc
   * call-seq:
   *   soap_op.indoc -> Openwsman::XmlDoc
   *
   */
  WsXmlDocH indoc() {
    return soap_get_op_doc($self, 1);
  }
#if defined(SWIGRUBY)
  %rename("indoc=") set_indoc( WsXmlDocH doc );
#endif
  /*
   * Set the incoming XmlDoc
   * call-seq:
   *   soap_op.indoc = xml_doc
   *
   */
  void set_indoc( WsXmlDocH doc ) {
    soap_set_op_doc( $self, doc, 1 );
  }
  /*
   * The outgoing XmlDoc
   * call-seq:
   *   soap_op.outdoc -> Openwsman::XmlDoc
   *
   */
  WsXmlDocH outdoc() {
    return soap_get_op_doc($self, 0);
  }
#if defined(SWIGRUBY)
  %rename("outdoc=") set_outdoc( WsXmlDocH doc );
#endif
  /*
   * Set the outgoing XmlDoc
   * call-seq:
   *   soap_op.outdoc = xml_doc
   *
   */
  void set_outdoc( WsXmlDocH doc ) {
    soap_set_op_doc( $self, doc, 0 );
  }
  /*
   * The Soap instance of this operation
   * call-seq:
   *   soap_op.soap -> Openwsman::Soap
   *
   */
  struct __Soap *soap() {
    return soap_get_op_soap($self);
  }
  /*
   * The raw (SOAP) message for this operation
   * call-seq:
   *   soap_op.msg -> Openwsman::Message
   *
   */
  WsmanMessage *msg() {
    return wsman_get_msg_from_op($self);
  }
  /*
   * The maximum size (on the wire) of this operation
   * call-seq:
   *   soap_op.maxsize -> Integer
   *
   */
  unsigned long maxsize(){
    return wsman_get_maxsize_from_op($self);
  }
}


/*
 * __Soap -> Soap
 */
 
%nodefault __Soap;
%rename(Soap) __Soap;
struct __Soap {};

/*
 * Document-class: Soap
 *
 * Soap represents a part of a SoapOp used to create and reference
 * context information.
 *
 * There is no constructor for Soap, use SoapOp.soap to access the
 * Soap instance associated with a SOAP operation.
 *
 */
%extend __Soap {
  ~__Soap() {
    soap_destroy($self);
  }
  %typemap(newfree) WsContextH "free($1);";

  /*
   * Create a new Context
   * call-seq:
   *   soap.create_context -> Openwsman::Context
   *
   */
  WsContextH create_context() {
    return ws_create_context($self);
  }
  /*
   * Get the current Context
   * call-seq:
   *   soap.context -> Openwsman::Context
   *
   */
  WsContextH context() {
    return ws_get_soap_context($self);
  }

  /*
   * Create a new endpoint Context
   * call-seq:
   *   soap.create_ep_context -> Openwsman::Context
   *
   */
  WsContextH create_ep_context( WsXmlDocH doc ) {
    return ws_create_ep_context( $self, doc );
  }
}


/*
 * WsContext -> Context
 */
 
%rename(Context) _WS_CONTEXT;
%nodefault _WS_CONTEXT;
struct _WS_CONTEXT {};
typedef struct _WS_CONTEXT* WsContextH;


/*
 * Document-class: Context
 *
 * Context contains all information of an ongoing SOAP operation
 *
 * There is no constructor for Context, use Soap.context to get the
 * current one.
 *
 */
%extend _WS_CONTEXT {
  ~_WS_CONTEXT() {
    ws_destroy_context($self);
  }
  %typemap(newfree) WsXmlDocH "ws_xml_destroy_doc($1);";
  /*
   * The incoming XmlDoc
   * call-seq:
   *   context.indox -> Openwsman::XmlDoc
   *
   */
  WsXmlDocH indoc() {
    return $self->indoc;
  }
  /*
   * Get the Soap runtime environment
   * call-seq:
   *   context.runtime -> Openwsman::Soap
   *
   */
  struct __Soap *runtime() {
    return ws_context_get_runtime($self);
  }
#if defined(SWIGRUBY)
  %rename("enum_idle_timeout=") set_enumIdleTimeout(unsigned long timeout);
#endif
  /*
   * Set the idle timeout for enumerations
   * call-seq:
   *   context.enum_idle_timeout = 60
   *
   */
  void set_enumIdleTimeout(unsigned long timeout) {
    ws_set_context_enumIdleTimeout($self, timeout);
  }
  /*
   * The class name
   * call-seq:
   *   context.classname -> String
   *
   */
  const char *classname() {
    return wsman_get_class_name($self);
  }
  /*
   * The method name
   * call-seq:
   *   context.method -> String
   *
   */
  const char *method() {
    return wsman_get_method_name($self);
  }
  /*
   * The method arguments
   * call-seq:
   *   context.method -> Hash
   *
   */
  hash_t *method_args(const char *resource_uri) {
    return wsman_get_method_args($self, resource_uri);
  }
  /*
   * The maximum elements of the document
   * call-seq:
   *   context.max_elements -> Integer
   *   context.max_elements(xmldoc) -> Integer
   *
   */
  int max_elements(WsXmlDocH doc = NULL) {
    return wsman_get_max_elements($self, doc);
  }
  /*
   * The maximum envelope size of the document
   * call-seq:
   *   context.max_envelope_size -> Integer
   *   context.max_envelope_size(xmldoc) -> Integer
   *
   */
  unsigned long max_envelope_size(WsXmlDocH doc = NULL) {
    return wsman_get_max_envelope_size($self, doc);
  }
  /*
   * The fragment of the document
   * call-seq:
   *   context.fragment_string -> String
   *   context.fragment_string(xmldoc) -> String
   *
   */
  const char *fragment_string(WsXmlDocH doc = NULL) {
    return wsman_get_fragment_string($self, doc);
  }
  /*
   * The selector for an element
   * call-seq:
   *   context.selector(xml_doc, "Name", 1) -> String
   *
   */
  const char *selector(WsXmlDocH doc, const char *name, int index) {
    return wsman_get_selector($self, doc, name, index);
  }
  /*
   * The selectors from an endpoint reference
   * call-seq:
   *   context.selectors_from_epr(epr_node_as_xml_doc) -> Hash
   *
   */
  hash_t *selectors_from_epr(WsXmlNodeH epr_node) {
    return wsman_get_selectors_from_epr($self, epr_node);
  }
  /*
   * The selectors for a document
   * call-seq:
   *   context.selectors -> Hash
   *   context.selectors(xml_doc) -> Hash
   *
   */
  hash_t *selectors(WsXmlDocH doc = NULL) {
    return wsman_get_selector_list($self, doc);
  }
  /*
   * The selectors from a filter
   * call-seq:
   *   context.selectors_from_filter -> Hash
   *   context.selectors_from_filter(xml_doc) -> Hash
   *
   */
  hash_t *selectors_from_filter(WsXmlDocH doc = NULL) {
    return wsman_get_selector_list_from_filter($self, doc);
  }
  /*
   * The action
   * call-seq:
   *   context.action -> String
   *   context.action(xml_doc) -> String
   *
   */
  const char *action(WsXmlDocH doc = NULL) {
    return wsman_get_action($self, doc);
  }
  /*
   * The resource uri
   * call-seq:
   *   context.resource_uri -> String
   *   context.resource_uri(xml_doc) -> String
   *
   */
  const char *resource_uri(WsXmlDocH doc = NULL) {
    return wsman_get_resource_uri($self, doc);
  }
  /*
   * The option set
   * call-seq:
   *   context.option_set(xml_doc, "op") -> String
   *
   */
  const char *option_set(WsXmlDocH doc, const char *op) {
    return wsman_get_option_set($self, doc, op);
  }
  /*
   * Parse enumeration request
   * call-seq:
   *   context.parse_enum_request(enumerate_info) -> Integer
   *
   */
  int parse_enum_request(WsEnumerateInfo *enumInfo) {
    WsmanStatus status;
    wsman_status_init(&status);
    return wsman_parse_enum_request( $self, enumInfo, &status);
    /* FIXME: return status */
  }
  
}


/*
 * WsmanStatus -> Status
 */

%rename(Status) _WsmanStatus;
%nodefault _WsmanStatus;
struct _WsmanStatus {};
typedef struct _WsmanStatus WsmanStatus;

/*
 * Document-class: Status
 *
 * Status represents the detailed status of a (failed) WS-Management
 * operation.
 *
 * Its primarily used implementing server-side plugins to report a Fault
 * back to the calling client.
 *
 */
%extend _WsmanStatus {
  /*
   * Create a new Status object
   *
   * call-seq:
   *   Openwsman::Status.new # create 'good' status
   *   Openwsman::Status.new error_code
   *   Openwsman::Status.new error_code, error_detail
   *   Openwsman::Status.new error_code, error_detail, "Error message"
   *
   */
  _WsmanStatus(int code = 0, int detail = 0, const char *msg = NULL) {
    WsmanStatus *s = (WsmanStatus *)malloc(sizeof(WsmanStatus));
    wsman_status_init(s);
    if (code)
      s->fault_code = code;
    if (msg)
      s->fault_msg = strdup(msg);
    if (detail < 0
        || detail > OWSMAN_SYSTEM_ERROR) {
      SWIG_exception( SWIG_ValueError, "Bad fault detail" );
    }
    else {
      s->fault_detail_code = detail;
    }
#if defined(SWIGPYTHON) || defined(SWIGPERL) || defined(SWIGJAVA)
    fail:
#endif
    return s;
  }
  ~_WsmanStatus() {
    if ($self->fault_msg) free($self->fault_msg);
    free($self);
  }
  /*
   * String representation (returns the fault message)
   *
   * call-seq:
   *   status.to_s -> String
   *
   */
  const char *to_s() {
    return $self->fault_msg;
  }
#if defined(SWIGRUBY)
  %rename("code=") set_code(int code);
#endif
  /*
   * Set the fault code
   *
   * call-seq:
   *   status.code = 1
   *
   */
  void set_code(int code) { $self->fault_code = code; }
  /*
   * Get the fault code
   *
   * call-seq:
   *   status.code -> Integer
   *
   */
  int code() {
    return $self->fault_code;
  }
#if defined(SWIGRUBY)
  %rename("detail=") set_detail(int detail);
#endif
  /*
   * Set the fault detail code
   *
   * call-seq:
   *   status.detail = 42
   *
   */
  void set_detail(int detail) {
    if (detail < 0
        || detail > OWSMAN_SYSTEM_ERROR) {
      SWIG_exception( SWIG_ValueError, "Bad fault detail" );
    }
    else {
      $self->fault_detail_code = detail;
    }
#if defined(SWIGPYTHON) || defined(SWIGPERL) || defined(SWIGJAVA)
    fail:
    return;
#endif
  }
  /*
   * Get the fault detail code
   *
   * call-seq:
   *   status.detail -> Integer
   *
   */
  int detail() {
    return $self->fault_detail_code;
  }
#if defined(SWIGRUBY)
  %rename("msg=") set_msg(const char *msg);
#endif
  /*
   * Set the fault message
   *
   * call-seq:
   *   status.msg = "This is a fault message"
   *
   */
  void set_msg(const char *msg) {
    if ($self->fault_msg)
      free($self->fault_msg);
    if (msg)
      $self->fault_msg = strdup(msg);
    else
      $self->fault_msg = NULL;
  }
  /*
   * Get the fault message
   *
   * call-seq:
   *   status.msg -> String
   *
   */
  const char *msg() {
    return $self->fault_msg;
  }

  %typemap(newfree) WsXmlDocH "ws_xml_destroy_doc($1);";
  /*
   * Create a new fault XmlDoc based on Status information
   *
   * call-seq:
   *   status.generate_fault(xml_doc) -> XmlDoc
   *
   */
  WsXmlDocH generate_fault(WsXmlDocH doc) {
    return wsman_generate_fault( doc, $self->fault_code, $self->fault_detail_code, $self->fault_msg);
  }
}

/*
 * WsManFault -> Fault
 */

%rename(Fault) _WsManFault;
%nodefault _WsManFault;
struct _WsManFault {};
typedef struct _WsManFault WsManFault;

/*
 * Document-class: Fault
 *
 * Fault represents details of a failed WS-Management operation
 *
 */
%extend _WsManFault {
  /*
   * Create a Fault representation of a failed WS-Management result doc
   *
   * call-seq:
   *   Openwsman::Fault.new result -> Openwsman::Fault
   *
   */
  _WsManFault(WsXmlDocH doc) {
    WsManFault *fault = wsmc_fault_new();
    wsmc_get_fault_data(doc, fault);
    return fault;
  }
  ~_WsManFault() {
    wsmc_fault_destroy($self);
  }
  /*
   * Fault code
   *
   * call-seq:
   *   fault.code -> String
   *
   */
  const char *code() {
    return $self->code;
  }
  /*
   * Fault subcode
   *
   * call-seq:
   *   fault.subcode -> String
   *
   */
  const char *subcode() {
    return $self->subcode;
  }
  /*
   * Fault reason
   *
   * call-seq:
   *   fault.reason -> String
   *
   */
  const char *reason() {
    return $self->reason;
  }
  /*
   * Fault detail
   *
   * call-seq:
   *   fault.detail -> String
   *
   */
  const char *detail() {
    return $self->fault_detail;
  }
}