summaryrefslogtreecommitdiffstats
path: root/lasso/id-wsf-2.0/wsf2_profile.c
diff options
context:
space:
mode:
Diffstat (limited to 'lasso/id-wsf-2.0/wsf2_profile.c')
-rw-r--r--lasso/id-wsf-2.0/wsf2_profile.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/lasso/id-wsf-2.0/wsf2_profile.c b/lasso/id-wsf-2.0/wsf2_profile.c
index 3b8f548a..55edbd03 100644
--- a/lasso/id-wsf-2.0/wsf2_profile.c
+++ b/lasso/id-wsf-2.0/wsf2_profile.c
@@ -146,6 +146,44 @@ lasso_wsf2_profile_build_soap_request_msg(LassoWsf2Profile *profile)
return 0;
}
+gint
+lasso_wsf2_profile_process_soap_request_msg(LassoWsf2Profile *profile, const gchar *message,
+ const gchar *service_type)
+{
+ LassoDiscoServiceInstance *si;
+ LassoSoapBindingCorrelation *correlation;
+ LassoSoapEnvelope *envelope = NULL;
+ LassoSoapFault *fault = NULL;
+ gchar *messageId;
+ int res = 0;
+ xmlDoc *doc;
+
+ g_return_val_if_fail(LASSO_IS_WSF2_PROFILE(profile),
+ LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
+ g_return_val_if_fail(message != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
+
+ si = lasso_server_get_service(profile->server, (char *) service_type);
+
+ doc = xmlParseMemory(message, strlen(message));
+
+ /* Get soap request and his message id */
+ envelope = LASSO_SOAP_ENVELOPE(lasso_node_new_from_xmlNode(xmlDocGetRootElement(doc)));
+
+ profile->request = LASSO_NODE(envelope->Body->any->data);
+ correlation = LASSO_SOAP_BINDING_CORRELATION(envelope->Header->Other->data);
+ messageId = correlation->messageID;
+
+ /* Set soap response */
+ envelope = lasso_wsf2_profile_build_soap_envelope(messageId,
+ LASSO_PROVIDER(profile->server)->ProviderID);
+ LASSO_WSF2_PROFILE(profile)->soap_envelope_response = envelope;
+
+ xmlFreeDoc(doc);
+
+ return res;
+}
+
+
/*****************************************************************************/
/* overrided parent class methods */
/*****************************************************************************/