From 2291617be0caf4e6ed8226bda5cd8c7193368606 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Wed, 29 Nov 2006 06:06:08 +0000 Subject: moved examples to where they belong removed some invalid tests improved a couple of tests --- examples/.cvsignore | 8 ++ examples/Makefile.am | 28 ++++++ examples/win32_service.c | 239 ++++++++++++++++++++++++++++++++++++++++++++++ examples/wsmid_identify.c | 163 +++++++++++++++++++++++++++++++ 4 files changed, 438 insertions(+) create mode 100644 examples/.cvsignore create mode 100644 examples/Makefile.am create mode 100644 examples/win32_service.c create mode 100644 examples/wsmid_identify.c (limited to 'examples') diff --git a/examples/.cvsignore b/examples/.cvsignore new file mode 100644 index 0000000..884b0f3 --- /dev/null +++ b/examples/.cvsignore @@ -0,0 +1,8 @@ +Makefile +Makefile.in +*.o +*.lo +*.la +.deps +.libs +wsman diff --git a/examples/Makefile.am b/examples/Makefile.am new file mode 100644 index 0000000..dc85a24 --- /dev/null +++ b/examples/Makefile.am @@ -0,0 +1,28 @@ +AM_CFLAGS = @CFLAGS@ + +wsman_LDADD = \ + $(OPENWSMAN_LIBS) + +CFLAGS = \ + $(OPENWSMAN_CFLAGS) + +LDADD = \ + $(OPENWSMAN_LIBS) + +wsman_SOURCES = wsman.c \ + wsman-client-options.c \ + wsman-client-options.h + +wsmid_identify_SOURCES = \ + wsmid_identify.c + +wsman_service_SOURCES = \ + win32_service.c + +bin_PROGRAMS = \ + wsman \ + wsmid_identify \ + win32_service + + + diff --git a/examples/win32_service.c b/examples/win32_service.c new file mode 100644 index 0000000..8e54cba --- /dev/null +++ b/examples/win32_service.c @@ -0,0 +1,239 @@ +/******************************************************************************* + * Copyright (C) 2004-2006 Intel Corp. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * - Neither the name of Intel Corp. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/** + * @author Anas Nashif + */ +#include +#include +#include +#include +#include +#include + +#include "u/libu.h" + +#include "wsman-client-api.h" +#include "wsman-client-transport.h" +#include "wsman-xml-serializer.h" + +#define RESOURCE_URI "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service" +#define CLASSNAME "Win32_Service" + +/* + boolean AcceptPause; + boolean AcceptStop; + string Caption; + uint32 CheckPoint; + string CreationClassName; + string Description; + boolean DesktopInteract; + string DisplayName; + string ErrorControl; + uint32 ExitCode; + datetime InstallDate; + string Name; + string PathName; + uint32 ProcessId; + uint32 ServiceSpecificExitCode; + string ServiceType; + boolean Started; + string StartMode; + string StartName; + string State; + string Status; + string SystemCreationClassName; + string SystemName; + uint32 TagId; + uint32 WaitHint; + + */ + + +struct __CIM_Servie +{ + int AcceptPause; + int AcceptStop; + char* Caption; + unsigned long CheckPoint; + char* CreationClassName; + char* Description; + int DesktopInteract; + char* DisplayName; + char* ErrorControl; + unsigned long ExitCode; + char* InstallDate; + char* Name; + char* PathName; + unsigned long ProcessId; + unsigned long ServiceSpecificExitCode; + char* ServiceType; + int Started; + char* StartMode; + char* StartName; + char* State; + char* Status; + char* SystemCreationClassName; + char* SystemName; + unsigned long TagId; + unsigned long WaitHint; +}; +typedef struct __CIM_Servie CIM_Servie; + +SER_START_ITEMS("CIM_Servie", CIM_Servie) +SER_BOOL("AcceptPause",0,1), +SER_BOOL("AcceptStop",0,1), +SER_STR("Caption",0,1), +SER_UINT32("CheckPoint", 1 ,1 ), +SER_STR("CreationClassName",0,1), +SER_STR("Description",0,1), +SER_BOOL("DesktopInteract",0,1), +SER_STR("DisplayName",0,1), +SER_STR("ErrorControl",0,1), +SER_UINT32("ExitCode",0,1), +SER_STR("InstallDate",0,1), +SER_STR("Name",0,1), +SER_STR("PathName",0,1), +SER_UINT32("ProcessId",0,1), +SER_UINT32("ServiceSpecificExitCode",0,1), +SER_STR("ServiceType",0,1), +SER_BOOL("Started",0,1), +SER_STR("StartMode",0,1), +SER_STR("StartName",0,1), +SER_STR("State",0,1), +SER_STR("Status",0,1), +SER_STR("SystemCreationClassName",0,1), +SER_STR("SystemName",0,1), +SER_UINT32("TagId",0,1), +SER_UINT32("WaitHint",0,1), +SER_END_ITEMS("CIM_Servie", CIM_Servie); + +static char *endpoint = NULL; + +int main(int argc, char** argv) +{ + + WsManClient *cl; + WsXmlDocH doc; + actionOptions options; + char retval = 0; + u_error_t *error = NULL; + + u_option_entry_t opt[] = { + { "endpoint", 'u', U_OPTION_ARG_STRING, &endpoint, + "Endpoint in form of a URL", "" }, + { NULL } + }; + + u_option_context_t *opt_ctx; + opt_ctx = u_option_context_new(""); + u_option_context_set_ignore_unknown_options(opt_ctx, FALSE); + u_option_context_add_main_entries(opt_ctx, opt, "Win32 Service"); + retval = u_option_context_parse(opt_ctx, &argc, &argv, &error); + + u_option_context_free(opt_ctx); + + if (error) { + if (error->message) + printf ("%s\n", error->message); + u_error_free(error); + return 1; + } + u_error_free(error); + + + u_uri_t *uri; + if (endpoint) { + u_uri_parse((const char *)endpoint, &uri); + } + if (!endpoint || !uri) { + fprintf(stderr, "endpoint option required\n"); + return 1; + } + + + wsman_client_transport_init(NULL); + cl = wsman_create_client( uri->host, + uri->port, + uri->path, + uri->scheme, + uri->user, + uri->pwd); + initialize_action_options(&options); + + char *enumContext; + WsXmlDocH enum_response; + + enum_response = wsenum_enumerate(cl, RESOURCE_URI, options); + if (enum_response) { + if (!wsman_get_client_response_code(cl) == 200 || + !wsman_get_client_response_code(cl) == 500) { + return (1); + } + enumContext = wsenum_get_enum_context(enum_response); + ws_xml_destroy_doc(enum_response); + } else { + return(1); + } + + while (enumContext !=NULL) { + doc = wsenum_pull(cl, RESOURCE_URI, enumContext, options); + + if (wsman_get_client_response_code(cl) != 200 && + wsman_get_client_response_code(cl) != 500) { + return (1); + } + enumContext = wsenum_get_enum_context(doc); + if (doc) { + WsXmlNodeH node = ws_xml_get_soap_body(doc); + node = ws_xml_get_child(node, 0, XML_NS_ENUMERATION, WSENUM_PULL_RESP); + node = ws_xml_get_child(node, 0, XML_NS_ENUMERATION, WSENUM_ITEMS); + if (ws_xml_get_child(node, 0, RESOURCE_URI , CLASSNAME )) { + CIM_Servie *service = ws_deserialize(wsman_client_get_context(cl), + node, + CIM_Servie_TypeInfo, CLASSNAME, + RESOURCE_URI, RESOURCE_URI, + 0, 0); + printf("Service %s is %s\n", service->Name, service->State ); + printf("AcceptPause %d, AcceptStop %d\n", service->AcceptPause, service->AcceptStop ); + } + ws_xml_destroy_doc(doc); + } + } + if (uri) { + u_uri_free(uri); + } + + destroy_action_options(&options); + wsman_release_client(cl); + return 0; +} + + diff --git a/examples/wsmid_identify.c b/examples/wsmid_identify.c new file mode 100644 index 0000000..98d65cd --- /dev/null +++ b/examples/wsmid_identify.c @@ -0,0 +1,163 @@ +/******************************************************************************* + * Copyright (C) 2004-2006 Intel Corp. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * - Neither the name of Intel Corp. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/** + * @author Anas Nashif + */ +#include +#include +#include +#include +#include +#include + +#include "u/libu.h" + +#include "wsman-client-api.h" +#include "wsman-client-transport.h" +#include "wsman-xml-serializer.h" + +struct __wsmid_identify +{ + char* ProtocolVersion; + char* ProductVendor; + char* ProductVersion; +}; +typedef struct __wsmid_identify wsmid_identify; + +SER_START_ITEMS("IdentifyResponse", wsmid_identify) +SER_STR("ProtocolVersion", 1, 1), +SER_STR("ProductVendor", 1, 1), +SER_STR("ProductVersion", 1, 1), +SER_END_ITEMS("IdentifyResponse", wsmid_identify); + + +static char vendor = 0; +static char version = 0; +static char protocol = 0; +static char *endpoint = NULL; + +int main(int argc, char** argv) +{ + + WsManClient *cl; + WsXmlDocH doc; + actionOptions options; + char retval = 0; + u_error_t *error = NULL; + + u_option_entry_t opt[] = { + { "product", 'p', U_OPTION_ARG_NONE, &vendor, + "Print Product Vendor", NULL }, + { "version", 'v', U_OPTION_ARG_NONE, &version, + "Print Product Version", NULL }, + { "protocol", 'P', U_OPTION_ARG_NONE, &protocol, + "Print Protocol Version", NULL }, + { "endpoint", 'u', U_OPTION_ARG_STRING, &endpoint, + "Endpoint in form of a URL", "" }, + { NULL } + }; + + u_option_context_t *opt_ctx; + opt_ctx = u_option_context_new(""); + u_option_context_set_ignore_unknown_options(opt_ctx, FALSE); + u_option_context_add_main_entries(opt_ctx, opt, "wsmid_identify"); + retval = u_option_context_parse(opt_ctx, &argc, &argv, &error); + + u_option_context_free(opt_ctx); + + if (error) { + if (error->message) + printf ("%s\n", error->message); + u_error_free(error); + return 1; + } + u_error_free(error); + + + u_uri_t *uri; + if (endpoint) { + u_uri_parse((const char *)endpoint, &uri); + } + if (!endpoint || !uri) { + fprintf(stderr, "endpoint option required\n"); + return 1; + } + + + wsman_client_transport_init(NULL); + cl = wsman_create_client( uri->host, + uri->port, + uri->path, + uri->scheme, + uri->user, + uri->pwd); + initialize_action_options(&options); + + + doc = wsman_identify(cl, options); + + WsXmlNodeH soapBody = ws_xml_get_soap_body(doc); + if (ws_xml_get_child(soapBody, 0, XML_NS_WSMAN_ID, "IdentifyResponse")) { + wsmid_identify *id = ws_deserialize(wsman_client_get_context(cl), + soapBody, + wsmid_identify_TypeInfo,"IdentifyResponse", + XML_NS_WSMAN_ID, XML_NS_WSMAN_ID, + 0, 0); + + if (vendor) + printf("%s\n", id->ProductVendor); + if (version) + printf("%s\n", id->ProductVersion); + if (protocol) + printf("%s\n", id->ProtocolVersion); + + if (!protocol && !vendor && !version ) { + printf("\n"); + printf("%s %s supporting protocol %s\n", id->ProductVendor, id->ProductVersion,id->ProtocolVersion); + } + + } + if (uri) { + u_uri_free(uri); + } + + if (doc) { + ws_xml_destroy_doc(doc); + } + + destroy_action_options(&options); + wsman_release_client(cl); + + + return 0; +} + + -- cgit