summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAnas Nashif <nashif@intel.com>2006-11-29 04:14:26 +0000
committerAnas Nashif <nashif@intel.com>2006-11-29 04:14:26 +0000
commit1448419fd69de8dd123f3a367170c74dfc6abe97 (patch)
treef9ce341bf938ac87e5864362ddb9a552e556872d /src
parent3fa7b7cb09aef7284693668c7845871b164b3cdd (diff)
downloadwsmancli-1448419fd69de8dd123f3a367170c74dfc6abe97.tar.gz
wsmancli-1448419fd69de8dd123f3a367170c74dfc6abe97.tar.xz
wsmancli-1448419fd69de8dd123f3a367170c74dfc6abe97.zip
added client for win32 service
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am17
-rw-r--r--src/wsman-service.c239
-rw-r--r--[-rwxr-xr-x]src/wsmid_identify.c0
3 files changed, 250 insertions, 6 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 2113212..2cdc76d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,27 +1,32 @@
AM_CFLAGS = @CFLAGS@
-wsman_CFLAGS = \
- $(OPENWSMAN_CFLAGS)
-
wsman_LDADD = \
$(OPENWSMAN_LIBS)
-wsmid_identify_CFLAGS = \
- $(OPENWSMAN_CFLAGS)
+CFLAGS = \
+ $(OPENWSMAN_CFLAGS)
wsmid_identify_LDADD = \
$(OPENWSMAN_LIBS)
+
+wsman_service_LDADD = \
+ $(OPENWSMAN_LIBS)
+
wsman_SOURCES = wsman.c \
wsman-client-options.c \
wsman-client-options.h
wsmid_identify_SOURCES = \
wsmid_identify.c
+
+wsman_service_SOURCES = \
+ wsman-service.c
bin_PROGRAMS = \
wsman \
- wsmid_identify
+ wsmid_identify \
+ wsman-service
diff --git a/src/wsman-service.c b/src/wsman-service.c
new file mode 100644
index 0000000..8e54cba
--- /dev/null
+++ b/src/wsman-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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <time.h>
+
+#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", "<uri>" },
+ { 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/src/wsmid_identify.c b/src/wsmid_identify.c
index 98d65cd..98d65cd 100755..100644
--- a/src/wsmid_identify.c
+++ b/src/wsmid_identify.c