/** * Server Status SOAP service handler for GetServerStatus. * * @param req SOAP request context * @param res SOAP response context * * @return H_OK on success */ static herror_t _get_server_status(SoapCtx *req, SoapCtx *res) { xmlNode *cmd; cmd = soap_env_get_method(req->env); soap_env_new_with_method(cmd->ns->href, "GetServerStatusResponse", &res->env); /* TODO */ xmlNode *result = xmlNewChild(res->env->body->children->next, NULL, "GetServerStatusResult", NULL); return H_OK; }
/** * Server Status SOAP service handler for CheckAuthentication. * * @param req SOAP request context * @param res SOAP response context * * @return H_OK on success */ static herror_t _check_authentication(SoapCtx *req, SoapCtx *res) { xmlNode *cmd; cmd = soap_env_get_method(req->env); soap_env_new_with_method(cmd->ns->href, "CheckAuthenticationResponse", &res->env); /* TODO */ xmlNode *result = xmlNewChild(res->env->body->children->next, NULL, "CheckAuthenticationResult", "REDMOND\\bob"); return H_OK; }
void soap_env_add_custom(SoapEnv * call, void *obj, XmlSerializerCallback cb, const char *type, const char *name) { struct XmlNodeHolder holder; holder.node = soap_env_get_method(call); cb(obj, BAD_CAST name, xmlbuilder_start_element, xmlbuilder_characters, xmlbuilder_end_element, &holder); return; }
int interpretResponse( SoapCtx* response, xmlChar** buildID ) { xmlNodePtr method; xmlNodePtr node; xmlChar* value; method = soap_env_get_method( response->env ); if ( method ) { if ( strcmp( (char*)method->name, "Fault" ) == 0 ) { printf( "Regresstor: A SOAP error has occured:\n" ); node = soap_xml_get_children( method ); while ( node ) { value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 ); printf( "Regresstor: %s=%s\n", node->name, value ); node = soap_xml_get_next(node); } return 0; } node = soap_xml_get_children( method ); /* The s-gensym3 struct */ if ( node->children ) { /* This is where the response values are */ node = node->children; while ( node ) { value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 ); if ( strcmp( (char*)node->name, "errorMsg" ) == 0 ) { printf( "Regresstor: Error - %s\n", value ); return 0; } node = soap_xml_get_next(node); } } } else { printf( "Regresstor: Non-SOAP response.\n" ); } printf( "Regresstor: Successfully submited check.\n" ); return 1; }
herror_t soap_env_new_from_doc(xmlDocPtr doc, SoapEnv ** out) { xmlNodePtr node; SoapEnv *env; if (doc == NULL) { log_error1("Can not create xml document!"); return herror_new("soap_env_new_from_doc", GENERAL_INVALID_PARAM, "XML Document (xmlDocPtr) is NULL"); } if (!(node = xmlDocGetRootElement(doc))) { log_error1("XML document is empty!"); return herror_new("soap_env_new_from_doc", XML_ERROR_EMPTY_DOCUMENT, "XML Document is empty!"); } if (!(env = (SoapEnv *) malloc(sizeof(SoapEnv)))) { log_error2("malloc failed (%s)", strerror(errno)); return herror_new("soap_env_from_doc", GENERAL_INVALID_PARAM, "malloc failed"); } env->root = node; env->header = soap_env_get_header(env); env->body = soap_env_get_body(env); env->cur = soap_env_get_method(env); *out = env; return H_OK; }
int iteliec_soap_init (char *hash) { herror_t err; SoapCtx *request; SoapCtx *response; char url[1024]; int error; xmlNodePtr function, node; /* ----------------------------------- */ /* Initialize SOAP Client */ /* ----------------------------------- */ err = soap_client_init_args(0, NULL); if (err != H_OK) { err_soap (err); return 1; } /* ----------------------------------- */ /* Create "request" envelope */ /* ----------------------------------- */ err = soap_ctx_new_with_method ("", "setSystem", &request); if (err != H_OK) { err_soap(err); soap_client_destroy(); return 1; } /* ----------------------------------- */ /* Create header element */ /* ----------------------------------- */ //xmlDocFormatDump(stdout, request->env->header->doc,1); /* ----------------------------------- */ /* Start collecting data */ /* ----------------------------------- */ iteliec_get_host_info (&request->env); iteliec_get_user_info (&request->env); iteliec_get_load_info (&request->env); iteliec_get_process_info (&request->env); iteliec_get_process_list (&request->env); iteliec_get_memory_info (&request->env); iteliec_get_swap_info (&request->env); iteliec_get_cpu_info (&request->env); iteliec_get_fs_info (&request->env); iteliec_get_disk_info (&request->env); iteliec_get_iface_info (&request->env); iteliec_get_network_info (&request->env); /* ----------------------------------- */ /* Trade for "response" envelope */ /* ----------------------------------- */ sprintf (url, "http://api.iteliec.com/system/update/ws/?token=%s", hash); err = soap_client_invoke (request, &response, url, ""); if (err != H_OK) { err_soap(err); soap_ctx_free(request); soap_client_destroy(); return ITELIEC_ERR; } function = soap_env_get_method (response->env); node = soap_xml_get_children (function); parseResponse (node->doc, node); /* ----------------------------------- */ /* Show "response" envelope */ /* ----------------------------------- */ /* xmlDocFormatDump(stdout, response->env->root->doc,1); */ /* ----------------------------------- */ /* Destroy SOAP Client */ /* ----------------------------------- */ soap_ctx_free(request); soap_ctx_free(response); soap_client_destroy(); return 0; }