Projet

Général

Profil

0001-Remove-ID-WSF-1.0-2.0-and-WS-support.patch

Benjamin Dauvergne, 04 septembre 2021 11:09

Télécharger (2,35 Mo)

Voir les différences:

Subject: [PATCH] Remove ID-WSF 1.0, 2.0 and WS-* support

It has been deprecated for a long time.
 bindings/bindings.py                          |   21 +-
 bindings/java/Makefile.am                     |    4 -
 bindings/overrides.xml                        |   37 -
 bindings/perl/Makefile.am                     |    4 -
 bindings/perl/lang.py                         |    4 +-
 bindings/php5/Makefile.am                     |    5 -
 bindings/php7/Makefile.am                     |    5 -
 bindings/python/Makefile.am                   |    4 -
 bindings/python/lang.py                       |   11 -
 bindings/python/tests/Makefile.am             |    4 -
 bindings/python/tests/idwsf2_tests.py         |  796 ----
 configure.ac                                  |   32 -
 docs/reference/lasso/Makefile.am              |   18 +-
 docs/reference/lasso/lasso-docs.xml           |  227 --
 docs/reference/lasso/lasso-sections.txt       | 3552 +----------------
 docs/reference/lasso/lasso.types              |  126 +
 docs/reference/lasso/lasso.types.in           |  346 --
 lasso.doap                                    |    2 +-
 lasso/Makefile.am                             |   19 -
 lasso/errors.h                                |  282 --
 lasso/extract_sections.py                     |    7 +-
 lasso/extract_symbols.py                      |   24 +-
 lasso/extract_types.py                        |   29 +-
 lasso/id-ff/identity.c                        |   74 -
 lasso/id-ff/identityprivate.h                 |    5 -
 lasso/id-ff/login.c                           |   13 -
 lasso/id-ff/loginprivate.h                    |    9 -
 lasso/id-ff/profile.c                         |   26 -
 lasso/id-ff/profile.h                         |   18 -
 lasso/id-ff/provider.h                        |    2 +-
 lasso/id-ff/server.c                          |   20 -
 lasso/id-ff/session.c                         |   43 -
 lasso/id-ff/sessionprivate.h                  |    3 -
 lasso/id-wsf-2.0/Makefile.am                  |   40 -
 lasso/id-wsf-2.0/data_service.c               | 1062 -----
 lasso/id-wsf-2.0/data_service.h               |  145 -
 lasso/id-wsf-2.0/discovery.c                  | 1538 -------
 lasso/id-wsf-2.0/discovery.h                  |  153 -
 lasso/id-wsf-2.0/id_wsf_2.h                   |   34 -
 lasso/id-wsf-2.0/identity.c                   |   54 -
 lasso/id-wsf-2.0/identity.h                   |   44 -
 lasso/id-wsf-2.0/idwsf2_helper.c              |  381 --
 lasso/id-wsf-2.0/idwsf2_helper.h              |   74 -
 lasso/id-wsf-2.0/private.h                    |   37 -
 lasso/id-wsf-2.0/profile.c                    | 1004 -----
 lasso/id-wsf-2.0/profile.h                    |  110 -
 lasso/id-wsf-2.0/saml2_login.c                |  293 --
 lasso/id-wsf-2.0/saml2_login.h                |   54 -
 lasso/id-wsf-2.0/server.c                     |  146 -
 lasso/id-wsf-2.0/server.h                     |   51 -
 lasso/id-wsf-2.0/serverprivate.h              |   44 -
 lasso/id-wsf-2.0/session.c                    |  192 -
 lasso/id-wsf-2.0/session.h                    |   49 -
 lasso/id-wsf-2.0/sessionprivate.h             |   43 -
 lasso/id-wsf-2.0/soap_binding.c               |  496 ---
 lasso/id-wsf-2.0/soap_binding.h               |  107 -
 lasso/id-wsf/Makefile.am                      |   42 -
 lasso/id-wsf/authentication.c                 |  762 ----
 lasso/id-wsf/authentication.h                 |  111 -
 lasso/id-wsf/data_service.c                   | 1269 ------
 lasso/id-wsf/data_service.h                   |  130 -
 lasso/id-wsf/discovery.c                      | 1349 -------
 lasso/id-wsf/discovery.h                      |  123 -
 lasso/id-wsf/id_ff_extensions.c               |  381 --
 lasso/id-wsf/id_ff_extensions.h               |   62 -
 lasso/id-wsf/id_ff_extensions_private.h       |   46 -
 lasso/id-wsf/id_wsf.h                         |   37 -
 lasso/id-wsf/interaction_profile_service.c    |  172 -
 lasso/id-wsf/interaction_profile_service.h    |   86 -
 lasso/id-wsf/personal_profile_service.c       |  155 -
 lasso/id-wsf/personal_profile_service.h       |   78 -
 lasso/id-wsf/wsf_profile.c                    | 1578 --------
 lasso/id-wsf/wsf_profile.h                    |  186 -
 lasso/id-wsf/wsf_profile_private.h            |   55 -
 lasso/id-wsf/wsf_utils.c                      |  152 -
 lasso/id-wsf/wsf_utils.h                      |   33 -
 lasso/lasso_config.h.in                       |    2 -
 lasso/xml/Makefile.am                         |  134 +-
 lasso/xml/disco_authenticate_requester.c      |  102 -
 lasso/xml/disco_authenticate_requester.h      |   69 -
 .../xml/disco_authenticate_session_context.c  |  102 -
 .../xml/disco_authenticate_session_context.h  |   72 -
 lasso/xml/disco_authorize_requester.c         |  102 -
 lasso/xml/disco_authorize_requester.h         |   69 -
 lasso/xml/disco_credentials.c                 |  104 -
 lasso/xml/disco_credentials.h                 |   65 -
 lasso/xml/disco_description.c                 |  279 --
 lasso/xml/disco_description.h                 |  106 -
 lasso/xml/disco_encrypt_resource_id.c         |  102 -
 lasso/xml/disco_encrypt_resource_id.h         |   69 -
 lasso/xml/disco_encrypted_resource_id.c       |  109 -
 lasso/xml/disco_encrypted_resource_id.h       |   69 -
 lasso/xml/disco_generate_bearer_token.c       |  102 -
 lasso/xml/disco_generate_bearer_token.h       |   69 -
 lasso/xml/disco_insert_entry.c                |  108 -
 lasso/xml/disco_insert_entry.h                |   70 -
 lasso/xml/disco_modify.c                      |  119 -
 lasso/xml/disco_modify.h                      |   73 -
 lasso/xml/disco_modify_response.c             |  156 -
 lasso/xml/disco_modify_response.h             |   82 -
 lasso/xml/disco_options.c                     |   98 -
 lasso/xml/disco_options.h                     |   66 -
 lasso/xml/disco_query.c                       |  125 -
 lasso/xml/disco_query.h                       |   71 -
 lasso/xml/disco_query_response.c              |  152 -
 lasso/xml/disco_query_response.h              |   73 -
 lasso/xml/disco_remove_entry.c                |  109 -
 lasso/xml/disco_remove_entry.h                |   68 -
 lasso/xml/disco_requested_service_type.c      |  113 -
 lasso/xml/disco_requested_service_type.h      |   70 -
 lasso/xml/disco_resource_id.c                 |  108 -
 lasso/xml/disco_resource_id.h                 |   70 -
 lasso/xml/disco_resource_offering.c           |  127 -
 lasso/xml/disco_resource_offering.h           |   87 -
 lasso/xml/disco_send_single_logout.c          |  105 -
 lasso/xml/disco_send_single_logout.h          |   69 -
 lasso/xml/disco_service_instance.c            |  150 -
 lasso/xml/disco_service_instance.h            |   76 -
 lasso/xml/dst_data.c                          |  120 -
 lasso/xml/dst_data.h                          |   65 -
 lasso/xml/dst_modification.c                  |  128 -
 lasso/xml/dst_modification.h                  |   72 -
 lasso/xml/dst_modify.c                        |  184 -
 lasso/xml/dst_modify.h                        |   78 -
 lasso/xml/dst_modify_response.c               |  166 -
 lasso/xml/dst_modify_response.h               |   77 -
 lasso/xml/dst_new_data.c                      |  107 -
 lasso/xml/dst_new_data.h                      |   65 -
 lasso/xml/dst_query.c                         |  189 -
 lasso/xml/dst_query.h                         |   77 -
 lasso/xml/dst_query_item.c                    |  133 -
 lasso/xml/dst_query_item.h                    |   70 -
 lasso/xml/dst_query_response.c                |  181 -
 lasso/xml/dst_query_response.h                |   78 -
 lasso/xml/id-wsf-2.0/Makefile.am              |  287 --
 lasso/xml/id-wsf-2.0/disco_abstract.c         |  126 -
 lasso/xml/id-wsf-2.0/disco_abstract.h         |   80 -
 lasso/xml/id-wsf-2.0/disco_endpoint_context.c |  137 -
 lasso/xml/id-wsf-2.0/disco_endpoint_context.h |   86 -
 lasso/xml/id-wsf-2.0/disco_keys.c             |  114 -
 lasso/xml/id-wsf-2.0/disco_keys.h             |   80 -
 lasso/xml/id-wsf-2.0/disco_options.c          |  111 -
 lasso/xml/id-wsf-2.0/disco_options.h          |   80 -
 lasso/xml/id-wsf-2.0/disco_provider_id.c      |  126 -
 lasso/xml/id-wsf-2.0/disco_provider_id.h      |   81 -
 lasso/xml/id-wsf-2.0/disco_query.c            |  125 -
 lasso/xml/id-wsf-2.0/disco_query.h            |   82 -
 lasso/xml/id-wsf-2.0/disco_query_response.c   |  128 -
 lasso/xml/id-wsf-2.0/disco_query_response.h   |   84 -
 .../xml/id-wsf-2.0/disco_requested_service.c  |  148 -
 .../xml/id-wsf-2.0/disco_requested_service.h  |   90 -
 lasso/xml/id-wsf-2.0/disco_security_context.c |  122 -
 lasso/xml/id-wsf-2.0/disco_security_context.h |   82 -
 lasso/xml/id-wsf-2.0/disco_service_context.c  |  135 -
 lasso/xml/id-wsf-2.0/disco_service_context.h  |   85 -
 lasso/xml/id-wsf-2.0/disco_service_type.c     |  126 -
 lasso/xml/id-wsf-2.0/disco_service_type.h     |   81 -
 .../id-wsf-2.0/disco_svc_md_association_add.c |  120 -
 .../id-wsf-2.0/disco_svc_md_association_add.h |   81 -
 .../disco_svc_md_association_add_response.c   |  122 -
 .../disco_svc_md_association_add_response.h   |   85 -
 .../disco_svc_md_association_delete.c         |  120 -
 .../disco_svc_md_association_delete.h         |   83 -
 ...disco_svc_md_association_delete_response.c |  122 -
 ...disco_svc_md_association_delete_response.h |   85 -
 .../disco_svc_md_association_query.c          |  120 -
 .../disco_svc_md_association_query.h          |   83 -
 .../disco_svc_md_association_query_response.c |  125 -
 .../disco_svc_md_association_query_response.h |   86 -
 lasso/xml/id-wsf-2.0/disco_svc_md_delete.c    |  120 -
 lasso/xml/id-wsf-2.0/disco_svc_md_delete.h    |   82 -
 .../id-wsf-2.0/disco_svc_md_delete_response.c |  121 -
 .../id-wsf-2.0/disco_svc_md_delete_response.h |   82 -
 lasso/xml/id-wsf-2.0/disco_svc_md_query.c     |  122 -
 lasso/xml/id-wsf-2.0/disco_svc_md_query.h     |   82 -
 .../id-wsf-2.0/disco_svc_md_query_response.c  |  125 -
 .../id-wsf-2.0/disco_svc_md_query_response.h  |   86 -
 lasso/xml/id-wsf-2.0/disco_svc_md_register.c  |  151 -
 lasso/xml/id-wsf-2.0/disco_svc_md_register.h  |   85 -
 .../disco_svc_md_register_response.c          |  130 -
 .../disco_svc_md_register_response.h          |   86 -
 lasso/xml/id-wsf-2.0/disco_svc_md_replace.c   |  121 -
 lasso/xml/id-wsf-2.0/disco_svc_md_replace.h   |   82 -
 .../disco_svc_md_replace_response.c           |  121 -
 .../disco_svc_md_replace_response.h           |   84 -
 lasso/xml/id-wsf-2.0/disco_svc_metadata.c     |  145 -
 lasso/xml/id-wsf-2.0/disco_svc_metadata.h     |   87 -
 lasso/xml/id-wsf-2.0/dst_data_response_base.c |  113 -
 lasso/xml/id-wsf-2.0/dst_data_response_base.h |   81 -
 lasso/xml/id-wsf-2.0/dst_delete_item_base.c   |  120 -
 lasso/xml/id-wsf-2.0/dst_delete_item_base.h   |   84 -
 lasso/xml/id-wsf-2.0/dst_delete_response.c    |  108 -
 lasso/xml/id-wsf-2.0/dst_delete_response.h    |   79 -
 lasso/xml/id-wsf-2.0/dst_request.c            |  124 -
 lasso/xml/id-wsf-2.0/dst_request.h            |   83 -
 lasso/xml/id-wsf-2.0/dst_result_query_base.c  |  132 -
 lasso/xml/id-wsf-2.0/dst_result_query_base.h  |   88 -
 lasso/xml/id-wsf-2.0/dst_test_item_base.c     |  117 -
 lasso/xml/id-wsf-2.0/dst_test_item_base.h     |   83 -
 lasso/xml/id-wsf-2.0/dstref_app_data.c        |  111 -
 lasso/xml/id-wsf-2.0/dstref_app_data.h        |   78 -
 lasso/xml/id-wsf-2.0/dstref_create.c          |  120 -
 lasso/xml/id-wsf-2.0/dstref_create.h          |   82 -
 lasso/xml/id-wsf-2.0/dstref_create_item.c     |  119 -
 lasso/xml/id-wsf-2.0/dstref_create_item.h     |   85 -
 lasso/xml/id-wsf-2.0/dstref_create_response.c |  107 -
 lasso/xml/id-wsf-2.0/dstref_create_response.h |   80 -
 lasso/xml/id-wsf-2.0/dstref_data.c            |  122 -
 lasso/xml/id-wsf-2.0/dstref_data.h            |   83 -
 lasso/xml/id-wsf-2.0/dstref_data_response.c   |  116 -
 lasso/xml/id-wsf-2.0/dstref_data_response.h   |   81 -
 lasso/xml/id-wsf-2.0/dstref_delete.c          |  116 -
 lasso/xml/id-wsf-2.0/dstref_delete.h          |   81 -
 lasso/xml/id-wsf-2.0/dstref_delete_item.c     |  115 -
 lasso/xml/id-wsf-2.0/dstref_delete_item.h     |   81 -
 lasso/xml/id-wsf-2.0/dstref_delete_response.c |  108 -
 lasso/xml/id-wsf-2.0/dstref_delete_response.h |   80 -
 lasso/xml/id-wsf-2.0/dstref_item_data.c       |  117 -
 lasso/xml/id-wsf-2.0/dstref_item_data.h       |   83 -
 lasso/xml/id-wsf-2.0/dstref_modify.c          |  155 -
 lasso/xml/id-wsf-2.0/dstref_modify.h          |   86 -
 lasso/xml/id-wsf-2.0/dstref_modify_item.c     |  141 -
 lasso/xml/id-wsf-2.0/dstref_modify_item.h     |   89 -
 lasso/xml/id-wsf-2.0/dstref_modify_response.c |  146 -
 lasso/xml/id-wsf-2.0/dstref_modify_response.h |   84 -
 lasso/xml/id-wsf-2.0/dstref_query.c           |  157 -
 lasso/xml/id-wsf-2.0/dstref_query.h           |   86 -
 lasso/xml/id-wsf-2.0/dstref_query_item.c      |  140 -
 lasso/xml/id-wsf-2.0/dstref_query_item.h      |   86 -
 lasso/xml/id-wsf-2.0/dstref_query_response.c  |  157 -
 lasso/xml/id-wsf-2.0/dstref_query_response.h  |   87 -
 lasso/xml/id-wsf-2.0/dstref_result_query.c    |  121 -
 lasso/xml/id-wsf-2.0/dstref_result_query.h    |   83 -
 lasso/xml/id-wsf-2.0/dstref_test_item.c       |  115 -
 lasso/xml/id-wsf-2.0/dstref_test_item.h       |   81 -
 lasso/xml/id-wsf-2.0/idwsf2_strings.h         |  938 -----
 .../id-wsf-2.0/ims_identity_mapping_request.c |  120 -
 .../id-wsf-2.0/ims_identity_mapping_request.h |   83 -
 .../ims_identity_mapping_response.c           |  124 -
 .../ims_identity_mapping_response.h           |   85 -
 lasso/xml/id-wsf-2.0/ims_mapping_input.c      |  119 -
 lasso/xml/id-wsf-2.0/ims_mapping_input.h      |   85 -
 lasso/xml/id-wsf-2.0/ims_mapping_output.c     |  114 -
 lasso/xml/id-wsf-2.0/ims_mapping_output.h     |   83 -
 lasso/xml/id-wsf-2.0/is_help.c                |  115 -
 lasso/xml/id-wsf-2.0/is_help.h                |   82 -
 lasso/xml/id-wsf-2.0/is_inquiry.c             |  129 -
 lasso/xml/id-wsf-2.0/is_inquiry.h             |   87 -
 lasso/xml/id-wsf-2.0/is_inquiry_element.c     |  123 -
 lasso/xml/id-wsf-2.0/is_inquiry_element.h     |   86 -
 lasso/xml/id-wsf-2.0/is_interaction_request.c |  126 -
 lasso/xml/id-wsf-2.0/is_interaction_request.h |   87 -
 .../xml/id-wsf-2.0/is_interaction_response.c  |  121 -
 .../xml/id-wsf-2.0/is_interaction_response.h  |   83 -
 .../xml/id-wsf-2.0/is_interaction_statement.c |  142 -
 .../xml/id-wsf-2.0/is_interaction_statement.h |   85 -
 lasso/xml/id-wsf-2.0/is_item.c                |  119 -
 lasso/xml/id-wsf-2.0/is_item.h                |   83 -
 lasso/xml/id-wsf-2.0/is_parameter.c           |  112 -
 lasso/xml/id-wsf-2.0/is_parameter.h           |   81 -
 lasso/xml/id-wsf-2.0/is_select.c              |  118 -
 lasso/xml/id-wsf-2.0/is_select.h              |   81 -
 lasso/xml/id-wsf-2.0/is_text.c                |  119 -
 lasso/xml/id-wsf-2.0/is_text.h                |   83 -
 .../id-wsf-2.0/ps_add_collection_request.c    |  118 -
 .../id-wsf-2.0/ps_add_collection_request.h    |   85 -
 .../id-wsf-2.0/ps_add_collection_response.c   |  115 -
 .../id-wsf-2.0/ps_add_collection_response.h   |   83 -
 lasso/xml/id-wsf-2.0/ps_add_entity_request.c  |  128 -
 lasso/xml/id-wsf-2.0/ps_add_entity_request.h  |   88 -
 lasso/xml/id-wsf-2.0/ps_add_entity_response.c |  121 -
 lasso/xml/id-wsf-2.0/ps_add_entity_response.h |   84 -
 .../id-wsf-2.0/ps_add_known_entity_request.c  |  129 -
 .../id-wsf-2.0/ps_add_known_entity_request.h  |   91 -
 .../id-wsf-2.0/ps_add_known_entity_response.c |  121 -
 .../id-wsf-2.0/ps_add_known_entity_response.h |   83 -
 .../id-wsf-2.0/ps_add_to_collection_request.c |  121 -
 .../id-wsf-2.0/ps_add_to_collection_request.h |   83 -
 .../id-wsf-2.0/ps_get_object_info_request.c   |  118 -
 .../id-wsf-2.0/ps_get_object_info_request.h   |   84 -
 .../id-wsf-2.0/ps_get_object_info_response.c  |  115 -
 .../id-wsf-2.0/ps_get_object_info_response.h  |   84 -
 lasso/xml/id-wsf-2.0/ps_item_data.c           |  111 -
 lasso/xml/id-wsf-2.0/ps_item_data.h           |   81 -
 .../xml/id-wsf-2.0/ps_list_members_request.c  |  133 -
 .../xml/id-wsf-2.0/ps_list_members_request.h  |   87 -
 .../xml/id-wsf-2.0/ps_list_members_response.c |  115 -
 .../xml/id-wsf-2.0/ps_list_members_response.h |   79 -
 lasso/xml/id-wsf-2.0/ps_notification.c        |  115 -
 lasso/xml/id-wsf-2.0/ps_notification.h        |   81 -
 lasso/xml/id-wsf-2.0/ps_notify.c              |  118 -
 lasso/xml/id-wsf-2.0/ps_notify.h              |   83 -
 lasso/xml/id-wsf-2.0/ps_object.c              |  133 -
 lasso/xml/id-wsf-2.0/ps_object.h              |   88 -
 .../xml/id-wsf-2.0/ps_query_objects_request.c |  130 -
 .../xml/id-wsf-2.0/ps_query_objects_request.h |   84 -
 .../id-wsf-2.0/ps_query_objects_response.c    |  115 -
 .../id-wsf-2.0/ps_query_objects_response.h    |   82 -
 .../id-wsf-2.0/ps_remove_collection_request.c |  115 -
 .../id-wsf-2.0/ps_remove_collection_request.h |   82 -
 .../xml/id-wsf-2.0/ps_remove_entity_request.c |  115 -
 .../xml/id-wsf-2.0/ps_remove_entity_request.h |   79 -
 .../ps_remove_from_collection_request.c       |  121 -
 .../ps_remove_from_collection_request.h       |   85 -
 lasso/xml/id-wsf-2.0/ps_request_abstract.c    |  115 -
 lasso/xml/id-wsf-2.0/ps_request_abstract.h    |   80 -
 .../ps_resolve_identifier_request.c           |  115 -
 .../ps_resolve_identifier_request.h           |   82 -
 .../ps_resolve_identifier_response.c          |  115 -
 .../ps_resolve_identifier_response.h          |   82 -
 lasso/xml/id-wsf-2.0/ps_resolve_input.c       |  115 -
 lasso/xml/id-wsf-2.0/ps_resolve_input.h       |   81 -
 lasso/xml/id-wsf-2.0/ps_response_abstract.c   |  121 -
 lasso/xml/id-wsf-2.0/ps_response_abstract.h   |   83 -
 .../id-wsf-2.0/ps_set_object_info_request.c   |  118 -
 .../id-wsf-2.0/ps_set_object_info_request.h   |   84 -
 .../id-wsf-2.0/ps_test_membership_request.c   |  122 -
 .../id-wsf-2.0/ps_test_membership_request.h   |   86 -
 .../id-wsf-2.0/ps_test_membership_response.c  |  115 -
 .../id-wsf-2.0/ps_test_membership_response.h  |   80 -
 lasso/xml/id-wsf-2.0/sb2_consent.c            |  121 -
 lasso/xml/id-wsf-2.0/sb2_consent.h            |   82 -
 .../xml/id-wsf-2.0/sb2_credentials_context.c  |  124 -
 .../xml/id-wsf-2.0/sb2_credentials_context.h  |   84 -
 lasso/xml/id-wsf-2.0/sb2_endpoint_update.c    |  113 -
 lasso/xml/id-wsf-2.0/sb2_endpoint_update.h    |   81 -
 lasso/xml/id-wsf-2.0/sb2_redirect_request.c   |  121 -
 lasso/xml/id-wsf-2.0/sb2_redirect_request.h   |   82 -
 lasso/xml/id-wsf-2.0/sb2_sender.c             |  121 -
 lasso/xml/id-wsf-2.0/sb2_sender.h             |   82 -
 lasso/xml/id-wsf-2.0/sb2_target_identity.c    |  120 -
 lasso/xml/id-wsf-2.0/sb2_target_identity.h    |   81 -
 lasso/xml/id-wsf-2.0/sb2_timeout.c            |  118 -
 lasso/xml/id-wsf-2.0/sb2_timeout.h            |   81 -
 lasso/xml/id-wsf-2.0/sb2_usage_directive.c    |  122 -
 lasso/xml/id-wsf-2.0/sb2_usage_directive.h    |   81 -
 .../id-wsf-2.0/sb2_user_interaction_header.c  |  137 -
 .../id-wsf-2.0/sb2_user_interaction_header.h  |   85 -
 lasso/xml/id-wsf-2.0/sbf_framework.c          |  132 -
 lasso/xml/id-wsf-2.0/sbf_framework.h          |   81 -
 lasso/xml/id-wsf-2.0/sec_token.c              |  121 -
 lasso/xml/id-wsf-2.0/sec_token.h              |   84 -
 lasso/xml/id-wsf-2.0/sec_token_policy.c       |  132 -
 lasso/xml/id-wsf-2.0/sec_token_policy.h       |   86 -
 .../id-wsf-2.0/sec_transited_provider_path.c  |  113 -
 .../id-wsf-2.0/sec_transited_provider_path.h  |   79 -
 lasso/xml/id-wsf-2.0/subs_notification.c      |  124 -
 lasso/xml/id-wsf-2.0/subs_notification.h      |   85 -
 lasso/xml/id-wsf-2.0/subs_notify_response.c   |  108 -
 lasso/xml/id-wsf-2.0/subs_notify_response.h   |   79 -
 lasso/xml/id-wsf-2.0/subs_ref_item.c          |  112 -
 lasso/xml/id-wsf-2.0/subs_ref_item.h          |   81 -
 lasso/xml/id-wsf-2.0/subs_subscription.c      |  144 -
 lasso/xml/id-wsf-2.0/subs_subscription.h      |   89 -
 lasso/xml/id-wsf-2.0/subsref_app_data.c       |  106 -
 lasso/xml/id-wsf-2.0/subsref_app_data.h       |   81 -
 lasso/xml/id-wsf-2.0/subsref_create.c         |  121 -
 lasso/xml/id-wsf-2.0/subsref_create.h         |   83 -
 lasso/xml/id-wsf-2.0/subsref_create_item.c    |  118 -
 lasso/xml/id-wsf-2.0/subsref_create_item.h    |   85 -
 .../xml/id-wsf-2.0/subsref_create_response.c  |  108 -
 .../xml/id-wsf-2.0/subsref_create_response.h  |   80 -
 lasso/xml/id-wsf-2.0/subsref_data.c           |  122 -
 lasso/xml/id-wsf-2.0/subsref_data.h           |   83 -
 lasso/xml/id-wsf-2.0/subsref_data_response.c  |  115 -
 lasso/xml/id-wsf-2.0/subsref_data_response.h  |   82 -
 lasso/xml/id-wsf-2.0/subsref_delete.c         |  115 -
 lasso/xml/id-wsf-2.0/subsref_delete.h         |   81 -
 lasso/xml/id-wsf-2.0/subsref_delete_item.c    |  115 -
 lasso/xml/id-wsf-2.0/subsref_delete_item.h    |   81 -
 .../xml/id-wsf-2.0/subsref_delete_response.c  |  108 -
 .../xml/id-wsf-2.0/subsref_delete_response.h  |   80 -
 lasso/xml/id-wsf-2.0/subsref_item_data.c      |  117 -
 lasso/xml/id-wsf-2.0/subsref_item_data.h      |   83 -
 lasso/xml/id-wsf-2.0/subsref_modify.c         |  121 -
 lasso/xml/id-wsf-2.0/subsref_modify.h         |   83 -
 lasso/xml/id-wsf-2.0/subsref_modify_item.c    |  123 -
 lasso/xml/id-wsf-2.0/subsref_modify_item.h    |   87 -
 .../xml/id-wsf-2.0/subsref_modify_response.c  |  108 -
 .../xml/id-wsf-2.0/subsref_modify_response.h  |   80 -
 lasso/xml/id-wsf-2.0/subsref_notification.c   |  115 -
 lasso/xml/id-wsf-2.0/subsref_notification.h   |   82 -
 lasso/xml/id-wsf-2.0/subsref_notify.c         |  118 -
 lasso/xml/id-wsf-2.0/subsref_notify.h         |   83 -
 .../xml/id-wsf-2.0/subsref_notify_response.c  |  108 -
 .../xml/id-wsf-2.0/subsref_notify_response.h  |   80 -
 lasso/xml/id-wsf-2.0/subsref_query.c          |  121 -
 lasso/xml/id-wsf-2.0/subsref_query.h          |   83 -
 lasso/xml/id-wsf-2.0/subsref_query_item.c     |  125 -
 lasso/xml/id-wsf-2.0/subsref_query_item.h     |   84 -
 lasso/xml/id-wsf-2.0/subsref_query_response.c |  119 -
 lasso/xml/id-wsf-2.0/subsref_query_response.h |   83 -
 lasso/xml/id-wsf-2.0/subsref_result_query.c   |  118 -
 lasso/xml/id-wsf-2.0/subsref_result_query.h   |   83 -
 lasso/xml/id-wsf-2.0/subsref_subscription.c   |  122 -
 lasso/xml/id-wsf-2.0/subsref_subscription.h   |   84 -
 lasso/xml/id-wsf-2.0/subsref_test_item.c      |  115 -
 lasso/xml/id-wsf-2.0/subsref_test_item.h      |   81 -
 lasso/xml/id-wsf-2.0/util_empty.c             |  111 -
 lasso/xml/id-wsf-2.0/util_empty.h             |   78 -
 lasso/xml/id-wsf-2.0/util_extension.c         |  113 -
 lasso/xml/id-wsf-2.0/util_extension.h         |   78 -
 lasso/xml/id-wsf-2.0/util_response.c          |  183 -
 lasso/xml/id-wsf-2.0/util_response.h          |   89 -
 lasso/xml/id-wsf-2.0/util_status.c            |  153 -
 lasso/xml/id-wsf-2.0/util_status.h            |   85 -
 lasso/xml/id-wsf-2.0/xml_idwsf2.h             |  164 -
 lasso/xml/idwsf_strings.h                     |  450 ---
 lasso/xml/is_help.c                           |  105 -
 lasso/xml/is_help.h                           |   65 -
 lasso/xml/is_inquiry.c                        |  116 -
 lasso/xml/is_inquiry.h                        |   70 -
 lasso/xml/is_inquiry_element.c                |  112 -
 lasso/xml/is_inquiry_element.h                |   73 -
 lasso/xml/is_interaction_request.c            |  126 -
 lasso/xml/is_interaction_request.h            |   81 -
 lasso/xml/is_interaction_response.c           |  115 -
 lasso/xml/is_interaction_response.h           |   71 -
 lasso/xml/is_interaction_statement.c          |  108 -
 lasso/xml/is_interaction_statement.h          |   70 -
 lasso/xml/is_item.c                           |  112 -
 lasso/xml/is_item.h                           |   65 -
 lasso/xml/is_parameter.c                      |  106 -
 lasso/xml/is_parameter.h                      |   66 -
 lasso/xml/is_redirect_request.c               |  104 -
 lasso/xml/is_redirect_request.h               |   68 -
 lasso/xml/is_select.c                         |  110 -
 lasso/xml/is_select.h                         |   67 -
 lasso/xml/is_text.c                           |  110 -
 lasso/xml/is_text.h                           |   65 -
 lasso/xml/is_user_interaction.c               |  123 -
 lasso/xml/is_user_interaction.h               |   76 -
 lasso/xml/sa_credentials.c                    |  103 -
 lasso/xml/sa_credentials.h                    |   67 -
 lasso/xml/sa_parameter.c                      |  112 -
 lasso/xml/sa_parameter.h                      |   67 -
 lasso/xml/sa_password_transforms.c            |  124 -
 lasso/xml/sa_password_transforms.h            |   68 -
 lasso/xml/sa_sasl_request.c                   |  130 -
 lasso/xml/sa_sasl_request.h                   |   73 -
 lasso/xml/sa_sasl_response.c                  |  167 -
 lasso/xml/sa_sasl_response.h                  |   79 -
 lasso/xml/sa_transform.c                      |  119 -
 lasso/xml/sa_transform.h                      |   70 -
 lasso/xml/saml-2.0/saml2_strings.h            |   11 -
 lasso/xml/sec_resource_access_statement.c     |  112 -
 lasso/xml/sec_resource_access_statement.h     |   69 -
 lasso/xml/soap_binding.c                      |   77 -
 lasso/xml/soap_binding.h                      |   42 -
 lasso/xml/soap_binding_consent.c              |  115 -
 lasso/xml/soap_binding_consent.h              |   71 -
 lasso/xml/soap_binding_correlation.c          |  116 -
 lasso/xml/soap_binding_correlation.h          |   74 -
 lasso/xml/soap_binding_ext_credential.c       |  113 -
 lasso/xml/soap_binding_ext_credential.h       |   77 -
 .../soap_binding_ext_credentials_context.c    |  117 -
 .../soap_binding_ext_credentials_context.h    |   81 -
 ...soap_binding_ext_service_instance_update.c |  125 -
 ...soap_binding_ext_service_instance_update.h |   83 -
 lasso/xml/soap_binding_ext_timeout.c          |  112 -
 lasso/xml/soap_binding_ext_timeout.h          |   71 -
 lasso/xml/soap_binding_processing_context.c   |  112 -
 lasso/xml/soap_binding_processing_context.h   |   71 -
 lasso/xml/soap_binding_provider.c             |  114 -
 lasso/xml/soap_binding_provider.h             |   72 -
 lasso/xml/soap_binding_usage_directive.c      |  116 -
 lasso/xml/soap_binding_usage_directive.h      |   73 -
 lasso/xml/utility_status.c                    |  120 -
 lasso/xml/utility_status.h                    |   67 -
 lasso/xml/ws/Makefile.am                      |   48 -
 lasso/xml/ws/wsa_attributed_any.c             |  114 -
 lasso/xml/ws/wsa_attributed_any.h             |   82 -
 lasso/xml/ws/wsa_attributed_qname.c           |  134 -
 lasso/xml/ws/wsa_attributed_qname.h           |   83 -
 lasso/xml/ws/wsa_attributed_unsigned_long.c   |  115 -
 lasso/xml/ws/wsa_attributed_unsigned_long.h   |   83 -
 lasso/xml/ws/wsa_attributed_uri.c             |  141 -
 lasso/xml/ws/wsa_attributed_uri.h             |   83 -
 lasso/xml/ws/wsa_endpoint_reference.c         |  133 -
 lasso/xml/ws/wsa_endpoint_reference.h         |   88 -
 lasso/xml/ws/wsa_metadata.c                   |  114 -
 lasso/xml/ws/wsa_metadata.h                   |   82 -
 lasso/xml/ws/wsa_problem_action.c             |  118 -
 lasso/xml/ws/wsa_problem_action.h             |   84 -
 lasso/xml/ws/wsa_reference_parameters.c       |  114 -
 lasso/xml/ws/wsa_reference_parameters.h       |   82 -
 lasso/xml/ws/wsa_relates_to.c                 |  138 -
 lasso/xml/ws/wsa_relates_to.h                 |   84 -
 lasso/xml/ws/wsse_embedded.c                  |  119 -
 lasso/xml/ws/wsse_embedded.h                  |   81 -
 lasso/xml/ws/wsse_reference.c                 |  119 -
 lasso/xml/ws/wsse_reference.h                 |   82 -
 lasso/xml/ws/wsse_security_header.c           |  137 -
 lasso/xml/ws/wsse_security_header.h           |   82 -
 lasso/xml/ws/wsse_security_token_reference.c  |  121 -
 lasso/xml/ws/wsse_security_token_reference.h  |   83 -
 lasso/xml/ws/wsse_transformation_parameters.c |  122 -
 lasso/xml/ws/wsse_transformation_parameters.h |   81 -
 lasso/xml/ws/wsse_username_token.c            |  371 --
 lasso/xml/ws/wsse_username_token.h            |   88 -
 lasso/xml/ws/wsu_timestamp.c                  |  127 -
 lasso/xml/ws/wsu_timestamp.h                  |   84 -
 lasso/xml/ws/xml_ws.h                         |   44 -
 lasso/xml/xml.c                               |  135 +-
 lasso/xml/xml.h                               |    8 -
 lasso/xml/xml_idwsf.h                         |   86 -
 tests/Makefile.am                             |    8 +-
 tests/basic_tests.c                           | 1147 +-----
 tests/idwsf2_tests.c                          |  276 --
 tests/tests.c                                 |    6 -
 tools/api.py                                  |    1 -
 tools/generate_idwsf2_classes.py              | 1813 ---------
 win32/msvc/lasso_config.h.in                  |    8 -
 513 files changed, 167 insertions(+), 66728 deletions(-)
 delete mode 100755 bindings/python/tests/idwsf2_tests.py
 create mode 100644 docs/reference/lasso/lasso.types
 delete mode 100644 docs/reference/lasso/lasso.types.in
 delete mode 100644 lasso/id-wsf-2.0/Makefile.am
 delete mode 100644 lasso/id-wsf-2.0/data_service.c
 delete mode 100644 lasso/id-wsf-2.0/data_service.h
 delete mode 100644 lasso/id-wsf-2.0/discovery.c
 delete mode 100644 lasso/id-wsf-2.0/discovery.h
 delete mode 100644 lasso/id-wsf-2.0/id_wsf_2.h
 delete mode 100644 lasso/id-wsf-2.0/identity.c
 delete mode 100644 lasso/id-wsf-2.0/identity.h
 delete mode 100644 lasso/id-wsf-2.0/idwsf2_helper.c
 delete mode 100644 lasso/id-wsf-2.0/idwsf2_helper.h
 delete mode 100644 lasso/id-wsf-2.0/private.h
 delete mode 100644 lasso/id-wsf-2.0/profile.c
 delete mode 100644 lasso/id-wsf-2.0/profile.h
 delete mode 100644 lasso/id-wsf-2.0/saml2_login.c
 delete mode 100644 lasso/id-wsf-2.0/saml2_login.h
 delete mode 100644 lasso/id-wsf-2.0/server.c
 delete mode 100644 lasso/id-wsf-2.0/server.h
 delete mode 100644 lasso/id-wsf-2.0/serverprivate.h
 delete mode 100644 lasso/id-wsf-2.0/session.c
 delete mode 100644 lasso/id-wsf-2.0/session.h
 delete mode 100644 lasso/id-wsf-2.0/sessionprivate.h
 delete mode 100644 lasso/id-wsf-2.0/soap_binding.c
 delete mode 100644 lasso/id-wsf-2.0/soap_binding.h
 delete mode 100644 lasso/id-wsf/Makefile.am
 delete mode 100644 lasso/id-wsf/authentication.c
 delete mode 100644 lasso/id-wsf/authentication.h
 delete mode 100644 lasso/id-wsf/data_service.c
 delete mode 100644 lasso/id-wsf/data_service.h
 delete mode 100644 lasso/id-wsf/discovery.c
 delete mode 100644 lasso/id-wsf/discovery.h
 delete mode 100644 lasso/id-wsf/id_ff_extensions.c
 delete mode 100644 lasso/id-wsf/id_ff_extensions.h
 delete mode 100644 lasso/id-wsf/id_ff_extensions_private.h
 delete mode 100644 lasso/id-wsf/id_wsf.h
 delete mode 100644 lasso/id-wsf/interaction_profile_service.c
 delete mode 100644 lasso/id-wsf/interaction_profile_service.h
 delete mode 100644 lasso/id-wsf/personal_profile_service.c
 delete mode 100644 lasso/id-wsf/personal_profile_service.h
 delete mode 100644 lasso/id-wsf/wsf_profile.c
 delete mode 100644 lasso/id-wsf/wsf_profile.h
 delete mode 100644 lasso/id-wsf/wsf_profile_private.h
 delete mode 100644 lasso/id-wsf/wsf_utils.c
 delete mode 100644 lasso/id-wsf/wsf_utils.h
 delete mode 100644 lasso/xml/disco_authenticate_requester.c
 delete mode 100644 lasso/xml/disco_authenticate_requester.h
 delete mode 100644 lasso/xml/disco_authenticate_session_context.c
 delete mode 100644 lasso/xml/disco_authenticate_session_context.h
 delete mode 100644 lasso/xml/disco_authorize_requester.c
 delete mode 100644 lasso/xml/disco_authorize_requester.h
 delete mode 100644 lasso/xml/disco_credentials.c
 delete mode 100644 lasso/xml/disco_credentials.h
 delete mode 100644 lasso/xml/disco_description.c
 delete mode 100644 lasso/xml/disco_description.h
 delete mode 100644 lasso/xml/disco_encrypt_resource_id.c
 delete mode 100644 lasso/xml/disco_encrypt_resource_id.h
 delete mode 100644 lasso/xml/disco_encrypted_resource_id.c
 delete mode 100644 lasso/xml/disco_encrypted_resource_id.h
 delete mode 100644 lasso/xml/disco_generate_bearer_token.c
 delete mode 100644 lasso/xml/disco_generate_bearer_token.h
 delete mode 100644 lasso/xml/disco_insert_entry.c
 delete mode 100644 lasso/xml/disco_insert_entry.h
 delete mode 100644 lasso/xml/disco_modify.c
 delete mode 100644 lasso/xml/disco_modify.h
 delete mode 100644 lasso/xml/disco_modify_response.c
 delete mode 100644 lasso/xml/disco_modify_response.h
 delete mode 100644 lasso/xml/disco_options.c
 delete mode 100644 lasso/xml/disco_options.h
 delete mode 100644 lasso/xml/disco_query.c
 delete mode 100644 lasso/xml/disco_query.h
 delete mode 100644 lasso/xml/disco_query_response.c
 delete mode 100644 lasso/xml/disco_query_response.h
 delete mode 100644 lasso/xml/disco_remove_entry.c
 delete mode 100644 lasso/xml/disco_remove_entry.h
 delete mode 100644 lasso/xml/disco_requested_service_type.c
 delete mode 100644 lasso/xml/disco_requested_service_type.h
 delete mode 100644 lasso/xml/disco_resource_id.c
 delete mode 100644 lasso/xml/disco_resource_id.h
 delete mode 100644 lasso/xml/disco_resource_offering.c
 delete mode 100644 lasso/xml/disco_resource_offering.h
 delete mode 100644 lasso/xml/disco_send_single_logout.c
 delete mode 100644 lasso/xml/disco_send_single_logout.h
 delete mode 100644 lasso/xml/disco_service_instance.c
 delete mode 100644 lasso/xml/disco_service_instance.h
 delete mode 100644 lasso/xml/dst_data.c
 delete mode 100644 lasso/xml/dst_data.h
 delete mode 100644 lasso/xml/dst_modification.c
 delete mode 100644 lasso/xml/dst_modification.h
 delete mode 100644 lasso/xml/dst_modify.c
 delete mode 100644 lasso/xml/dst_modify.h
 delete mode 100644 lasso/xml/dst_modify_response.c
 delete mode 100644 lasso/xml/dst_modify_response.h
 delete mode 100644 lasso/xml/dst_new_data.c
 delete mode 100644 lasso/xml/dst_new_data.h
 delete mode 100644 lasso/xml/dst_query.c
 delete mode 100644 lasso/xml/dst_query.h
 delete mode 100644 lasso/xml/dst_query_item.c
 delete mode 100644 lasso/xml/dst_query_item.h
 delete mode 100644 lasso/xml/dst_query_response.c
 delete mode 100644 lasso/xml/dst_query_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/Makefile.am
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_abstract.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_abstract.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_endpoint_context.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_endpoint_context.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_keys.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_keys.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_options.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_options.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_provider_id.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_provider_id.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_query.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_query.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_query_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_query_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_requested_service.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_requested_service.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_security_context.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_security_context.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_service_context.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_service_context.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_service_type.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_service_type.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_add.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_add.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_add_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_add_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_delete.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_delete.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_delete_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_delete_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_query.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_query.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_query_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_association_query_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_delete.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_delete.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_delete_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_delete_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_query.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_query.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_query_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_register.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_register.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_register_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_register_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_replace.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_replace.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_replace_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_md_replace_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_metadata.c
 delete mode 100644 lasso/xml/id-wsf-2.0/disco_svc_metadata.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_data_response_base.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_data_response_base.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_delete_item_base.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_delete_item_base.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_delete_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_delete_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_result_query_base.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_result_query_base.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_test_item_base.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dst_test_item_base.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_app_data.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_app_data.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_create.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_create.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_create_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_create_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_create_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_create_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_data.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_data.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_data_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_data_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_delete.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_delete.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_delete_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_delete_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_delete_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_delete_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_item_data.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_item_data.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_modify.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_modify.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_modify_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_modify_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_modify_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_modify_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_query.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_query.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_query_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_query_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_query_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_query_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_result_query.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_result_query.h
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_test_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/dstref_test_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/idwsf2_strings.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ims_identity_mapping_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ims_identity_mapping_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ims_identity_mapping_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ims_identity_mapping_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ims_mapping_input.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ims_mapping_input.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ims_mapping_output.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ims_mapping_output.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_help.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_help.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_inquiry.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_inquiry.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_inquiry_element.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_inquiry_element.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_interaction_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_interaction_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_interaction_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_interaction_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_interaction_statement.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_interaction_statement.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_parameter.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_parameter.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_select.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_select.h
 delete mode 100644 lasso/xml/id-wsf-2.0/is_text.c
 delete mode 100644 lasso/xml/id-wsf-2.0/is_text.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_collection_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_collection_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_collection_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_collection_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_entity_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_entity_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_entity_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_entity_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_known_entity_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_known_entity_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_known_entity_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_to_collection_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_add_to_collection_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_get_object_info_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_get_object_info_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_get_object_info_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_get_object_info_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_item_data.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_item_data.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_list_members_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_list_members_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_list_members_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_list_members_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_notification.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_notification.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_notify.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_notify.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_object.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_object.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_query_objects_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_query_objects_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_query_objects_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_query_objects_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_remove_collection_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_remove_collection_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_remove_entity_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_remove_entity_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_remove_from_collection_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_remove_from_collection_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_request_abstract.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_request_abstract.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_resolve_identifier_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_resolve_identifier_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_resolve_identifier_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_resolve_identifier_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_resolve_input.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_resolve_input.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_response_abstract.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_response_abstract.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_set_object_info_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_set_object_info_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_test_membership_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_test_membership_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_test_membership_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/ps_test_membership_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_consent.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_consent.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_credentials_context.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_credentials_context.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_endpoint_update.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_endpoint_update.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_redirect_request.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_redirect_request.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_sender.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_sender.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_target_identity.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_target_identity.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_timeout.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_timeout.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_usage_directive.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_usage_directive.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sb2_user_interaction_header.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sbf_framework.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sbf_framework.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sec_token.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sec_token.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sec_token_policy.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sec_token_policy.h
 delete mode 100644 lasso/xml/id-wsf-2.0/sec_transited_provider_path.c
 delete mode 100644 lasso/xml/id-wsf-2.0/sec_transited_provider_path.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subs_notification.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subs_notification.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subs_notify_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subs_notify_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subs_ref_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subs_ref_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subs_subscription.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subs_subscription.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_app_data.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_app_data.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_create.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_create.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_create_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_create_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_create_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_create_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_data.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_data.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_data_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_data_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_delete.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_delete.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_delete_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_delete_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_delete_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_delete_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_item_data.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_item_data.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_modify.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_modify.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_modify_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_modify_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_modify_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_modify_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_notification.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_notification.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_notify.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_notify.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_notify_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_notify_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_query.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_query.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_query_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_query_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_query_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_query_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_result_query.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_result_query.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_subscription.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_subscription.h
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_test_item.c
 delete mode 100644 lasso/xml/id-wsf-2.0/subsref_test_item.h
 delete mode 100644 lasso/xml/id-wsf-2.0/util_empty.c
 delete mode 100644 lasso/xml/id-wsf-2.0/util_empty.h
 delete mode 100644 lasso/xml/id-wsf-2.0/util_extension.c
 delete mode 100644 lasso/xml/id-wsf-2.0/util_extension.h
 delete mode 100644 lasso/xml/id-wsf-2.0/util_response.c
 delete mode 100644 lasso/xml/id-wsf-2.0/util_response.h
 delete mode 100644 lasso/xml/id-wsf-2.0/util_status.c
 delete mode 100644 lasso/xml/id-wsf-2.0/util_status.h
 delete mode 100644 lasso/xml/id-wsf-2.0/xml_idwsf2.h
 delete mode 100644 lasso/xml/idwsf_strings.h
 delete mode 100644 lasso/xml/is_help.c
 delete mode 100644 lasso/xml/is_help.h
 delete mode 100644 lasso/xml/is_inquiry.c
 delete mode 100644 lasso/xml/is_inquiry.h
 delete mode 100644 lasso/xml/is_inquiry_element.c
 delete mode 100644 lasso/xml/is_inquiry_element.h
 delete mode 100644 lasso/xml/is_interaction_request.c
 delete mode 100644 lasso/xml/is_interaction_request.h
 delete mode 100644 lasso/xml/is_interaction_response.c
 delete mode 100644 lasso/xml/is_interaction_response.h
 delete mode 100644 lasso/xml/is_interaction_statement.c
 delete mode 100644 lasso/xml/is_interaction_statement.h
 delete mode 100644 lasso/xml/is_item.c
 delete mode 100644 lasso/xml/is_item.h
 delete mode 100644 lasso/xml/is_parameter.c
 delete mode 100644 lasso/xml/is_parameter.h
 delete mode 100644 lasso/xml/is_redirect_request.c
 delete mode 100644 lasso/xml/is_redirect_request.h
 delete mode 100644 lasso/xml/is_select.c
 delete mode 100644 lasso/xml/is_select.h
 delete mode 100644 lasso/xml/is_text.c
 delete mode 100644 lasso/xml/is_text.h
 delete mode 100644 lasso/xml/is_user_interaction.c
 delete mode 100644 lasso/xml/is_user_interaction.h
 delete mode 100644 lasso/xml/sa_credentials.c
 delete mode 100644 lasso/xml/sa_credentials.h
 delete mode 100644 lasso/xml/sa_parameter.c
 delete mode 100644 lasso/xml/sa_parameter.h
 delete mode 100644 lasso/xml/sa_password_transforms.c
 delete mode 100644 lasso/xml/sa_password_transforms.h
 delete mode 100644 lasso/xml/sa_sasl_request.c
 delete mode 100644 lasso/xml/sa_sasl_request.h
 delete mode 100644 lasso/xml/sa_sasl_response.c
 delete mode 100644 lasso/xml/sa_sasl_response.h
 delete mode 100644 lasso/xml/sa_transform.c
 delete mode 100644 lasso/xml/sa_transform.h
 delete mode 100644 lasso/xml/sec_resource_access_statement.c
 delete mode 100644 lasso/xml/sec_resource_access_statement.h
 delete mode 100644 lasso/xml/soap_binding.c
 delete mode 100644 lasso/xml/soap_binding.h
 delete mode 100644 lasso/xml/soap_binding_consent.c
 delete mode 100644 lasso/xml/soap_binding_consent.h
 delete mode 100644 lasso/xml/soap_binding_correlation.c
 delete mode 100644 lasso/xml/soap_binding_correlation.h
 delete mode 100644 lasso/xml/soap_binding_ext_credential.c
 delete mode 100644 lasso/xml/soap_binding_ext_credential.h
 delete mode 100644 lasso/xml/soap_binding_ext_credentials_context.c
 delete mode 100644 lasso/xml/soap_binding_ext_credentials_context.h
 delete mode 100644 lasso/xml/soap_binding_ext_service_instance_update.c
 delete mode 100644 lasso/xml/soap_binding_ext_service_instance_update.h
 delete mode 100644 lasso/xml/soap_binding_ext_timeout.c
 delete mode 100644 lasso/xml/soap_binding_ext_timeout.h
 delete mode 100644 lasso/xml/soap_binding_processing_context.c
 delete mode 100644 lasso/xml/soap_binding_processing_context.h
 delete mode 100644 lasso/xml/soap_binding_provider.c
 delete mode 100644 lasso/xml/soap_binding_provider.h
 delete mode 100644 lasso/xml/soap_binding_usage_directive.c
 delete mode 100644 lasso/xml/soap_binding_usage_directive.h
 delete mode 100644 lasso/xml/utility_status.c
 delete mode 100644 lasso/xml/utility_status.h
 delete mode 100644 lasso/xml/ws/Makefile.am
 delete mode 100644 lasso/xml/ws/wsa_attributed_any.c
 delete mode 100644 lasso/xml/ws/wsa_attributed_any.h
 delete mode 100644 lasso/xml/ws/wsa_attributed_qname.c
 delete mode 100644 lasso/xml/ws/wsa_attributed_qname.h
 delete mode 100644 lasso/xml/ws/wsa_attributed_unsigned_long.c
 delete mode 100644 lasso/xml/ws/wsa_attributed_unsigned_long.h
 delete mode 100644 lasso/xml/ws/wsa_attributed_uri.c
 delete mode 100644 lasso/xml/ws/wsa_attributed_uri.h
 delete mode 100644 lasso/xml/ws/wsa_endpoint_reference.c
 delete mode 100644 lasso/xml/ws/wsa_endpoint_reference.h
 delete mode 100644 lasso/xml/ws/wsa_metadata.c
 delete mode 100644 lasso/xml/ws/wsa_metadata.h
 delete mode 100644 lasso/xml/ws/wsa_problem_action.c
 delete mode 100644 lasso/xml/ws/wsa_problem_action.h
 delete mode 100644 lasso/xml/ws/wsa_reference_parameters.c
 delete mode 100644 lasso/xml/ws/wsa_reference_parameters.h
 delete mode 100644 lasso/xml/ws/wsa_relates_to.c
 delete mode 100644 lasso/xml/ws/wsa_relates_to.h
 delete mode 100644 lasso/xml/ws/wsse_embedded.c
 delete mode 100644 lasso/xml/ws/wsse_embedded.h
 delete mode 100644 lasso/xml/ws/wsse_reference.c
 delete mode 100644 lasso/xml/ws/wsse_reference.h
 delete mode 100644 lasso/xml/ws/wsse_security_header.c
 delete mode 100644 lasso/xml/ws/wsse_security_header.h
 delete mode 100644 lasso/xml/ws/wsse_security_token_reference.c
 delete mode 100644 lasso/xml/ws/wsse_security_token_reference.h
 delete mode 100644 lasso/xml/ws/wsse_transformation_parameters.c
 delete mode 100644 lasso/xml/ws/wsse_transformation_parameters.h
 delete mode 100644 lasso/xml/ws/wsse_username_token.c
 delete mode 100644 lasso/xml/ws/wsse_username_token.h
 delete mode 100644 lasso/xml/ws/wsu_timestamp.c
 delete mode 100644 lasso/xml/ws/wsu_timestamp.h
 delete mode 100644 lasso/xml/ws/xml_ws.h
 delete mode 100644 lasso/xml/xml_idwsf.h
 delete mode 100644 tests/idwsf2_tests.c
 delete mode 100644 tools/generate_idwsf2_classes.py
bindings/bindings.py
268 268
                skip = func.attrib.get('skip')
269 269
                if skip == 'true':
270 270
                    self.skip = True
271
                elif skip == 'unless-id-wsf' and not binding.options.idwsf:
272
                    self.skip = True
273 271
                elif binding.options.language in skip.split(','):
274 272
                    self.skip = True
275 273
            if func.attrib.get('return_type_qualifier'):
......
558 556

  
559 557

  
560 558
def parse_headers(srcdir):
561
    wsf_prefixes = ['disco_', 'dst_', 'is_', 'profile_service_', 'discovery_',
562
            'wsf_', 'interaction_', 'utility_', 'sa_', 'authentication_',
563
            'wsse_', 'sec_', 'idwsf2_', 'wsf2_', 'wsa_', 'wsu', 'soap_binding']
564

  
565 559
    srcdir = os.path.abspath(srcdir)
566 560
    parentdir = os.path.dirname(srcdir)
567 561

  
568
    exclusion = ('xml_idff.h', 'xml_idwsf.h', 'xml_saml2.h', \
569
            'xml_idwsf2.h', 'xml_soap11.h',
570
            'lasso_config.h', 'saml2_xsd.h' )
571
    if not binding.options.idwsf:
572
        exclusion += ( 'idwsf_strings.h', )
562
    exclusion = ('xml_idff.h', 'xml_saml2.h', 'xml_soap11.h', 'lasso_config.h', 'saml2_xsd.h' )
573 563
    for base, dirnames, filenames in os.walk(srcdir):
574 564
        dirnames.sort()
575 565
        filenames.sort()
......
580 570
        if not 'Makefile.am' in filenames:
581 571
            # not a source dir
582 572
            continue
583
        if not binding.options.idwsf and (bname == 'id-wsf' or \
584
                bname == 'id-wsf-2.0' or bname == 'ws'):
585
            # ignore ID-WSF
586
            continue
587 573
        makefile_am = open(os.path.join(base, 'Makefile.am')).read()
588 574
        filenames = [x for x in filenames if x.endswith('.h') if x in makefile_am]
589 575
        for filename in filenames:
......
591 577
                continue
592 578
            if 'private' in filename:
593 579
                continue
594
            if not binding.options.idwsf:
595
                if True in (filename.startswith(wsf_prefix) for wsf_prefix in wsf_prefixes):
596
                    continue
597 580
            header_path = os.path.join(base, filename)
598 581
            header_relpath = os.path.relpath(header_path, parentdir)
599 582

  
600 583
            binding.headers.append(header_relpath)
601 584
            parse_header(header_path)
602
    binding.constants.append(('b', 'LASSO_WSF_ENABLED'))
603 585

  
604 586
def main():
605 587
    global binding
......
607 589
    parser = OptionParser()
608 590
    parser.add_option('-l', '--language', dest = 'language')
609 591
    parser.add_option('-s', '--src-dir', dest = 'srcdir', default = '../lasso/')
610
    parser.add_option('--enable-id-wsf', dest = 'idwsf', action = 'store_true')
611 592
    parser.add_option('--enable-exception-docs', dest= 'exception_doc', action = 'store_true')
612 593

  
613 594
    options, args = parser.parse_args()
bindings/java/Makefile.am
28 28
java_extension_LTLIBRARIES = libjnilasso.la
29 29
java_extensiondir = ${libdir}/java
30 30

  
31
if WSF_ENABLED
32
EXTRA_ARGS = --enable-id-wsf
33
endif
34

  
35 31
java_lasso_source_files := $(shell $(PYTHON) $(top_srcdir)/bindings/bindings.py -l java-list --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) )
36 32

  
37 33
lasso_jardir=$(prefix)/share/java
bindings/overrides.xml
34 34
  	rename="lasso_profile_has_dirty_identity"/>
35 35
  <func name="lasso_profile_is_session_dirty"
36 36
  	rename="lasso_profile_has_dirty_session"/>
37
  <!-- LassoWsfProfile -->
38
  <func name="lasso_wsf_profile_get_identity" return_owner="false" />
39
  <func name="lasso_wsf_profile_get_session" return_owner="false" />
40
  <func name="lasso_wsf_profile_get_remote_provider" skip="java,perl"/>
41
  <func name="lasso_data_service_get_answer" skip="java,perl"/>
42
  <func name="lasso_data_service_get_query_item" skip="java,perl"/>
43
  <func name="lasso_data_service_add_modification" skip="java,perl"/>
44
  <func name="lasso_data_service_get_answers" skip="java,perl"/>
45
  <func name="lasso_data_service_get_answers_by_select" skip="java,perl"/>
46
  <func name="lasso_data_service_get_answers_by_item_id" skip="java,perl"/>
47
  <func name="lasso_saml2_encrypted_element_decrypt" skip="true"/>
48 37
  <!-- LassoIdentity -->
49 38
  <func name="lasso_identity_get_federation" return_owner="false" />
50 39
  <func name="lasso_identity_get_svc_md_ids" return_type_qualifier="char*"/>
......
164 153
    <param name="service_type" optional="true"/>
165 154
  </func>
166 155
  <func name="lasso_discovery_get_description_auto" return_owner="false"/>
167
  <func name="lasso_server_get_service" skip="unless-id-wsf" />
168
  <func name="lasso_login_set_encryptedResourceId" skip="unless-id-wsf"/>
169 156
  <func name="lasso_node_new_from_dump" skip="java"/>
170 157
  <func name="lasso_node_new_from_soap" skip="java"/>
171 158
  <func name="lasso_node_new_from_xmlNode" skip="java"/>
......
175 162
  <func name="lasso_server_load_metadata" skip="perl,java" />
176 163
  <!-- IdWsf -->
177 164
  <arg name="abstract" rename="abstract_" language="java"/>
178
  <func name="lasso_personal_profile_service_new_full" rename="lasso_personal_profile_server_new_personal_profile_service_full"/>
179
  <func name="lasso_wsf_profile_new_full" rename="lasso_wsf_profile_wsf_profile_new_full"/>
180
  <func name="lasso_wsa_endpoint_reference_get_target_identity_token" skip="true"/>
181
  <func name="lasso_wsa_endpoint_reference_get_security_token" skip="true"/>
182
  <func name="lasso_wsa_endpoint_reference_associate_service_to_type" skip="true"/>
183
  <func name="lasso_authentication_get_type" skip="true"/>
184
  <func name="lasso_authentication_get_type" skip="true"/>
185
  <func name="lasso_authentication_new" skip="true"/>
186
  <func name="lasso_authentication_destroy" skip="true"/>
187
  <func name="lasso_authentication_client_start" skip="true"/>
188
  <func name="lasso_authentication_client_step" skip="true"/>
189
  <func name="lasso_authentication_get_mechanism_list" skip="true"/>
190
  <func name="lasso_authentication_init_request" skip="true"/>
191
  <func name="lasso_authentication_process_request_msg" skip="true"/>
192
  <func name="lasso_authentication_process_response_msg" skip="true"/>
193
  <func name="lasso_authentication_server_start" skip="true"/>
194
  <func name="lasso_authentication_server_step" skip="true"/>
195
  <struct name="LassoAuthentication" skip="true"/>
196
  <func name="lasso_wsse_username_token_derive_key" skip="true"/>
197
  <func name="lasso_wsa_endpoint_reference_add_security_token" skip="true"/>
198 165
  <func name="lasso_log_set_handler" skip="true"/>
199 166
  <func name="lasso_log_remove_handler" skip="true"/>
200 167
  <func name="lasso_key_new_for_signature_from_memory" skip="true"/>
......
216 183
    <category name="Logout" parent="Profile"/>
217 184
    <category name="Defederation" parent="Profile"/>
218 185
    <category name="NameIdentifierMapping" parent="Profile"/>
219
    <category name="WsfProfile" parent="Profile"/>
220
    <category name="Discovery" parent="WsfProfile"/>
221
    <category name="DataService" parent="WsfProfile"/>
222
    <category name="Dst" parent="WsfProfile"/>
223 186
  </exception>
224 187
</overrides>
bindings/perl/Makefile.am
30 30

  
31 31
EXTRA_DIST=$(TOCOPY) typemap-in typemap-out lang.py __init__.py test.sh
32 32

  
33
if WSF_ENABLED
34
EXTRA_ARGS = --enable-id-wsf
35
endif
36

  
37 33
# Copy if out of a build
38 34
Makefile.perl: $(srcdir)/Makefile.PL Lasso.xs Lasso.pm
39 35
	$(AM_V_GEN) if [ "$(srcdir)" != "$(builddir)" ]; then \
bindings/perl/lang.py
208 208
                    self.xs.pn('sv_setiv(ct, %s);' % name)
209 209
                elif type == 's':
210 210
                    self.xs.pn('sv_setpv(ct, %s);' % name)
211
                elif type == 'b': # only one case LASSO_WSF_ENABLED
211
                elif type == 'b':
212 212
                    self.xs.unindent()
213 213
                    self.xs.pn('''#ifdef %s
214 214
        sv_setiv(ct, 1);
......
224 224
                    self.xs.pn('ct = newSViv(%s);' % name)
225 225
                elif type == 's':
226 226
                    self.xs.pn('ct = newSVpv((char*)%s, 0);' % name)
227
                elif type == 'b': # only one case LASSO_WSF_ENABLED
227
                elif type == 'b':
228 228
                    self.xs.unindent()
229 229
                    self.xs.pn('''#ifdef %s
230 230
        ct = newSViv(1);
bindings/php5/Makefile.am
24 24

  
25 25
BUILT_SOURCES = _lasso.c
26 26

  
27
if WSF_ENABLED
28
EXTRA_ARGS = --enable-id-wsf
29
endif
30

  
31

  
32 27
lasso.php _lasso.c: lang.py wrapper_source.py wrapper_header.py wrapper_source_top.c php_code.py ../overrides.xml
33 28
	$(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l php5 --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS)
34 29

  
bindings/php7/Makefile.am
24 24

  
25 25
BUILT_SOURCES = _lasso.c
26 26

  
27
if WSF_ENABLED
28
EXTRA_ARGS = --enable-id-wsf
29
endif
30

  
31

  
32 27
lasso.php _lasso.c: lang.py wrapper_source.py wrapper_header.py wrapper_source_top.c php_code.py ../overrides.xml
33 28
	$(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l php7 --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS)
34 29

  
bindings/python/Makefile.am
32 32

  
33 33
EXTRA_DIST=lang.py wrapper_bottom.c wrapper_top.c __init__.py examples
34 34

  
35
if WSF_ENABLED
36
EXTRA_ARGS = --enable-id-wsf
37
endif
38

  
39 35
lasso.py _lasso.c: lang.py wrapper_top.c wrapper_bottom.c ../bindings.py
40 36
	$(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l python --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS)
41 37

  
bindings/python/lang.py
270 270

  
271 271
# backward compatibility with the SWIG binding
272 272

  
273
WSF_SUPPORT = WSF_ENABLED
274

  
275 273
Profile.isIdentityDirty = property(Profile.hasDirtyIdentity)
276 274
Profile.isSessionDirty = property(Profile.hasDirtySession)
277 275

  
......
303 301
NodeList = list
304 302
StringList = list
305 303
StringDict = dict
306
registerIdWsf2DstService = registerIdwsf2DstService
307

  
308
if WSF_SUPPORT:
309
    DiscoDescription_newWithBriefSoapHttpDescription = DiscoDescription.newWithBriefSoapHttpDescription
310
    Discovery.buildRequestMsg = Discovery.buildSoapRequestMsg
311
    InteractionProfileService.buildRequestMsg = InteractionProfileService.buildSoapRequestMsg
312
    InteractionProfileService.buildResponseMsg = InteractionProfileService.buildSoapResponseMsg
313
    DataService.buildRequestMsg = DataService.buildSoapRequestMsg
314
    DiscoModifyResponse.newEntryIds = DiscoModifyResponse.newEntryIDs
315 304
''', file=fd)
316 305

  
317 306
    def generate_constants(self, fd):
bindings/python/tests/Makefile.am
7 7
TESTS += profiles_tests.py binding_tests.py
8 8
endif
9 9

  
10
if WSF_ENABLED
11
TESTS += idwsf1_tests.py idwsf2_tests.py
12
endif
13

  
14 10
TEST_EXTENSIONS = .py
15 11
PY_LOG_COMPILER = $(PYTHON)
16 12

  
bindings/python/tests/idwsf2_tests.py
1
#! /usr/bin/env python
2
# -*- coding: utf-8 -*-
3
#
4
# $Id: idwsf2_tests.py 3254 2007-06-05 21:23:57Z dlaniel $
5
#
6
# Python unit tests for Lasso library
7
#
8
# Copyright (C) 2004-2007 Entr'ouvert
9
# http://lasso.entrouvert.org
10
#
11
# Authors: See AUTHORS file in top-level directory.
12
#
13
# This program is free software; you can redistribute it and/or modify
14
# it under the terms of the GNU General Public License as published by
15
# the Free Software Foundation; either version 2 of the License, or
16
# (at your option) any later version.
17
#
18
# This program is distributed in the hope that it will be useful,
19
# but WITHOUT ANY WARRANTY; without even the implied warranty of
20
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21
# GNU General Public License for more details.
22
#
23
# You should have received a copy of the GNU General Public License
24
# along with this program; if not, see <http://www.gnu.org/licenses/>.
25

  
26

  
27
import os
28
import unittest
29
import sys
30
from six import StringIO
31
import logging
32

  
33
logging.basicConfig()
34

  
35
if not '..' in sys.path:
36
    sys.path.insert(0, '..')
37
if not '../.libs' in sys.path:
38
    sys.path.insert(0, '../.libs')
39

  
40
import lasso
41

  
42
try:
43
    import lxml.etree as ET
44
except ImportError:
45
    try:
46
        import elementtree.ElementTree as ET
47
    except ImportError:
48
        import xml.etree.ElementTree as ET
49

  
50
try:
51
    dataDir
52
except NameError:
53
    dataDir = os.path.join(os.environ['TOP_SRCDIR'], 'tests', 'data')
54

  
55
idpSoapEndpoint = 'http://idp1/soapEndpoint'
56
spSoapEndpoint = 'http://sp1/soapEndpoint'
57
spInteractionUrl = 'http://sp1/askMeAQuestion'
58

  
59
class IdWsf2TestCase(unittest.TestCase):
60
    def getWspServer(self):
61
        wsp_metadata = os.path.join(dataDir, 'sp5-saml2/metadata.xml')
62
        wsp_private_key = os.path.join(dataDir, 'sp5-saml2/private-key.pem')
63
        idp_metadata = os.path.join(dataDir, 'idp5-saml2/metadata.xml')
64

  
65
        server = lasso.Server(wsp_metadata, wsp_private_key, None, None)
66
        server.role = lasso.PROVIDER_ROLE_SP
67
        server.addProvider(lasso.PROVIDER_ROLE_IDP, idp_metadata, None, None)
68
        server.setEncryptionPrivateKey(wsp_private_key);
69

  
70
        return server;
71

  
72
    def getWscServer(self):
73
        wsc_metadata = os.path.join(dataDir, 'sp6-saml2/metadata.xml')
74
        wsc_private_key = os.path.join(dataDir, 'sp6-saml2/private-key.pem')
75
        idp_metadata = os.path.join(dataDir, 'idp5-saml2/metadata.xml')
76

  
77
        server = lasso.Server(wsc_metadata, wsc_private_key, None, None)
78
        server.role = lasso.PROVIDER_ROLE_SP
79
        server.addProvider(lasso.PROVIDER_ROLE_IDP, idp_metadata, None, None)
80

  
81
        return server;
82

  
83
    def getIdpServer(self):
84
        if hasattr(self, 'idp_server_dump') and self.idp_server_dump is not None:
85
            server = lasso.Server.newFromDump(self.idp_server_dump)
86
            server.role = lasso.PROVIDER_ROLE_IDP
87
        else:
88
            idp_metadata = os.path.join(dataDir, 'idp5-saml2/metadata.xml')
89
            idp_private_key = os.path.join(dataDir, 'idp5-saml2/private-key.pem')
90
            wsp_metadata = os.path.join(dataDir, 'sp5-saml2/metadata.xml')
91
            wsc_metadata = os.path.join(dataDir, 'sp6-saml2/metadata.xml')
92

  
93
            server = lasso.Server(idp_metadata, idp_private_key, None, None)
94
            server.role = lasso.PROVIDER_ROLE_IDP
95
            server.addProvider(lasso.PROVIDER_ROLE_SP, wsp_metadata, None, None)
96
            server.getProvider(server.providerIds[0]).setEncryptionMode(lasso.ENCRYPTION_MODE_NAMEID);
97
            server.addProvider(lasso.PROVIDER_ROLE_SP, wsc_metadata, None, None)
98
            self.idp_server_dump = server.dump()
99

  
100
        return server
101

  
102
    def query(self, wsc, idp, idp_identity_dump, wsc_session_dump, uid, federations, services_map, service_associations, provider_ids = None, service_types = None, options = None, actions = None):
103
        session = lasso.Session.newFromDump(wsc_session_dump)
104
        assertion = session.getAssertion(idp.providerId)
105
        self.failUnless(assertion is not None)
106
        epr = assertion.idwsf2GetDiscoveryBootstrapEpr()
107
        self.failUnless(epr is not None)
108
        wsc_disco = lasso.IdWsf2Discovery(wsc)
109
        wsc_disco.setEpr(epr)
110
        wsc_disco.initQuery()
111
        wsc_disco.addRequestedService(service_types = service_types, provider_ids = provider_ids, options = options, actions = actions)
112
        wsc_disco.buildRequestMsg()
113
        idp_disco = lasso.IdWsf2Discovery(idp)
114
        idp_disco.setIdentityFromDump(idp_identity_dump)
115
        idp_disco.processRequestMsg(wsc_disco.msgBody)
116
        f = self.nid2tuple(idp_disco.getNameIdentifier())
117
        uid = federations[f]
118
        for id in service_associations[uid]:
119
            idp_disco.addServiceMetadata(services_map[id])
120
        idp_disco.validateRequest()
121
        idp_disco.buildResponseMsg()
122
        wsc_disco.processResponseMsg(idp_disco.msgBody)
123
        return wsc_disco.endpointReferences
124

  
125

  
126

  
127
    def metadataRegister(self, wsp, idp, session_dump, abstract = None, address = None, provider_id = None, service_types = None, services_map = None):
128
        session = lasso.Session.newFromDump(session_dump)
129
        assertion = session.getAssertion(idp.providerId)
130
        self.failUnless(assertion is not None)
131
        epr = assertion.idwsf2GetDiscoveryBootstrapEpr()
132
        self.failUnless(epr is not None)
133
        wsp_disco = lasso.IdWsf2Discovery(wsp)
134
        wsp_disco.setEpr(epr)
135
        abstract = 'Personal Profile service'
136
        self.failUnless(abstract is not None)
137
        self.failUnless(address is not None)
138
        self.failUnless(service_types is not None)
139
        self.failUnless(isinstance(services_map, dict))
140
        wsp_disco.initMetadataRegister()
141
        if not provider_id:
142
            provider_id = wsp.providerId
143
        wsp_disco.addSimpleServiceMetadata(
144
                service_types = service_types,
145
                abstract = abstract, provider_id = provider_id,
146
                address = address, 
147
                security_mechanisms = (lasso.SECURITY_MECH_BEARER,))
148
        wsp_disco.buildRequestMsg()
149

  
150
        idp_disco = lasso.IdWsf2Discovery(idp)
151
        idp_disco.processRequestMsg(wsp_disco.msgBody)
152
        idp_disco.checkSecurityMechanism()
153
        idp_disco.validateRequest()
154
        self.failUnlessEqual(len(idp_disco.metadatas), 1)
155
        # add metadatas to directory
156
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
157
        self.failUnless(sender is not None)
158
        metadatas = services_map.get(sender, [])
159
        for metadata in idp_disco.metadatas:
160
            services_map[metadata.svcMDID] = metadata
161
            metadatas.append(metadata.svcMDID)
162
        services_map[sender] = metadatas
163
        idp_disco.buildResponseMsg()
164
        wsp_disco.processResponseMsg(idp_disco.msgBody)
165
        self.failUnlessEqual(len(wsp_disco.metadatas), 1)
166
        self.failUnlessEqual(wsp_disco.metadatas[0].svcMDID, wsp_disco.response.svcMDID[0])
167
        return wsp_disco.metadatas[0].svcMDID
168

  
169
    def nid2tuple(self, nid):
170
        return (nid.nameQualifier, nid.format, nid.sPNameQualifier, nid.content)
171

  
172
    def addAssociation(self, wsp, idp, session_dump, svcmdid, service_maps, federations, service_associations):
173
        self.failUnless(isinstance(service_associations, dict))
174
        self.failUnless(isinstance(service_maps, dict))
175
        # Get the bootstrap
176
        session = lasso.Session.newFromDump(session_dump)
177
        assertion = session.getAssertion(idp.providerId)
178
        self.failUnless(assertion is not None)
179
        epr = assertion.idwsf2GetDiscoveryBootstrapEpr()
180
        self.failUnless(epr is not None)
181
        wsp_disco = lasso.IdWsf2Discovery(wsp)
182
        wsp_disco.setEpr(epr)
183
        wsp_disco.initMetadataAssociationAdd()
184
        wsp_disco.svcmdids = (svcmdid,)
185
        wsp_disco.buildRequestMsg()
186
        # Handle request
187
        idp_disco = lasso.IdWsf2Discovery(idp)
188
        idp_disco.processRequestMsg(wsp_disco.msgBody)
189
        idp_disco.checkSecurityMechanism()
190
        self.failUnlessEqual(idp_disco.svcmdids, (svcmdid,))
191
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
192
        name_identifier = idp_disco.getNameIdentifier()
193
        f = self.nid2tuple(name_identifier)
194
        uid = federations[f]
195
        l = service_associations.get(uid, [])
196
        for id in idp_disco.svcmdids:
197
            # check it exists
198
            self.failUnless(service_maps.get(id) is not None)
199
            # create association
200
            if id not in l:
201
                l.append(id)
202
        service_associations[uid] = l
203
        idp_disco.validateRequest()
204
        idp_disco.buildResponseMsg()
205
        wsp_disco.processResponseMsg(idp_disco.msgBody)
206

  
207
    def login(self, sp, idp, user_id, federations, sp_identity_dump=None, sp_session_dump=None,
208
            idp_identity_dump=None, idp_session_dump=None):
209
        sp_login = lasso.Login(sp)
210
        idp_provider_id = 'http://idp5/metadata'
211
        sp_login.initAuthnRequest(idp_provider_id, lasso.HTTP_METHOD_REDIRECT)
212
        sp_login.request.nameIDPolicy.format = lasso.SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT
213
        sp_login.request.nameIDPolicy.allowCreate = True
214
        sp_login.buildAuthnRequestMsg()
215

  
216
        idp_login = lasso.Login(idp)
217
        query = sp_login.msgUrl.split('?')[1]
218
        if idp_identity_dump is not None:
219
            idp_login.setIdentityFromDump(idp_identity_dump)
220
        if idp_session_dump is not None:
221
            idp_login.setSessionFromDump(idp_session_dump)
222
        idp_login.processAuthnRequestMsg(query)
223
        idp_login.validateRequestMsg(True, True)
224
        idp_login.buildAssertion(lasso.SAML_AUTHENTICATION_METHOD_PASSWORD, None, None, None, None)
225
        if idp_login.assertion.subject.encryptedId:
226
            f = self.nid2tuple(idp_login.assertion.subject.encryptedId.originalData)
227
        else:
228
            f = self.nid2tuple(idp_login.assertion.subject.nameId)
229
        federations[f] = user_id
230
        l = federations.get(user_id, [])
231
        l.append(f)
232
        federations[user_id] = l
233
        idp_login.idwsf2AddDiscoveryBootstrapEpr(url = idpSoapEndpoint, abstract = 'Discovery Service', security_mechanisms = (lasso.SECURITY_MECH_BEARER,))
234
        idp_login.buildArtifactMsg(lasso.HTTP_METHOD_ARTIFACT_GET)
235
        artifact_message = idp_login.artifactMessage
236

  
237
        if idp_login.isIdentityDirty:
238
            idp_identity_dump = idp_login.identity.dump()
239
        if idp_login.isSessionDirty:
240
            idp_session_dump = idp_login.session.dump()
241

  
242
        sp_login = lasso.Login(sp)
243
        query = idp_login.msgUrl.split('?')[1]
244
        query = query.replace("%3D", "=")
245
        sp_login.initRequest(query, lasso.HTTP_METHOD_ARTIFACT_GET)
246
        sp_login.buildRequestMsg()
247

  
248
        idp_login = lasso.Login(idp)
249
        idp_login.processRequestMsg(sp_login.msgBody)
250
        idp_login.artifactMessage = artifact_message
251
        idp_login.buildResponseMsg(None)
252

  
253
        sp_login.processResponseMsg(idp_login.msgBody)
254
        sp_login.acceptSso()
255
        if sp_login.isIdentityDirty:
256
            sp_identity_dump = sp_login.identity.dump()
257
        if sp_login.isSessionDirty:
258
            sp_session_dump = sp_login.session.dump()
259

  
260
        return sp_identity_dump, sp_session_dump, idp_identity_dump, idp_session_dump, sp_login.idwsf2GetDiscoveryBootstrapEpr()
261

  
262

  
263
class MetadataTestCase(IdWsf2TestCase):
264
    def test01(self):
265
        """Test metadata registration on the IdP"""
266
        idp = self.getIdpServer()
267
        wsp = self.getWspServer()
268
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
269

  
270
        wsp_disco = lasso.IdWsf2Discovery(wsp)
271
        wsp_disco.setEpr(dst_epr)
272

  
273
        abstract = 'Personal Profile service'
274
        wsp_disco.initMetadataRegister()
275
        self.failUnless(wsp_disco.request is not None)
276
        wsp_disco.addSimpleServiceMetadata(service_types = 
277
                (lasso.PP11_HREF,), abstract = abstract,
278
                provider_id = wsp.providerId, address = spSoapEndpoint,
279
                security_mechanisms = (lasso.SECURITY_MECH_BEARER,))
280
        self.failUnlessEqual(len(wsp_disco.metadatas), 1)
281
        metadata = wsp_disco.metadatas[0]
282
        self.failUnlessEqual(metadata.abstract, abstract)
283
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
284
        self.failUnlessEqual(len(metadata.serviceContext), 1)
285
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
286
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
287
                lasso.PP11_HREF)
288
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
289
        self.failUnlessEqual(
290
                len(metadata.serviceContext[0].endpointContext[0].address),
291
                1)
292
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
293
                spSoapEndpoint)
294
        self.failUnlessEqual(
295
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
296
                1)
297
        self.failUnlessEqual(
298
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
299
                lasso.SECURITY_MECH_BEARER)
300
        self.failUnless(metadata.svcMDID is None)
301
        wsp_disco.buildRequestMsg()
302
        self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint)
303
        self.failUnless(wsp_disco.msgBody is not None)
304

  
305
        idp_disco = lasso.IdWsf2Discovery(idp)
306
        self.failUnless(idp_disco is not None)
307
        idp_disco.processRequestMsg(wsp_disco.msgBody)
308
        self.failUnless(idp_disco.request is not None)
309
        self.failUnlessEqual(len(idp_disco.request.svcMD), 1)
310
        self.failUnless(idp_disco.request.svcMD[0].svcMDID is None)
311
        try:
312
            idp_disco.checkSecurityMechanism()
313
        except lasso.Error as e:
314
            self.fail(e)
315
        try:
316
            idp_disco.validateRequest()
317
        except lasso.Error as e:
318
            self.fail(e)
319
        self.failUnless(idp_disco.response is not None)
320
        self.failUnlessEqual(len(idp_disco.metadatas), 1)
321
        metadata = idp_disco.metadatas[0]
322
        self.failUnlessEqual(metadata.abstract, abstract)
323
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
324
        self.failUnlessEqual(len(metadata.serviceContext), 1)
325
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
326
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
327
                lasso.PP11_HREF)
328
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
329
        self.failUnlessEqual(
330
                len(metadata.serviceContext[0].endpointContext[0].address),
331
                1)
332
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
333
                spSoapEndpoint)
334
        self.failUnlessEqual(
335
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
336
                1)
337
        self.failUnlessEqual(
338
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
339
                lasso.SECURITY_MECH_BEARER)
340
        idp_disco.buildResponseMsg()
341
        self.failUnless(metadata.svcMDID is not None)
342
        self.failUnless(idp_disco.msgUrl is None)
343
        self.failUnless(idp_disco.msgBody is not None)
344

  
345
        wsp_disco.processResponseMsg(idp_disco.msgBody)
346

  
347
        self.failUnless(len(wsp_disco.metadatas) == 1, 'missing svcMDID')
348
        self.failUnless(wsp_disco.metadatas[0].svcMDID, 'missing svcMDID')
349

  
350
    def test02(self):
351
        "Test failure by IdP for register request"
352
        idp = self.getIdpServer()
353
        wsp = self.getWspServer()
354
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
355

  
356
        wsp_disco = lasso.IdWsf2Discovery(wsp)
357
        wsp_disco.setEpr(dst_epr)
358

  
359
        abstract = 'Personal Profile service'
360
        wsp_disco.initMetadataRegister()
361
        self.failUnless(wsp_disco.request is not None)
362
        wsp_disco.addSimpleServiceMetadata(service_types = 
363
                (lasso.PP11_HREF,), abstract = abstract,
364
                provider_id = wsp.providerId, address = spSoapEndpoint,
365
                security_mechanisms= (lasso.SECURITY_MECH_BEARER,))
366
        self.failUnlessEqual(len(wsp_disco.metadatas), 1)
367
        metadata = wsp_disco.metadatas[0]
368
        self.failUnlessEqual(metadata.abstract, abstract)
369
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
370
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
371
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
372
                lasso.PP11_HREF)
373
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
374
        self.failUnlessEqual(
375
                len(metadata.serviceContext[0].endpointContext[0].address),
376
                1)
377
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
378
                spSoapEndpoint)
379
        self.failUnlessEqual(
380
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
381
                1)
382
        self.failUnlessEqual(
383
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
384
                lasso.SECURITY_MECH_BEARER)
385
        self.failUnless(metadata.svcMDID is None)
386
        wsp_disco.buildRequestMsg()
387
        self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint)
388
        self.failUnless(wsp_disco.msgBody is not None)
389

  
390
        idp_disco = lasso.IdWsf2Discovery(idp)
391
        self.failUnless(idp_disco is not None)
392
        try:
393
            idp_disco.processRequestMsg(wsp_disco.msgBody)
394
        except lasso.Error as e:
395
            self.fail(e)
396
        self.failUnless(idp_disco.request is not None)
397
        try:
398
            idp_disco.checkSecurityMechanism()
399
        except lasso.Error as e:
400
            self.fail(e)
401
        try:
402
            idp_disco.failRequest(lasso.IDWSF2_DISCOVERY_STATUS_CODE_FAILED, lasso.IDWSF2_DISCOVERY_STATUS_CODE_FORBIDDEN)
403
        except lasso.Error as e:
404
            self.fail(e)
405
        self.failUnless(idp_disco.response is not None)
406
        self.failUnless(idp_disco.response.status is not None)
407
        self.failUnless(idp_disco.response.status.code is not lasso.IDWSF2_DISCOVERY_STATUS_CODE_FAILED)
408
        self.failUnlessEqual(len(idp_disco.response.status.status), 1)
409
        self.failUnless(idp_disco.response.status.status[0].code is not lasso.IDWSF2_DISCOVERY_STATUS_CODE_FORBIDDEN)
410
        idp_disco.buildResponseMsg()
411
        self.failUnless(idp_disco.msgUrl is None)
412
        self.failUnless(idp_disco.msgBody is not None)
413

  
414
        try:
415
            wsp_disco.processResponseMsg(idp_disco.msgBody)
416
        except lasso.Idwsf2DiscoveryForbiddenError:
417
            pass
418
        except lasso.Error as e:
419
            self.fail(e)
420

  
421
    def test03(self):
422
        """Test metadata register with redirection"""
423
        idp = self.getIdpServer()
424
        wsp = self.getWspServer()
425
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
426

  
427
        wsp_disco = lasso.IdWsf2Discovery(wsp)
428
        wsp_disco.setEpr(dst_epr)
429

  
430
        abstract = 'Personal Profile service'
431
        wsp_disco.initMetadataRegister()
432
        soap_envelope = wsp_disco.getSoapEnvelopeRequest()
433
        soap_envelope.setSb2UserInteractionHint(lasso.IDWSF2_SB2_USER_INTERACTION_HINT_INTERACT_IF_NEEDED)
434
        self.failUnless(isinstance(soap_envelope.header, lasso.SoapHeader))
435
        self.failUnless(len(soap_envelope.header.other) > 0)
436
        self.failUnlessEqual(soap_envelope.getSb2UserInteractionHint(), lasso.IDWSF2_SB2_USER_INTERACTION_HINT_INTERACT_IF_NEEDED)
437
        self.failUnless(wsp_disco.request is not None)
438
        wsp_disco.addSimpleServiceMetadata(service_types = 
439
                (lasso.PP11_HREF,), abstract = abstract,
440
                provider_id = wsp.providerId, address = spSoapEndpoint,
441
                security_mechanisms = (lasso.SECURITY_MECH_BEARER,))
442
        self.failUnlessEqual(len(wsp_disco.metadatas), 1)
443
        metadata = wsp_disco.metadatas[0]
444
        self.failUnlessEqual(metadata.abstract, abstract)
445
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
446
        self.failUnlessEqual(len(metadata.serviceContext), 1)
447
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
448
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
449
                lasso.PP11_HREF)
450
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
451
        self.failUnlessEqual(
452
                len(metadata.serviceContext[0].endpointContext[0].address),
453
                1)
454
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
455
                spSoapEndpoint)
456
        self.failUnlessEqual(
457
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
458
                1)
459
        self.failUnlessEqual(
460
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
461
                lasso.SECURITY_MECH_BEARER)
462
        self.failUnless(metadata.svcMDID is None)
463
        wsp_disco.buildRequestMsg()
464
        self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint)
465
        self.failUnless(wsp_disco.msgBody is not None)
466

  
467
        idp_disco = lasso.IdWsf2Discovery(idp)
468
        self.failUnless(idp_disco is not None)
469
        idp_disco.processRequestMsg(wsp_disco.msgBody)
470
        self.failUnless(idp_disco.request is not None)
471
        self.failUnlessEqual(len(idp_disco.request.svcMD), 1)
472
        self.failUnless(idp_disco.request.svcMD[0].svcMDID is None)
473
        soap_envelope = idp_disco.getSoapEnvelopeRequest()
474
        self.failUnless(soap_envelope is not None)
475
        self.failUnless(soap_envelope.getMessageId() is not None)
476
        try:
477
            idp_disco.checkSecurityMechanism()
478
        except lasso.Error as e:
479
            self.fail(e)
480
        # redirect
481
        interactionUrl = spInteractionUrl
482
        idp_disco.redirectUserForInteraction(interactionUrl, False)
483
        response = idp_disco.response
484
        self.failUnless(isinstance(response, lasso.SoapFault))
485
        self.failUnless(response.detail is not None)
486
        self.failUnlessEqual(len(response.detail.any), 1)
487
        self.failUnless(isinstance(response.detail.any[0], lasso.IdWsf2Sb2RedirectRequest))
488
        self.failUnless(response.detail.any[0].redirectURL.startswith(interactionUrl + '?transactionID='))
489
        try:
490
            idp_disco.buildResponseMsg()
491
        except lasso.Error as e:
492
            self.fail(e)
493
        self.failUnless(idp_disco.msgBody is not None)
494

  
495

  
496
        self.failUnless(idp_disco.msgUrl is None)
497
        self.failUnless(idp_disco.msgBody is not None)
498

  
499
        try:
500
            wsp_disco.processResponseMsg(idp_disco.msgBody)
501
        except lasso.WsfprofileRedirectRequestError:
502
            pass
503
        except lasso.Error as e:
504
            self.fail(e)
505
        response_envelope = wsp_disco.getSoapEnvelopeResponse()
506
        self.failUnless(response_envelope.sb2GetRedirectRequestUrl().startswith(interactionUrl + '?transactionID='))
507
        # Here keep information about the request associated to ID: response_envelope.getMessageId().content
508
        wsp_disco_dump = wsp_disco.dump()
509
        wsp_disco = lasso.Node.newFromDump(wsp_disco_dump)
510
        wsp_disco.server = wsp
511
        request_envelope = wsp_disco.getSoapEnvelopeRequest()
512
        self.failUnless(request_envelope is not None)
513
        relates_to = request_envelope.getRelatesTo(True)
514
        self.failUnless(relates_to is not None)
515
        response_message_id = response_envelope.getMessageId().content
516
        relates_to.content = response_message_id
517
        wsp_disco.buildRequestMsg()
518
        # now redo as for test01 after request building
519
        self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint)
520
        self.failUnless(wsp_disco.msgBody is not None)
521

  
522
        idp_disco = lasso.IdWsf2Discovery(idp)
523
        self.failUnless(idp_disco is not None)
524
        idp_disco.processRequestMsg(wsp_disco.msgBody)
525
        self.failUnless(idp_disco.request is not None)
526
        self.failUnlessEqual(len(idp_disco.request.svcMD), 1)
527
        self.failUnless(idp_disco.request.svcMD[0].svcMDID is None)
528
        try:
529
            idp_disco.checkSecurityMechanism()
530
        except lasso.Error as e:
531
            self.fail(e)
532
        try:
533
            idp_disco.validateRequest()
534
        except lasso.Error as e:
535
            self.fail(e)
536
        self.failUnless(idp_disco.response is not None)
537
        self.failUnlessEqual(len(idp_disco.metadatas), 1)
538
        metadata = idp_disco.metadatas[0]
539
        self.failUnlessEqual(metadata.abstract, abstract)
540
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
541
        self.failUnlessEqual(len(metadata.serviceContext), 1)
542
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
543
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
544
                lasso.PP11_HREF)
545
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
546
        self.failUnlessEqual(
547
                len(metadata.serviceContext[0].endpointContext[0].address),
548
                1)
549
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
550
                spSoapEndpoint)
551
        self.failUnlessEqual(
552
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
553
                1)
554
        self.failUnlessEqual(
555
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
556
                lasso.SECURITY_MECH_BEARER)
557
        idp_disco.buildResponseMsg()
558
        self.failUnless(metadata.svcMDID is not None)
559
        self.failUnless(idp_disco.msgUrl is None)
560
        self.failUnless(idp_disco.msgBody is not None)
561

  
562
        wsp_disco.processResponseMsg(idp_disco.msgBody)
563

  
564
        self.failUnless(len(wsp_disco.metadatas) == 1, 'missing svcMDID')
565
        self.failUnless(wsp_disco.metadatas[0].svcMDID, 'missing svcMDID')
566

  
567
    def test04(self):
568
        """Test metadata query"""
569
        idp = self.getIdpServer()
570
        wsp = self.getWspServer()
571
        federations = {}
572
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, federations)
573
        service_map = {}
574
        self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
575
            (lasso.PP11_HREF,), address = spSoapEndpoint,
576
            abstract = 'My first PP service', services_map = service_map)
577
        self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
578
            (lasso.PP11_HREF,), address = spSoapEndpoint+'2',
579
            abstract = 'My second PP service', services_map = service_map)
580
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, federations)
581
        wsp_disco = lasso.IdWsf2Discovery(wsp)
582
        wsp_disco.setEpr(dst_epr)
583
        wsp_disco.initMetadataQuery()
584
        wsp_disco.buildRequestMsg()
585

  
586
        idp_disco = lasso.IdWsf2Discovery(idp)
587
        idp_disco.processRequestMsg(wsp_disco.msgBody)
588
        idp_disco.checkSecurityMechanism()
589
        self.failUnlessEqual(idp_disco.svcmdids, ())
590
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
591
        for svcMDID in service_map.get(sender, []):
592
            idp_disco.addServiceMetadata(service_map.get(svcMDID))
593
        idp_disco.validateRequest()
594
        idp_disco.buildResponseMsg()
595
        wsp_disco.processResponseMsg(idp_disco.msgBody)
596
        self.failUnless(len(wsp_disco.metadatas), 2)
597

  
598
    def test05(self):
599
        """Test metadata delete"""
600
        idp = self.getIdpServer()
601
        wsp = self.getWspServer()
602
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
603
        service_map = {}
604
        self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
605
            (lasso.PP11_HREF,), address = spSoapEndpoint,
606
            abstract = 'My first PP service', services_map = service_map)
607
        self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
608
            (lasso.PP11_HREF,), address = spSoapEndpoint+'2',
609
            abstract = 'My second PP service', services_map = service_map)
610
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
611

  
612
        wsp_disco = lasso.IdWsf2Discovery(wsp)
613
        wsp_disco.setEpr(dst_epr)
614
        wsp_disco.initMetadataDelete()
615
        svcmdids = tuple(service_map[wsp.providerId])
616
        wsp_disco.setSvcmdids(svcmdids)
617
        wsp_disco.buildRequestMsg()
618

  
619
        idp_disco = lasso.IdWsf2Discovery(idp)
620
        idp_disco.processRequestMsg(wsp_disco.msgBody)
621
        idp_disco.checkSecurityMechanism()
622
        self.failUnlessEqual(idp_disco.svcmdids, svcmdids)
623
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
624
        self.failUnlessEqual(sender, wsp.providerId)
625
        idp_disco.validateRequest()
626
        idp_disco.buildResponseMsg()
627
        wsp_disco.processResponseMsg(idp_disco.msgBody)
628

  
629
class MetadataAssociationTestCase(IdWsf2TestCase):
630
    def test01(self):
631
        """Metadata association add"""
632
        idp = self.getIdpServer()
633
        wsp = self.getWspServer()
634
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
635
        service_map = {}
636
        svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
637
            (lasso.PP11_HREF,), address = spSoapEndpoint,
638
            abstract = 'My first PP service', services_map = service_map)
639
        # Make the request
640
        wsp_disco = lasso.IdWsf2Discovery(wsp)
641
        wsp_disco.setEpr(dst_epr)
642
        wsp_disco.initMetadataAssociationAdd()
643
        wsp_disco.svcmdids = (svcMDID,)
644
        wsp_disco.buildRequestMsg()
645
        # Receive it
646
        idp_disco = lasso.IdWsf2Discovery(idp)
647
        idp_disco.processRequestMsg(wsp_disco.msgBody)
648
        idp_disco.checkSecurityMechanism()
649
        self.failUnlessEqual(idp_disco.svcmdids, (svcMDID,))
650
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
651
        name_identifier = idp_disco.getNameIdentifier()
652
        # Store the association
653
        self.failUnless(sender is not None)
654
        self.failUnless(name_identifier is not None)
655
        idp_disco.validateRequest()
656
        idp_disco.buildResponseMsg()
657
        wsp_disco.processResponseMsg(idp_disco.msgBody)
658

  
659
    def test02(self):
660
        """Metadata association query"""
661
        idp = self.getIdpServer()
662
        wsp = self.getWspServer()
663
        wsc = self.getWscServer()
664
        # Register the service, add an association
665
        federations = {}
666
        wsp_identity_dump, wsp_session_dump, \
667
                idp_identity_dump, idp_session_dump, \
668
                wsp_dst_epr = self.login(wsp, idp, 1, federations)
669
        service_maps = {}
670
        svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump,
671
                service_types = (lasso.PP11_HREF,), address = spSoapEndpoint,
672
            abstract = 'My first PP service', services_map = service_maps)
673
        service_associations = {}
674
        self.addAssociation(wsp, idp, wsp_session_dump, svcMDID, service_maps,
675
                federations, service_associations)
676
        # Start a query
677
        wsp_disco = lasso.IdWsf2Discovery(wsp)
678
        wsp_disco.setEpr(wsp_dst_epr)
679
        wsp_disco.initMetadataAssociationQuery()
680
        wsp_disco.buildRequestMsg()
681
        #
682
        idp_disco = lasso.IdWsf2Discovery(idp)
683
        idp_disco.processRequestMsg(wsp_disco.msgBody)
684
        idp_disco.checkSecurityMechanism()
685
        self.failUnlessEqual(idp_disco.svcmdids, ())
686
        f = self.nid2tuple(idp_disco.getNameIdentifier())
687
        uid = federations[f]
688
        result = []
689
        for svcmdid in service_associations[uid]:
690
            result.append(svcmdid)
691
        idp_disco.svcmdids = tuple(result)
692
        idp_disco.validateRequest()
693
        idp_disco.buildResponseMsg()
694
        wsp_disco.processResponseMsg(idp_disco.msgBody)
695
        self.failUnlessEqual(wsp_disco.svcmdids, (svcMDID,))
696

  
697
    def test03(self):
698
        """Metadata association delete"""
699
        pass
700

  
701
class QueryTestCase(IdWsf2TestCase):
702
    def test01(self):
703
        """Discovery Service Query"""
704
        idp = self.getIdpServer()
705
        wsp = self.getWspServer()
706
        wsc = self.getWscServer()
707
        federations = {}
708
        # Register the service, add an association
709
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, wsp_dst_epr = self.login(wsp, idp, 1, federations)
710
        service_maps = {}
711
        svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
712
            (lasso.PP11_HREF,), address = spSoapEndpoint,
713
            abstract = 'My first PP service', services_map = service_maps)
714
        service_associations = {}
715
        self.addAssociation(wsp, idp, wsp_session_dump, svcMDID, service_maps, federations, service_associations)
716
        # Try to find the service
717
        wsc_identity_dump, wsc_session_dump, idp_identity_dump, idp_session_dump, wsc_dst_epr = self.login(wsc, idp, 1, federations, idp_identity_dump = idp_identity_dump, idp_session_dump = idp_session_dump)
718
        wsc_disco = lasso.IdWsf2Discovery(wsc)
719
        wsc_disco.setEpr(wsc_dst_epr)
720
        wsc_disco.initQuery()
721
        wsc_disco.addRequestedService(service_types = (lasso.PP11_HREF,))
722
        wsc_disco.buildRequestMsg()
723
        idp_disco = lasso.IdWsf2Discovery(idp)
724
        idp_disco.setIdentityFromDump(idp_identity_dump)
725
        idp_disco.processRequestMsg(wsc_disco.msgBody)
726
        f = self.nid2tuple(idp_disco.getNameIdentifier())
727
        uid = federations[f]
728
        for id in service_associations[uid]:
729
            idp_disco.addServiceMetadata(service_maps[id])
730
        idp_disco.validateRequest()
731
        idp_disco.buildResponseMsg()
732
        wsc_disco.processResponseMsg(idp_disco.msgBody)
733
        self.failUnlessEqual(len(wsc_disco.endpointReferences), 1)
734

  
735
class DstTestCase(IdWsf2TestCase):
736
    def test01(self):
737
        """Data Service Template Query"""
738
        content = '<pp:PP xmlns:pp="%s">Coin</pp:PP>' % lasso.PP11_HREF
739
        idp = self.getIdpServer()
740
        wsp = self.getWspServer()
741
        wsc = self.getWscServer()
742
        federations = {}
743
        # Register the service, add an association
744
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, \
745
            idp_session_dump, wsp_dst_epr = self.login(wsp, idp, 1,
746
                    federations)
747
        service_maps = {}
748
        svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump,
749
                service_types = (lasso.PP11_HREF,), address =
750
                spSoapEndpoint, abstract = 'My first PP service',
751
                services_map = service_maps)
752
        service_associations = {}
753
        self.addAssociation(wsp, idp, wsp_session_dump, svcMDID,
754
                service_maps, federations, service_associations)
755
        wsc_identity_dump, wsc_session_dump, idp_identity_dump, \
756
        idp_session_dump, wsc_dst_epr = self.login(wsc, idp, 1, federations,
757
                idp_identity_dump = idp_identity_dump, idp_session_dump =
758
                idp_session_dump)
759
        eprs = self.query(wsc, idp, idp_identity_dump, wsc_session_dump, 1,
760
                federations, service_maps, service_associations,
761
                service_types = (lasso.PP11_HREF,))
762
        self.failUnless(len(eprs), 1)
763
        lasso.registerIdwsf2DstService(lasso.PP11_PREFIX, lasso.PP11_HREF)
764
        wsc_dst = lasso.IdWsf2DataService(wsc)
765
        wsc_dst.setEpr(eprs[0])
766
        wsc_dst.initQuery()
767
        wsc_dst.setServiceType(lasso.PP11_PREFIX, lasso.PP11_HREF)
768
        wsc_dst.addQueryItem('/%s:PP' % lasso.PP11_PREFIX, 'xxx')
769
        wsc_dst.buildRequestMsg()
770
        wsp_dst = lasso.IdWsf2DataService(wsp)
771
        wsp_dst.processRequestMsg(wsc_dst.msgBody)
772
        self.failUnlessEqual(wsp_dst.requestType, lasso.IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY)
773
        wsp_dst.checkSecurityMechanism()
774
        data = ET.parse(StringIO(content))
775
        for item in wsp_dst.items:
776
            result = data.xpath(item.select, namespaces = { lasso.PP11_PREFIX: lasso.PP11_HREF })
777
            for found in result:
778
                wsp_dst.setQueryItemResult(item.itemId, ET.tostring(found), True)
779
        wsp_dst.setServiceType(lasso.PP11_PREFIX, lasso.PP11_HREF)
780
        wsp_dst.validateRequest()
781
        wsp_dst.buildResponseMsg()
782
        wsc_dst.processResponseMsg(wsp_dst.msgBody)
783

  
784

  
785
metadataSuite = unittest.makeSuite(MetadataTestCase, 'test')
786
metadataAssociationSuite = unittest.makeSuite(MetadataAssociationTestCase, 'test')
787
querySuite = unittest.makeSuite(QueryTestCase, 'test')
788
dstSuite = unittest.makeSuite(DstTestCase, 'test')
789

  
790

  
791
allTests = unittest.TestSuite((metadataSuite,
792
    metadataAssociationSuite,querySuite,dstSuite)) 
793

  
794
if __name__ == '__main__':
795
    sys.exit(not unittest.TextTestRunner(verbosity = 2).run(allTests).wasSuccessful())
796

  
configure.ac
679 679
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
680 680
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
681 681

  
682
dnl Check if wsf is explicitly disabled.
683
AC_ARG_ENABLE(wsf, [  --enable-wsf            enable experimental ID-WSF],
684
		enable_wsf="yes", enable_wsf="no")
685

  
686
AM_CONDITIONAL([WSF_ENABLED],[test "x$enable_wsf" = "xyes"])
687
LASSO_WSF_SUPPORT=0
688
if test "x$enable_wsf" = "xyes"; then
689
	AC_DEFINE(LASSO_WSF_ENABLED, [], [Define if ID-WSF support is enabled])
690
	LASSO_WSF_SUPPORT=1
691
fi
692
AC_SUBST(LASSO_WSF_SUPPORT)
693

  
694 682

  
695 683
dnl API Reference documentation support
696 684
# gtkdocize greps for ^GTK_DOC_CHECK and parses it, so you need to have
......
746 734

  
747 735
AM_CONDITIONAL(WITH_TESTS, [test "x$enable_tests" = "xyes"])
748 736

  
749
AC_ARG_WITH(sasl2, [  --with-sasl2[=PFX]         Use Cyrus SASL library version 2 for WSF-Auth])
750
if test "x$enable_wsf" = "xyes"; then
751
	if test "$with_sasl2" != "no" && test "$with_sasl2" != "yes"
752
	then
753
		CPPFLAGS="$CPPFLAGS -I$with_sasl2/include"
754
		LDFLAGS="$LDFLAGS -L$with_sasl2/lib"
755
	fi
756
		
757
	saved_LIBS="$LIBS"
758
	AC_CHECK_LIB(sasl2, sasl_server_init,,
759
		AC_MSG_ERROR([libsasl must be installed for WSF support]),)
760
	LIBS="$saved_LIBS"
761
	LASSO_LIBS="$LASSO_LIBS -lsasl2"
762
fi
763

  
764 737
AC_CHECK_PROGS(REST2HTML, rest2html rst2html)
765 738
AM_CONDITIONAL(HAVE_REST2HTML, test -n "$ac_cv_prog_REST2HTML")
766 739

  
......
907 880
docs/reference/lasso/Makefile
908 881
lasso/Makefile
909 882
lasso/id-ff/Makefile
910
lasso/id-wsf/Makefile
911 883
lasso/saml-2.0/Makefile
912
lasso/id-wsf-2.0/Makefile
913 884
lasso/xml/Makefile
914 885
lasso/xml/ecp/Makefile
915 886
lasso/xml/saml-2.0/Makefile
916 887
lasso/xml/soap-1.1/Makefile
917
lasso/xml/id-wsf-2.0/Makefile
918
lasso/xml/ws/Makefile
919 888
lasso/xml/dsig/Makefile
920 889
tests/Makefile
921 890
tests/data/Makefile
......
961 930
CFLAGS:                  ${AM_CFLAGS} ${CFLAGS}
962 931
Install prefix:          ${prefix}
963 932
Debugging:               $enable_debugging
964
Experimental ID-WSF:     $enable_wsf
965 933

  
966 934
Optionals builds
967 935
----------------
docs/reference/lasso/Makefile.am
81 81
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
82 82
IGNORE_HFILES= sessionprivate.h logoutprivate.h loginprivate.h profileprivate.h \
83 83
identityprivate.h serverprivate.h providerprivate.h id_ff_extensions_private.h \
84
wsf_profile_private.h private.h saml_2_0_loginprivate.h \
84
private.h saml_2_0_loginprivate.h \
85 85
saml_2_0_profileprivate.h saml_2_0_logoutprivate.h ecpprivate.h \
86 86
saml_2_0_serverprivate.h saml_2_0_providerprivate.h federationprivate.h \
87
registry-private.h id_wsf_2_0_sessionprivate.h id_wsf_2_0_serverprivate.h \
88
saml2_login_private.h id_wsf_2_0_private.h \
89
backward_comp.h id_wsf_2.h id_wsf.h lasso_config.h utils.h debug.h
87
registry-private.h \
88
saml2_login_private.h \
89
backward_comp.h lasso_config.h utils.h debug.h
90 90
# Images to copy into HTML directory.
91 91
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
92 92
HTML_IMAGES=
......
122 122
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
123 123
# DISTCLEANFILES =
124 124

  
125
# Generate lasso.types depending on the WSF_ENABLED flag
126
if WSF_ENABLED
127
lasso.types: lasso.types.in
128
	sed -e 's/#WSF# //g' < $(srcdir)/lasso.types.in > lasso.types
129
else
130
lasso.types: lasso.types.in
131
	grep -v '#WSF#' $(srcdir)/lasso.types.in > lasso.types
132
endif
133

  
134

  
135 125
# Comment this out if you want your docs-status tested during 'make check'
136 126
if ENABLE_GTK_DOC
137 127
TESTS_ENVIRONMENT = cd $(srcdir)
docs/reference/lasso/lasso-docs.xml
295 295
    <xi:include href="xml/ecp_relaystate.xml"/>
296 296
  </chapter>
297 297

  
298
  <chapter id="idwsf">
299
    <title>Identity Web Services Framework 1.0</title>
300

  
301
    <xi:include href="xml/discovery.xml"/>
302
    <xi:include href="xml/data_service.xml"/>
303
    <xi:include href="xml/personal_profile_service.xml"/>
304
    <xi:include href="xml/authentication.xml"/>
305
    <xi:include href="xml/wsf_profile.xml"/>
306
    <xi:include href="xml/interaction_profile_service.xml"/>
307
    <xi:include href="xml/id_wsf_utils.xml"/>
308
  </chapter>
309
  <chapter id="xml-idwsf">
310
      <title>Objects from ID-WSF 1.0 schemas</title>
311
    <xi:include href="xml/id_wsf_strings.xml"/>
312
    <xi:include href="xml/disco_authenticate_requester.xml"/>
313
    <xi:include href="xml/disco_authenticate_session_context.xml"/>
314
    <xi:include href="xml/disco_authorize_requester.xml"/>
315
    <xi:include href="xml/disco_credentials.xml"/>
316
    <xi:include href="xml/disco_description.xml"/>
317
    <xi:include href="xml/disco_encrypted_resource_id.xml"/>
318
    <xi:include href="xml/disco_encrypt_resource_id.xml"/>
319
    <xi:include href="xml/disco_generate_bearer_token.xml"/>
320
    <xi:include href="xml/disco_insert_entry.xml"/>
321
    <xi:include href="xml/disco_modify_response.xml"/>
322
    <xi:include href="xml/disco_modify.xml"/>
323
    <xi:include href="xml/disco_options.xml"/>
324
    <xi:include href="xml/disco_query_response.xml"/>
325
    <xi:include href="xml/disco_query.xml"/>
326
    <xi:include href="xml/disco_remove_entry.xml"/>
327
    <xi:include href="xml/disco_requested_service_type.xml"/>
328
    <xi:include href="xml/disco_resource_id.xml"/>
329
    <xi:include href="xml/disco_resource_offering.xml"/>
330
    <xi:include href="xml/disco_send_single_logout.xml"/>
331
    <xi:include href="xml/disco_service_instance.xml"/>
332
    <xi:include href="xml/dst_data.xml"/>
333
    <xi:include href="xml/dst_modification.xml"/>
334
    <xi:include href="xml/dst_modify_response.xml"/>
335
    <xi:include href="xml/dst_modify.xml"/>
336
    <xi:include href="xml/dst_new_data.xml"/>
337
    <xi:include href="xml/dst_query_item.xml"/>
338
    <xi:include href="xml/dst_query_response.xml"/>
339
    <xi:include href="xml/dst_query.xml"/>
340
    <xi:include href="xml/is_redirect_request.xml"/>
341
    <xi:include href="xml/is_user_interaction.xml"/>
342
    <xi:include href="xml/sa_credentials.xml"/>
343
    <xi:include href="xml/sa_parameter.xml"/>
344
    <xi:include href="xml/sa_password_transforms.xml"/>
345
    <xi:include href="xml/sa_sasl_request.xml"/>
346
    <xi:include href="xml/sa_sasl_response.xml"/>
347
    <xi:include href="xml/sa_transform.xml"/>
348
    <xi:include href="xml/sec_resource_access_statement.xml"/>
349
    <xi:include href="xml/soap_binding_consent.xml"/>
350
    <xi:include href="xml/soap_binding_correlation.xml"/>
351
    <xi:include href="xml/soap_binding_ext_credentials_context.xml"/>
352
    <xi:include href="xml/soap_binding_ext_credential.xml"/>
353
    <xi:include href="xml/soap_binding_ext_service_instance_update.xml"/>
354
    <xi:include href="xml/soap_binding_ext_timeout.xml"/>
355
    <xi:include href="xml/soap_binding_processing_context.xml"/>
356
    <xi:include href="xml/soap_binding_provider.xml"/>
357
    <xi:include href="xml/soap_binding_usage_directive.xml"/>
358
    <xi:include href="xml/utility_status.xml"/>
359
  </chapter>
360
  <chapter id="idwsf2">
361
    <title>ID-WSF 2.0</title>
362
    <xi:include href="xml/soap_binding2.xml"/>
363
    <xi:include href="xml/id_wsf_2_0_discovery.xml"/>
364
    <xi:include href="xml/id_wsf_2_0_data_service.xml"/>
365
    <xi:include href="xml/id_wsf_2_0_profile.xml"/>
366
    <xi:include href="xml/id_wsf_2_0_login.xml"/>
367
  </chapter>
368
  <chapter id="xml-idwsf2">
369
    <title>Objects from ID-WSF 2.0 schemas</title>
370
    <xi:include href="xml/id_wsf2_strings.xml"/>
371
    <xi:include href="xml/disco_service_type.xml"/>
372
    <xi:include href="xml/disco_abstract.xml"/>
373
    <xi:include href="xml/disco_endpoint_context.xml"/>
374
    <xi:include href="xml/disco_keys.xml"/>
375
    <xi:include href="xml/disco_provider_id.xml"/>
376
    <xi:include href="xml/disco_requested_service.xml"/>
377
    <xi:include href="xml/disco_security_context.xml"/>
378
    <xi:include href="xml/disco_service_context.xml"/>
379
    <xi:include href="xml/disco_svc_md_association_add_response.xml"/>
380
    <xi:include href="xml/disco_svc_md_association_add.xml"/>
381
    <xi:include href="xml/disco_svc_md_association_delete_response.xml"/>
382
    <xi:include href="xml/disco_svc_md_association_delete.xml"/>
383
    <xi:include href="xml/disco_svc_md_association_query_response.xml"/>
384
    <xi:include href="xml/disco_svc_md_association_query.xml"/>
385
    <xi:include href="xml/disco_svc_md_delete_response.xml"/>
386
    <xi:include href="xml/disco_svc_md_delete.xml"/>
387
    <xi:include href="xml/disco_svc_md_query_response.xml"/>
388
    <xi:include href="xml/disco_svc_md_query.xml"/>
389
    <xi:include href="xml/disco_svc_md_register_response.xml"/>
390
    <xi:include href="xml/disco_svc_md_register.xml"/>
391
    <xi:include href="xml/disco_svc_md_replace_response.xml"/>
392
    <xi:include href="xml/disco_svc_md_replace.xml"/>
393
    <xi:include href="xml/disco_svc_metadata.xml"/>
394
    <xi:include href="xml/dst_data_response_base.xml"/>
395
    <xi:include href="xml/dst_delete_item_base.xml"/>
396
    <xi:include href="xml/dst_delete_response.xml"/>
397
    <xi:include href="xml/dstref_app_data.xml"/>
398
    <xi:include href="xml/dstref_create_item.xml"/>
399
    <xi:include href="xml/dstref_create_response.xml"/>
400
    <xi:include href="xml/dstref_create.xml"/>
401
    <xi:include href="xml/dstref_data_response.xml"/>
402
    <xi:include href="xml/dstref_data.xml"/>
403
    <xi:include href="xml/dstref_delete_item.xml"/>
404
    <xi:include href="xml/dstref_delete_response.xml"/>
405
    <xi:include href="xml/dstref_delete.xml"/>
406
    <xi:include href="xml/dstref_item_data.xml"/>
407
    <xi:include href="xml/dstref_modify_item.xml"/>
408
    <xi:include href="xml/dstref_modify_response.xml"/>
409
    <xi:include href="xml/dstref_modify.xml"/>
410
    <xi:include href="xml/dstref_query_item.xml"/>
411
    <xi:include href="xml/dstref_query_response.xml"/>
412
    <xi:include href="xml/dstref_query.xml"/>
413
    <xi:include href="xml/dstref_result_query.xml"/>
414
    <xi:include href="xml/dstref_test_item.xml"/>
415
    <xi:include href="xml/dst_request.xml"/>
416
    <xi:include href="xml/dst_result_query_base.xml"/>
417
    <xi:include href="xml/dst_test_item_base.xml"/>
418
    <xi:include href="xml/ims_identity_mapping_request.xml"/>
419
    <xi:include href="xml/ims_identity_mapping_response.xml"/>
420
    <xi:include href="xml/ims_mapping_input.xml"/>
421
    <xi:include href="xml/ims_mapping_output.xml"/>
422
    <xi:include href="xml/is_help.xml"/>
423
    <xi:include href="xml/is_inquiry_element.xml"/>
424
    <xi:include href="xml/is_inquiry.xml"/>
425
    <xi:include href="xml/is_interaction_request.xml"/>
426
    <xi:include href="xml/is_interaction_response.xml"/>
427
    <xi:include href="xml/is_interaction_statement.xml"/>
428
    <xi:include href="xml/is_item.xml"/>
429
    <xi:include href="xml/is_parameter.xml"/>
430
    <xi:include href="xml/is_select.xml"/>
431
    <xi:include href="xml/is_text.xml"/>
432
    <xi:include href="xml/ps_add_collection_request.xml"/>
433
    <xi:include href="xml/ps_add_collection_response.xml"/>
434
    <xi:include href="xml/ps_add_entity_request.xml"/>
435
    <xi:include href="xml/ps_add_entity_response.xml"/>
436
    <xi:include href="xml/ps_add_known_entity_request.xml"/>
437
    <xi:include href="xml/ps_add_known_entity_response.xml"/>
438
    <xi:include href="xml/ps_add_to_collection_request.xml"/>
439
    <xi:include href="xml/ps_get_object_info_request.xml"/>
440
    <xi:include href="xml/ps_get_object_info_response.xml"/>
441
    <xi:include href="xml/ps_item_data.xml"/>
442
    <xi:include href="xml/ps_list_members_request.xml"/>
443
    <xi:include href="xml/ps_list_members_response.xml"/>
444
    <xi:include href="xml/ps_notification.xml"/>
445
    <xi:include href="xml/ps_notify.xml"/>
446
    <xi:include href="xml/ps_object.xml"/>
447
    <xi:include href="xml/ps_query_objects_request.xml"/>
448
    <xi:include href="xml/ps_query_objects_response.xml"/>
449
    <xi:include href="xml/ps_remove_collection_request.xml"/>
450
    <xi:include href="xml/ps_remove_entity_request.xml"/>
451
    <xi:include href="xml/ps_remove_from_collection_request.xml"/>
452
    <xi:include href="xml/ps_request_abstract.xml"/>
453
    <xi:include href="xml/ps_resolve_identifier_request.xml"/>
454
    <xi:include href="xml/ps_resolve_identifier_response.xml"/>
455
    <xi:include href="xml/ps_resolve_input.xml"/>
456
    <xi:include href="xml/ps_response_abstract.xml"/>
457
    <xi:include href="xml/ps_set_object_info_request.xml"/>
458
    <xi:include href="xml/ps_test_membership_request.xml"/>
459
    <xi:include href="xml/ps_test_membership_response.xml"/>
460
    <xi:include href="xml/sb2_consent.xml"/>
461
    <xi:include href="xml/sb2_credentials_context.xml"/>
462
    <xi:include href="xml/sb2_endpoint_update.xml"/>
463
    <xi:include href="xml/sb2_redirect_request.xml"/>
464
    <xi:include href="xml/sb2_sender.xml"/>
465
    <xi:include href="xml/sb2_target_identity.xml"/>
466
    <xi:include href="xml/sb2_timeout.xml"/>
467
    <xi:include href="xml/sb2_usage_directive.xml"/>
468
    <xi:include href="xml/sb2_user_interaction_header.xml"/>
469
    <xi:include href="xml/sbf_framework.xml"/>
470
    <xi:include href="xml/sec_token_policy.xml"/>
471
    <xi:include href="xml/sec_token.xml"/>
472
    <xi:include href="xml/sec_transited_provider_path.xml"/>
473
    <xi:include href="xml/subs_notification.xml"/>
474
    <xi:include href="xml/subs_notify_response.xml"/>
475
    <xi:include href="xml/subsref_app_data.xml"/>
476
    <xi:include href="xml/subsref_create_item.xml"/>
477
    <xi:include href="xml/subsref_create_response.xml"/>
478
    <xi:include href="xml/subsref_create.xml"/>
479
    <xi:include href="xml/subsref_data_response.xml"/>
480
    <xi:include href="xml/subsref_data.xml"/>
481
    <xi:include href="xml/subsref_delete_item.xml"/>
482
    <xi:include href="xml/subsref_delete_response.xml"/>
483
    <xi:include href="xml/subsref_delete.xml"/>
484
    <xi:include href="xml/subsref_item_data.xml"/>
485
    <xi:include href="xml/subs_ref_item.xml"/>
486
    <xi:include href="xml/subsref_modify_item.xml"/>
487
    <xi:include href="xml/subsref_modify_response.xml"/>
488
    <xi:include href="xml/subsref_modify.xml"/>
489
    <xi:include href="xml/subsref_notification.xml"/>
490
    <xi:include href="xml/subsref_notify_response.xml"/>
491
    <xi:include href="xml/subsref_notify.xml"/>
492
    <xi:include href="xml/subsref_query_item.xml"/>
493
    <xi:include href="xml/subsref_query_response.xml"/>
494
    <xi:include href="xml/subsref_query.xml"/>
495
    <xi:include href="xml/subsref_result_query.xml"/>
496
    <xi:include href="xml/subsref_subscription.xml"/>
497
    <xi:include href="xml/subsref_test_item.xml"/>
498
    <xi:include href="xml/subs_subscription.xml"/>
499
    <xi:include href="xml/util_empty.xml"/>
500
    <xi:include href="xml/util_extension.xml"/>
501
    <xi:include href="xml/util_response.xml"/>
502
    <xi:include href="xml/util_status.xml"/>
503
  </chapter>
504

  
505 298
  <chapter id="soap">
506 299
    <title>Object from the SOAP 1.1 schemas</title>
507 300
    <xi:include href="xml/soap_body.xml"/>
......
520 313
    <xi:include href="xml/dsig_strings.xml"/>
521 314
  </chapter>
522 315

  
523
  <chapter id="ws-addr">
524
    <title>Object from the WS-* schemas</title>
525
    <xi:include href="xml/wsa_attributed_any.xml"/>
526
    <xi:include href="xml/wsa_attributed_qname.xml"/>
527
    <xi:include href="xml/wsa_attributed_unsigned_long.xml"/>
528
    <xi:include href="xml/wsa_attributed_uri.xml"/>
529
    <xi:include href="xml/wsa_endpoint_reference.xml"/>
530
    <xi:include href="xml/wsa_metadata.xml"/>
531
    <xi:include href="xml/wsa_problem_action.xml"/>
532
    <xi:include href="xml/wsa_reference_parameters.xml"/>
533
    <xi:include href="xml/wsa_relates_to.xml"/>
534
    <xi:include href="xml/wsse_embedded.xml"/>
535
    <xi:include href="xml/wsse_reference.xml"/>
536
    <xi:include href="xml/wsse_security_header.xml"/>
537
    <xi:include href="xml/wsse_security_token_reference.xml"/>
538
    <xi:include href="xml/wsse_transformation_parameters.xml"/>
539
    <xi:include href="xml/wsse_username_token.xml"/>
540
    <xi:include href="xml/wsu_timestamp.xml"/>
541
    <xi:include href="xml/ws_strings.xml"/>
542
  </chapter>
543 316
  </reference>
544 317

  
545 318
  <index id="api-index-full">
docs/reference/lasso/lasso-sections.txt
331 331
LASSO_NAME_IDENTIFIER_MAPPING_GET_CLASS
332 332
</SECTION>
333 333

  
334
<SECTION>
335
<FILE>wsf_profile</FILE>
336
<TITLE>LassoWsfProfile</TITLE>
337
LassoWsfProfile
338
lasso_wsf_profile_get_identity
339
lasso_wsf_profile_get_session
340
lasso_wsf_profile_is_identity_dirty
341
lasso_wsf_profile_is_session_dirty
342
lasso_wsf_profile_set_identity_from_dump
343
lasso_wsf_profile_set_session_from_dump
344
lasso_wsf_profile_build_soap_request_msg
345
lasso_wsf_profile_build_soap_response_msg
346
lasso_wsf_profile_init_soap_request
347
lasso_wsf_profile_init_soap_response
348
lasso_wsf_profile_process_soap_request_msg
349
lasso_wsf_profile_process_soap_response_msg
350
lasso_wsf_profile_new
351
lasso_wsf_profile_new_full
352
lasso_wsf_profile_set_description_from_offering
353
lasso_wsf_profile_set_description
354
lasso_wsf_profile_get_description
355
lasso_wsf_profile_get_resource_offering
356
lasso_wsf_profile_set_security_mech_id
357
lasso_wsf_profile_get_security_mech_id
358
lasso_wsf_profile_init
359
lasso_wsf_profile_get_remote_provider
360
lasso_wsf_profile_get_remote_provider_id
361
lasso_wsf_profile_get_soap_fault
362
lasso_wsf_profile_set_soap_fault
363
lasso_wsf_profile_set_status_code
364
lasso_wsf_profile_get_status_code
365
lasso_wsf_profile_set_msg_url_from_description
366
lasso_wsf_profile_set_resource_offering
367
lasso_wsf_profile_init_interaction_service_redirect
368
<SUBSECTION Standard>
369
LASSO_WSF_PROFILE
370
LASSO_IS_WSF_PROFILE
371
LASSO_TYPE_WSF_PROFILE
372
lasso_wsf_profile_get_type
373
LASSO_WSF_PROFILE_CLASS
374
LASSO_IS_WSF_PROFILE_CLASS
375
LASSO_WSF_PROFILE_GET_CLASS
376
</SECTION>
377

  
378 334
<SECTION>
379 335
<FILE>authentication</FILE>
380 336
LassoUserAccount
......
500 456
LASSO_DISCOVERY_GET_CLASS
501 457
</SECTION>
502 458

  
503
<SECTION>
504
<FILE>sa_sasl_request</FILE>
505
<TITLE>LassoSaSASLRequest</TITLE>
506
LassoSaSASLRequest
507
lasso_sa_sasl_request_new
508
<SUBSECTION Standard>
509
LASSO_SA_SASL_REQUEST
510
LASSO_IS_SA_SASL_REQUEST
511
LASSO_TYPE_SA_SASL_REQUEST
512
lasso_sa_sasl_request_get_type
513
LASSO_SA_SASL_REQUEST_CLASS
514
LASSO_IS_SA_SASL_REQUEST_CLASS
515
LASSO_SA_SASL_REQUEST_GET_CLASS
516
</SECTION>
517

  
518
<SECTION>
519
<FILE>dst_modify</FILE>
520
<TITLE>LassoDstModify</TITLE>
521
LassoDstModify
522
lasso_dst_modify_new
523
<SUBSECTION Standard>
524
LASSO_DST_MODIFY
525
LASSO_IS_DST_MODIFY
526
LASSO_TYPE_DST_MODIFY
527
lasso_dst_modify_get_type
528
LASSO_DST_MODIFY_CLASS
529
LASSO_IS_DST_MODIFY_CLASS
530
LASSO_DST_MODIFY_GET_CLASS
531
</SECTION>
532

  
533
<SECTION>
534
<FILE>dst_query</FILE>
535
<TITLE>LassoDstQuery</TITLE>
536
LassoDstQuery
537
lasso_dst_query_new
538
<SUBSECTION Standard>
539
LASSO_DST_QUERY
540
LASSO_IS_DST_QUERY
541
LASSO_TYPE_DST_QUERY
542
lasso_dst_query_get_type
543
LASSO_DST_QUERY_CLASS
544
LASSO_IS_DST_QUERY_CLASS
545
LASSO_DST_QUERY_GET_CLASS
546
</SECTION>
547

  
548 459
<SECTION>
549 460
<FILE>lib_federation_termination_notification</FILE>
550 461
<TITLE>LassoLibFederationTerminationNotification</TITLE>
......
833 744
LASSO_SAML2_FIELD_SIGALG
834 745
</SECTION>
835 746

  
836
<SECTION>
837
<FILE>id_wsf_strings</FILE>
838
<TITLE>ID-WSF 1.0 Strings</TITLE>
839
<SUBSECTION Namespaces>
840
LASSO_DISCO_HREF
841
LASSO_DISCO_PREFIX
842
LASSO_EP_HREF
843
LASSO_EP_PREFIX
844
LASSO_IS_HREF
845
LASSO_IS_PREFIX
846
LASSO_PP10_HREF
847
LASSO_PP10_PREFIX
848
LASSO_SA_HREF
849
LASSO_SA_PREFIX
850
LASSO_SEC_HREF
851
LASSO_SEC_PREFIX
852
LASSO_SOAP_BINDING_EXT_HREF
853
LASSO_SOAP_BINDING_EXT_PREFIX
854
LASSO_SOAP_BINDING_HREF
855
LASSO_SOAP_BINDING_PREFIX
856
<SUBSECTION Security Mechanisms>
857
LASSO_SECURITY_MECH_NULL
858
LASSO_SECURITY_MECH_X509
859
LASSO_SECURITY_MECH_SAML
860
LASSO_SECURITY_MECH_BEARER
861
LASSO_SECURITY_MECH_TLS
862
LASSO_SECURITY_MECH_TLS_X509
863
LASSO_SECURITY_MECH_TLS_SAML
864
LASSO_SECURITY_MECH_TLS_BEARER
865
LASSO_SECURITY_MECH_CLIENT_TLS
866
LASSO_SECURITY_MECH_CLIENT_TLS_X509
867
LASSO_SECURITY_MECH_CLIENT_TLS_SAML
868
LASSO_SECURITY_MECH_CLIENT_TLS_BEARER
869
LASSO_SECURITY11_MECH_X509
870
LASSO_SECURITY11_MECH_SAML
871
LASSO_SECURITY11_MECH_BEARER
872
LASSO_SECURITY11_MECH_TLS_X509
873
LASSO_SECURITY11_MECH_TLS_SAML
874
LASSO_SECURITY11_MECH_TLS_BEARER
875
LASSO_SA_SASL_SERVICE_NAME
876
<SUBSECTION Interaction Service Strings>
877
LASSO_IS_INTERACT_ATTR_INTERACT_IF_NEEDED
878
LASSO_IS_INTERACT_ATTR_DO_NOT_INTERACT
879
LASSO_IS_INTERACT_ATTR_DO_NOT_INTERACT_FOR_DATA
880
<SUBSECTION Discovery Service Status Codes>
881
LASSO_DISCO_STATUS_CODE_OK
882
LASSO_DISCO_STATUS_CODE_DISCO_OK
883
LASSO_DISCO_STATUS_CODE_FAILED
884
LASSO_DISCO_STATUS_CODE_REMOVE_ENTRY
885
LASSO_DISCO_STATUS_CODE_FORBIDDEN
886
LASSO_DISCO_STATUS_CODE_NO_RESULTS
887
LASSO_DISCO_STATUS_CODE_DIRECTIVES
888
<SUBSECTION DST Service Status Codes>
889
LASSO_DST_STATUS_CODE_OK
890
LASSO_DST_STATUS_CODE_FAILED
891
LASSO_DST_STATUS_CODE_PARTIAL
892
LASSO_DST_STATUS_CODE_ACTION_NOT_AUTHORIZED
893
LASSO_DST_STATUS_CODE_ACTION_NOT_SUPPORTED
894
LASSO_DST_STATUS_CODE_ALL_RETURNED
895
LASSO_DST_STATUS_CODE_CHANGE_HISTORY_NOT_SUPPORTED
896
LASSO_DST_STATUS_CODE_CHANGED_SINCE_RETURNS_ALL
897
LASSO_DST_STATUS_CODE_DATA_TOO_LONG
898
LASSO_DST_STATUS_CODE_EXISTS_ALREADY
899
LASSO_DST_STATUS_CODE_EXTENSION_NOT_SUPPORTED
900
LASSO_DST_STATUS_CODE_INVALID_DATA
901
LASSO_DST_STATUS_CODE_INVALID_RESOURCE_ID
902
LASSO_DST_STATUS_CODE_INVALID_SELECT
903
LASSO_DST_STATUS_CODE_MISSING_NEW_DATA_ELEMENT
904
LASSO_DST_STATUS_CODE_MISSING_RESOURCE_ID_ELEMENT
905
LASSO_DST_STATUS_CODE_MISSING_SELECT
906
LASSO_DST_STATUS_CODE_MODIFIED_SINCE
907
LASSO_DST_STATUS_CODE_NO_MORE_ELEMENTS
908
LASSO_DST_STATUS_CODE_NO_MULTIPLE_ALLOWED
909
LASSO_DST_STATUS_CODE_NO_MULTIPLE_RESOURCES
910
LASSO_DST_STATUS_CODE_TIME_OUT
911
LASSO_DST_STATUS_CODE_UNEXPECTED_ERROR
912
<SUBSECTION Authentication Service Status Codes>
913
LASSO_SA_STATUS_CODE_OK
914
LASSO_SA_STATUS_CODE_CONTINUE
915
LASSO_SA_STATUS_CODE_ABORT
916
<SUBSECTION SOAP Binding Processing Context Values>
917
LASSO_SOAP_BINDING_PROCESS_CONTEXT_PRINCIPAL_OFFLINE
918
LASSO_SOAP_BINDING_PROCESS_CONTEXT_PRINCIPAL_ONLINE
919
LASSO_SOAP_BINDING_PROCESS_CONTEXT_SIMULATE
920
</SECTION>
921

  
922
<SECTION>
923
<FILE>id_wsf2_strings</FILE>
924
<TITLE>Strings for ID-WSF 2.0</TITLE>
925
<SUBSECTION Namespaces>
926
LASSO_IDWSF2_SB2_HREF
927
LASSO_IDWSF2_SB2_PREFIX
928
LASSO_IDWSF2_SBF_HREF
929
LASSO_IDWSF2_SBF_PREFIX
930
LASSO_IDWSF2_DISCOVERY_HREF
931
LASSO_IDWSF2_DISCOVERY_PREFIX
932
LASSO_IDWSF2_DST_HREF
933
LASSO_IDWSF2_DST_PREFIX
934
LASSO_IDWSF2_DSTREF_HREF
935
LASSO_IDWSF2_DSTREF_PREFIX
936
LASSO_IDWSF2_IMS_HREF
937
LASSO_IDWSF2_IMS_PREFIX
938
LASSO_IDWSF2_IS_HREF
939
LASSO_IDWSF2_IS_PREFIX
940
LASSO_IDWSF2_PS_HREF
941
LASSO_IDWSF2_PS_PREFIX
942
LASSO_IDWSF2_SUBS_HREF
943
LASSO_IDWSF2_SUBS_PREFIX
944
LASSO_IDWSF2_SUBSREF_HREF
945
LASSO_IDWSF2_SUBSREF_PREFIX
946
LASSO_IDWSF2_UTIL_HREF
947
LASSO_IDWSF2_UTIL_PREFIX
948
LASSO_IDWSF2_SEC_HREF
949
LASSO_IDWSF2_SEC_PREFIX
950
</SECTION>
951 747

  
952 748
<SECTION>
953 749
<FILE>soap_strings</FILE>
......
966 762
LASSO_DS_PREFIX
967 763
</SECTION>
968 764

  
969
<SECTION>
970
<FILE>disco_modify</FILE>
971
<TITLE>LassoDiscoModify</TITLE>
972
LassoDiscoModify
973
lasso_disco_modify_new
974
<SUBSECTION Standard>
975
LASSO_DISCO_MODIFY
976
LASSO_IS_DISCO_MODIFY
977
LASSO_TYPE_DISCO_MODIFY
978
lasso_disco_modify_get_type
979
LASSO_DISCO_MODIFY_CLASS
980
LASSO_IS_DISCO_MODIFY_CLASS
981
LASSO_DISCO_MODIFY_GET_CLASS
982
</SECTION>
983

  
984 765
<SECTION>
985 766
<FILE>ds_key_info</FILE>
986 767
<TITLE>LassoDsKeyInfo</TITLE>
......
996 777
LASSO_DS_KEY_INFO_GET_CLASS
997 778
</SECTION>
998 779

  
999
<SECTION>
1000
<FILE>disco_remove_entry</FILE>
1001
<TITLE>LassoDiscoRemoveEntry</TITLE>
1002
LassoDiscoRemoveEntry
1003
lasso_disco_remove_entry_new
1004
<SUBSECTION Standard>
1005
LASSO_DISCO_REMOVE_ENTRY
1006
LASSO_IS_DISCO_REMOVE_ENTRY
1007
LASSO_TYPE_DISCO_REMOVE_ENTRY
1008
lasso_disco_remove_entry_get_type
1009
LASSO_DISCO_REMOVE_ENTRY_CLASS
1010
LASSO_IS_DISCO_REMOVE_ENTRY_CLASS
1011
LASSO_DISCO_REMOVE_ENTRY_GET_CLASS
1012
</SECTION>
1013

  
1014
<SECTION>
1015
<FILE>sec_resource_access_statement</FILE>
1016
<TITLE>LassoSecResourceAccessStatement</TITLE>
1017
LassoSecResourceAccessStatement
1018
lasso_sec_resource_access_statement_new
1019
<SUBSECTION Standard>
1020
LASSO_SEC_RESOURCE_ACCESS_STATEMENT
1021
LASSO_IS_SEC_RESOURCE_ACCESS_STATEMENT
1022
LASSO_TYPE_SEC_RESOURCE_ACCESS_STATEMENT
1023
lasso_sec_resource_access_statement_get_type
1024
LASSO_SEC_RESOURCE_ACCESS_STATEMENT_CLASS
1025
LASSO_IS_SEC_RESOURCE_ACCESS_STATEMENT_CLASS
1026
LASSO_SEC_RESOURCE_ACCESS_STATEMENT_GET_CLASS
1027
</SECTION>
1028

  
1029 780
<SECTION>
1030 781
<FILE>saml_subject_locality</FILE>
1031 782
<TITLE>LassoSamlSubjectLocality</TITLE>
......
1101 852
LASSO_SAMLP_REQUEST_ABSTRACT_GET_CLASS
1102 853
</SECTION>
1103 854

  
1104
<SECTION>
1105
<FILE>disco_description</FILE>
1106
<TITLE>LassoDiscoDescription</TITLE>
1107
LassoDiscoDescription
1108
lasso_disco_description_copy
1109
lasso_disco_description_new
1110
lasso_disco_description_new_with_WsdlRef
1111
lasso_disco_description_new_with_BriefSoapHttpDescription
1112
lasso_disco_description_has_saml_authentication
1113
lasso_disco_description_has_x509_authentication
1114
<SUBSECTION Standard>
1115
LASSO_DISCO_DESCRIPTION
1116
LASSO_IS_DISCO_DESCRIPTION
1117
LASSO_TYPE_DISCO_DESCRIPTION
1118
lasso_disco_description_get_type
1119
LASSO_DISCO_DESCRIPTION_CLASS
1120
LASSO_IS_DISCO_DESCRIPTION_CLASS
1121
LASSO_DISCO_DESCRIPTION_GET_CLASS
1122
</SECTION>
1123

  
1124
<SECTION>
1125
<FILE>sa_sasl_response</FILE>
1126
<TITLE>LassoSaSASLResponse</TITLE>
1127
LassoSaSASLResponse
1128
lasso_sa_sasl_response_new
1129
<SUBSECTION Standard>
1130
LASSO_SA_SASL_RESPONSE
1131
LASSO_IS_SA_SASL_RESPONSE
1132
LASSO_TYPE_SA_SASL_RESPONSE
1133
lasso_sa_sasl_response_get_type
1134
LASSO_SA_SASL_RESPONSE_CLASS
1135
LASSO_IS_SA_SASL_RESPONSE_CLASS
1136
LASSO_SA_SASL_RESPONSE_GET_CLASS
1137
</SECTION>
1138

  
1139 855
<SECTION>
1140 856
<FILE>saml_name_identifier</FILE>
1141 857
<TITLE>LassoSamlNameIdentifier</TITLE>
......
1152 868
LASSO_SAML_NAME_IDENTIFIER_GET_CLASS
1153 869
</SECTION>
1154 870

  
1155
<SECTION>
1156
<FILE>dst_modification</FILE>
1157
<TITLE>LassoDstModification</TITLE>
1158
LassoDstModification
1159
lasso_dst_modification_new
1160
<SUBSECTION Standard>
1161
LASSO_DST_MODIFICATION
1162
LASSO_IS_DST_MODIFICATION
1163
LASSO_TYPE_DST_MODIFICATION
1164
lasso_dst_modification_get_type
1165
LASSO_DST_MODIFICATION_CLASS
1166
LASSO_IS_DST_MODIFICATION_CLASS
1167
LASSO_DST_MODIFICATION_GET_CLASS
1168
</SECTION>
1169

  
1170 871
<SECTION>
1171 872
<FILE>lib_idp_list</FILE>
1172 873
<TITLE>LassoLibIDPList</TITLE>
......
1197 898
LASSO_LIB_AUTHN_CONTEXT_GET_CLASS
1198 899
</SECTION>
1199 900

  
1200
<SECTION>
1201
<FILE>dst_new_data</FILE>
1202
<TITLE>LassoDstNewData</TITLE>
1203
LassoDstNewData
1204
lasso_dst_new_data_new
1205
<SUBSECTION Standard>
1206
LASSO_DST_NEW_DATA
1207
LASSO_IS_DST_NEW_DATA
1208
LASSO_TYPE_DST_NEW_DATA
1209
lasso_dst_new_data_get_type
1210
LASSO_DST_NEW_DATA_CLASS
1211
LASSO_IS_DST_NEW_DATA_CLASS
1212
LASSO_DST_NEW_DATA_GET_CLASS
1213
</SECTION>
1214

  
1215 901
<SECTION>
1216 902
<FILE>lib_idp_entries</FILE>
1217 903
<TITLE>LassoLibIDPEntries</TITLE>
......
1227 913
LASSO_LIB_IDP_ENTRIES_GET_CLASS
1228 914
</SECTION>
1229 915

  
1230
<SECTION>
1231
<FILE>is_help</FILE>
1232
LASSO_IS_IS_HELP
1233
<TITLE>LassoIsHelp</TITLE>
1234
LassoIsHelp
1235
lasso_is_help_new
1236
<SUBSECTION Standard>
1237
LASSO_IS_HELP
1238
LASSO_TYPE_IS_HELP
1239
lasso_is_help_get_type
1240
LASSO_IS_HELP_CLASS
1241
LASSO_IS_IS_HELP_CLASS
1242
LASSO_IS_HELP_GET_CLASS
1243
</SECTION>
1244

  
1245 916
<SECTION>
1246 917
<FILE>samlp_request</FILE>
1247 918
<TITLE>LassoSamlpRequest</TITLE>
......
1385 1056
LASSO_SOAP_FAULT_GET_CLASS
1386 1057
</SECTION>
1387 1058

  
1388
<SECTION>
1389
<FILE>disco_options</FILE>
1390
<TITLE>LassoDiscoOptions</TITLE>
1391
LassoDiscoOptions
1392
lasso_disco_options_new
1393
<SUBSECTION Standard>
1394
LASSO_DISCO_OPTIONS
1395
LASSO_IS_DISCO_OPTIONS
1396
LASSO_TYPE_DISCO_OPTIONS
1397
lasso_disco_options_get_type
1398
LASSO_DISCO_OPTIONS_CLASS
1399
LASSO_IS_DISCO_OPTIONS_CLASS
1400
LASSO_DISCO_OPTIONS_GET_CLASS
1401
</SECTION>
1402

  
1403 1059
<SECTION>
1404 1060
<FILE>ds_key_value</FILE>
1405 1061
<TITLE>LassoDsKeyValue</TITLE>
......
1430 1086
LASSO_LIB_SUBJECT_GET_CLASS
1431 1087
</SECTION>
1432 1088

  
1433
<SECTION>
1434
<FILE>disco_authorize_requester</FILE>
1435
<TITLE>LassoDiscoAuthorizeRequester</TITLE>
1436
LassoDiscoAuthorizeRequester
1437
lasso_disco_authorize_requester_new
1438
<SUBSECTION Standard>
1439
LASSO_DISCO_AUTHORIZE_REQUESTER
1440
LASSO_IS_DISCO_AUTHORIZE_REQUESTER
1441
LASSO_TYPE_DISCO_AUTHORIZE_REQUESTER
1442
lasso_disco_authorize_requester_get_type
1443
LASSO_DISCO_AUTHORIZE_REQUESTER_CLASS
1444
LASSO_IS_DISCO_AUTHORIZE_REQUESTER_CLASS
1445
LASSO_DISCO_AUTHORIZE_REQUESTER_GET_CLASS
1446
</SECTION>
1447

  
1448 1089
<SECTION>
1449 1090
<FILE>samlp_response</FILE>
1450 1091
<TITLE>LassoSamlpResponse</TITLE>
......
1475 1116
LASSO_SAML_ATTRIBUTE_DESIGNATOR_GET_CLASS
1476 1117
</SECTION>
1477 1118

  
1478
<SECTION>
1479
<FILE>disco_requested_service_type</FILE>
1480
<TITLE>LassoDiscoRequestedServiceType</TITLE>
1481
LassoDiscoRequestedServiceType
1482
lasso_disco_requested_service_type_new
1483
<SUBSECTION Standard>
1484
LASSO_DISCO_REQUESTED_SERVICE_TYPE
1485
LASSO_IS_DISCO_REQUESTED_SERVICE_TYPE
1486
LASSO_TYPE_DISCO_REQUESTED_SERVICE_TYPE
1487
lasso_disco_requested_service_type_get_type
1488
LASSO_DISCO_REQUESTED_SERVICE_TYPE_CLASS
1489
LASSO_IS_DISCO_REQUESTED_SERVICE_TYPE_CLASS
1490
LASSO_DISCO_REQUESTED_SERVICE_TYPE_GET_CLASS
1491
</SECTION>
1492

  
1493 1119
<SECTION>
1494 1120
<FILE>saml_authority_binding</FILE>
1495 1121
<TITLE>LassoSamlAuthorityBinding</TITLE>
......
1505 1131
LASSO_SAML_AUTHORITY_BINDING_GET_CLASS
1506 1132
</SECTION>
1507 1133

  
1508
<SECTION>
1509
<FILE>disco_send_single_logout</FILE>
1510
<TITLE>LassoDiscoSendSingleLogout</TITLE>
1511
LassoDiscoSendSingleLogout
1512
lasso_disco_send_single_logout_new
1513
<SUBSECTION Standard>
1514
LASSO_DISCO_SEND_SINGLE_LOGOUT
1515
LASSO_IS_DISCO_SEND_SINGLE_LOGOUT
1516
LASSO_TYPE_DISCO_SEND_SINGLE_LOGOUT
1517
lasso_disco_send_single_logout_get_type
1518
LASSO_DISCO_SEND_SINGLE_LOGOUT_CLASS
1519
LASSO_IS_DISCO_SEND_SINGLE_LOGOUT_CLASS
1520
LASSO_DISCO_SEND_SINGLE_LOGOUT_GET_CLASS
1521
</SECTION>
1522

  
1523 1134
<SECTION>
1524 1135
<FILE>lib_register_name_identifier_request</FILE>
1525 1136
<TITLE>LassoLibRegisterNameIdentifierRequest</TITLE>
......
1550 1161
LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_GET_CLASS
1551 1162
</SECTION>
1552 1163

  
1553
<SECTION>
1554
<FILE>dst_query_response</FILE>
1555
<TITLE>LassoDstQueryResponse</TITLE>
1556
LassoDstQueryResponse
1557
lasso_dst_query_response_new
1558
<SUBSECTION Standard>
1559
LASSO_DST_QUERY_RESPONSE
1560
LASSO_IS_DST_QUERY_RESPONSE
1561
LASSO_TYPE_DST_QUERY_RESPONSE
1562
lasso_dst_query_response_get_type
1563
LASSO_DST_QUERY_RESPONSE_CLASS
1564
LASSO_IS_DST_QUERY_RESPONSE_CLASS
1565
LASSO_DST_QUERY_RESPONSE_GET_CLASS
1566
</SECTION>
1567

  
1568
<SECTION>
1569
<FILE>is_interaction_response</FILE>
1570
LASSO_IS_IS_INTERACTION_RESPONSE
1571
<TITLE>LassoIsInteractionResponse</TITLE>
1572
LassoIsInteractionResponse
1573
lasso_is_interaction_response_new
1574
<SUBSECTION Standard>
1575
LASSO_IS_INTERACTION_RESPONSE
1576
LASSO_TYPE_IS_INTERACTION_RESPONSE
1577
lasso_is_interaction_response_get_type
1578
LASSO_IS_INTERACTION_RESPONSE_CLASS
1579
LASSO_IS_IS_INTERACTION_RESPONSE_CLASS
1580
LASSO_IS_INTERACTION_RESPONSE_GET_CLASS
1581
</SECTION>
1582

  
1583
<SECTION>
1584
<FILE>dst_query_item</FILE>
1585
<TITLE>LassoDstQueryItem</TITLE>
1586
LassoDstQueryItem
1587
lasso_dst_query_item_new
1588
<SUBSECTION Standard>
1589
LASSO_DST_QUERY_ITEM
1590
LASSO_IS_DST_QUERY_ITEM
1591
LASSO_TYPE_DST_QUERY_ITEM
1592
lasso_dst_query_item_get_type
1593
LASSO_DST_QUERY_ITEM_CLASS
1594
LASSO_IS_DST_QUERY_ITEM_CLASS
1595
LASSO_DST_QUERY_ITEM_GET_CLASS
1596
</SECTION>
1597

  
1598
<SECTION>
1599
<FILE>disco_query</FILE>
1600
<TITLE>LassoDiscoQuery</TITLE>
1601
LassoDiscoQuery
1602
lasso_disco_query_new
1603
<SUBSECTION Standard>
1604
LASSO_DISCO_QUERY
1605
LASSO_IS_DISCO_QUERY
1606
LASSO_TYPE_DISCO_QUERY
1607
lasso_disco_query_get_type
1608
LASSO_DISCO_QUERY_CLASS
1609
LASSO_IS_DISCO_QUERY_CLASS
1610
LASSO_DISCO_QUERY_GET_CLASS
1611
</SECTION>
1612

  
1613 1164
<SECTION>
1614 1165
<FILE>lib_register_name_identifier_response</FILE>
1615 1166
<TITLE>LassoLibRegisterNameIdentifierResponse</TITLE>
......
1626 1177
LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_GET_CLASS
1627 1178
</SECTION>
1628 1179

  
1629
<SECTION>
1630
<FILE>soap_binding_usage_directive</FILE>
1631
<TITLE>LassoSoapBindingUsageDirective</TITLE>
1632
LassoSoapBindingUsageDirective
1633
lasso_soap_binding_usage_directive_new
1634
<SUBSECTION Standard>
1635
LASSO_SOAP_BINDING_USAGE_DIRECTIVE
1636
LASSO_IS_SOAP_BINDING_USAGE_DIRECTIVE
1637
LASSO_TYPE_SOAP_BINDING_USAGE_DIRECTIVE
1638
lasso_soap_binding_usage_directive_get_type
1639
LASSO_SOAP_BINDING_USAGE_DIRECTIVE_CLASS
1640
LASSO_IS_SOAP_BINDING_USAGE_DIRECTIVE_CLASS
1641
LASSO_SOAP_BINDING_USAGE_DIRECTIVE_GET_CLASS
1642
</SECTION>
1643

  
1644
<SECTION>
1645
<FILE>sa_transform</FILE>
1646
<TITLE>LassoSaTransform</TITLE>
1647
LassoSaTransform
1648
lasso_sa_transform_new
1649
<SUBSECTION Standard>
1650
LASSO_SA_TRANSFORM
1651
LASSO_IS_SA_TRANSFORM
1652
LASSO_TYPE_SA_TRANSFORM
1653
lasso_sa_transform_get_type
1654
LASSO_SA_TRANSFORM_CLASS
1655
LASSO_IS_SA_TRANSFORM_CLASS
1656
LASSO_SA_TRANSFORM_GET_CLASS
1657
</SECTION>
1658

  
1659 1180
<SECTION>
1660 1181
<FILE>lib_name_identifier_mapping_request</FILE>
1661 1182
<TITLE>LassoLibNameIdentifierMappingRequest</TITLE>
......
1717 1238
LASSO_LIB_AUTHN_RESPONSE_ENVELOPE_GET_CLASS
1718 1239
</SECTION>
1719 1240

  
1720
<SECTION>
1721
<FILE>is_parameter</FILE>
1722
LASSO_IS_IS_PARAMETER
1723
<TITLE>LassoIsParameter</TITLE>
1724
LassoIsParameter
1725
lasso_is_parameter_new
1726
<SUBSECTION Standard>
1727
LASSO_IS_PARAMETER
1728
LASSO_TYPE_IS_PARAMETER
1729
lasso_is_parameter_get_type
1730
LASSO_IS_PARAMETER_CLASS
1731
LASSO_IS_IS_PARAMETER_CLASS
1732
LASSO_IS_PARAMETER_GET_CLASS
1733
</SECTION>
1734

  
1735 1241
<SECTION>
1736 1242
<FILE>saml_statement_abstract</FILE>
1737 1243
<TITLE>LassoSamlStatementAbstract</TITLE>
......
1746 1252
LASSO_SAML_STATEMENT_ABSTRACT_GET_CLASS
1747 1253
</SECTION>
1748 1254

  
1749
<SECTION>
1750
<FILE>disco_resource_offering</FILE>
1751
<TITLE>LassoDiscoResourceOffering</TITLE>
1752
LassoDiscoResourceOffering
1753
lasso_disco_resource_offering_new
1754
<SUBSECTION Standard>
1755
LASSO_DISCO_RESOURCE_OFFERING
1756
LASSO_IS_DISCO_RESOURCE_OFFERING
1757
LASSO_TYPE_DISCO_RESOURCE_OFFERING
1758
lasso_disco_resource_offering_get_type
1759
LASSO_DISCO_RESOURCE_OFFERING_CLASS
1760
LASSO_IS_DISCO_RESOURCE_OFFERING_CLASS
1761
LASSO_DISCO_RESOURCE_OFFERING_GET_CLASS
1762
</SECTION>
1763

  
1764
<SECTION>
1765
<FILE>soap_binding_correlation</FILE>
1766
<TITLE>LassoSoapBindingCorrelation</TITLE>
1767
LassoSoapBindingCorrelation
1768
lasso_soap_binding_correlation_new
1769
<SUBSECTION Standard>
1770
LASSO_SOAP_BINDING_CORRELATION
1771
LASSO_IS_SOAP_BINDING_CORRELATION
1772
LASSO_TYPE_SOAP_BINDING_CORRELATION
1773
lasso_soap_binding_correlation_get_type
1774
LASSO_SOAP_BINDING_CORRELATION_CLASS
1775
LASSO_IS_SOAP_BINDING_CORRELATION_CLASS
1776
LASSO_SOAP_BINDING_CORRELATION_GET_CLASS
1777
</SECTION>
1778

  
1779
<SECTION>
1780
<FILE>disco_service_instance</FILE>
1781
<TITLE>LassoDiscoServiceInstance</TITLE>
1782
LassoDiscoServiceInstance
1783
lasso_disco_service_instance_copy
1784
lasso_disco_service_instance_new
1785
<SUBSECTION Standard>
1786
LASSO_DISCO_SERVICE_INSTANCE
1787
LASSO_IS_DISCO_SERVICE_INSTANCE
1788
LASSO_TYPE_DISCO_SERVICE_INSTANCE
1789
lasso_disco_service_instance_get_type
1790
LASSO_DISCO_SERVICE_INSTANCE_CLASS
1791
LASSO_IS_DISCO_SERVICE_INSTANCE_CLASS
1792
LASSO_DISCO_SERVICE_INSTANCE_GET_CLASS
1793
</SECTION>
1794

  
1795
<SECTION>
1796
<FILE>sa_parameter</FILE>
1797
<TITLE>LassoSaParameter</TITLE>
1798
LassoSaParameter
1799
lasso_sa_parameter_new
1800
<SUBSECTION Standard>
1801
LASSO_SA_PARAMETER
1802
LASSO_IS_SA_PARAMETER
1803
LASSO_TYPE_SA_PARAMETER
1804
lasso_sa_parameter_get_type
1805
LASSO_SA_PARAMETER_CLASS
1806
LASSO_IS_SA_PARAMETER_CLASS
1807
LASSO_SA_PARAMETER_GET_CLASS
1808
</SECTION>
1809

  
1810
<SECTION>
1811
<FILE>disco_resource_id</FILE>
1812
<TITLE>LassoDiscoResourceID</TITLE>
1813
LassoDiscoResourceID
1814
lasso_disco_resource_id_new
1815
<SUBSECTION Standard>
1816
LASSO_DISCO_RESOURCE_ID
1817
LASSO_IS_DISCO_RESOURCE_ID
1818
LASSO_TYPE_DISCO_RESOURCE_ID
1819
lasso_disco_resource_id_get_type
1820
LASSO_DISCO_RESOURCE_ID_CLASS
1821
LASSO_IS_DISCO_RESOURCE_ID_CLASS
1822
LASSO_DISCO_RESOURCE_ID_GET_CLASS
1823
</SECTION>
1824

  
1825 1255
<SECTION>
1826 1256
<FILE>soap_header</FILE>
1827 1257
<TITLE>LassoSoapHeader</TITLE>
......
1838 1268
LASSO_SOAP_HEADER_GET_CLASS
1839 1269
</SECTION>
1840 1270

  
1841
<SECTION>
1842
<FILE>is_user_interaction</FILE>
1843
LASSO_IS_IS_USER_INTERACTION
1844
<TITLE>LassoIsUserInteraction</TITLE>
1845
LassoIsUserInteraction
1846
lasso_is_user_interaction_new
1847
<SUBSECTION Standard>
1848
LASSO_IS_USER_INTERACTION
1849
LASSO_TYPE_IS_USER_INTERACTION
1850
lasso_is_user_interaction_get_type
1851
LASSO_IS_USER_INTERACTION_CLASS
1852
LASSO_IS_IS_USER_INTERACTION_CLASS
1853
LASSO_IS_USER_INTERACTION_GET_CLASS
1854
</SECTION>
1855

  
1856
<SECTION>
1857
<FILE>disco_query_response</FILE>
1858
<TITLE>LassoDiscoQueryResponse</TITLE>
1859
LassoDiscoQueryResponse
1860
lasso_disco_query_response_new
1861
<SUBSECTION Standard>
1862
LASSO_DISCO_QUERY_RESPONSE
1863
LASSO_IS_DISCO_QUERY_RESPONSE
1864
LASSO_TYPE_DISCO_QUERY_RESPONSE
1865
lasso_disco_query_response_get_type
1866
LASSO_DISCO_QUERY_RESPONSE_CLASS
1867
LASSO_IS_DISCO_QUERY_RESPONSE_CLASS
1868
LASSO_DISCO_QUERY_RESPONSE_GET_CLASS
1869
</SECTION>
1870

  
1871
<SECTION>
1872
<FILE>disco_encrypted_resource_id</FILE>
1873
<TITLE>LassoDiscoEncryptedResourceID</TITLE>
1874
LassoDiscoEncryptedResourceID
1875
lasso_disco_encrypted_resource_id_new
1876
<SUBSECTION Standard>
1877
LASSO_DISCO_ENCRYPTED_RESOURCE_ID
1878
LASSO_IS_DISCO_ENCRYPTED_RESOURCE_ID
1879
LASSO_TYPE_DISCO_ENCRYPTED_RESOURCE_ID
1880
lasso_disco_encrypted_resource_id_get_type
1881
LASSO_DISCO_ENCRYPTED_RESOURCE_ID_CLASS
1882
LASSO_IS_DISCO_ENCRYPTED_RESOURCE_ID_CLASS
1883
LASSO_DISCO_ENCRYPTED_RESOURCE_ID_GET_CLASS
1884
</SECTION>
1885

  
1886 1271
<SECTION>
1887 1272
<FILE>lib_logout_request</FILE>
1888 1273
<TITLE>LassoLibLogoutRequest</TITLE>
......
1899 1284
LASSO_LIB_LOGOUT_REQUEST_GET_CLASS
1900 1285
</SECTION>
1901 1286

  
1902
<SECTION>
1903
<FILE>soap_binding_ext_credentials_context</FILE>
1904
<TITLE>LassoSoapBindingExtCredentialsContext</TITLE>
1905
LassoSoapBindingExtCredentialsContext
1906
lasso_soap_binding_ext_credentials_context_new
1907
<SUBSECTION Standard>
1908
LASSO_SOAP_BINDING_EXT_CREDENTIALS_CONTEXT
1909
LASSO_IS_SOAP_BINDING_EXT_CREDENTIALS_CONTEXT
1910
LASSO_TYPE_SOAP_BINDING_EXT_CREDENTIALS_CONTEXT
1911
lasso_soap_binding_ext_credentials_context_get_type
1912
LASSO_SOAP_BINDING_EXT_CREDENTIALS_CONTEXT_CLASS
1913
LASSO_IS_SOAP_BINDING_EXT_CREDENTIALS_CONTEXT_CLASS
1914
LASSO_SOAP_BINDING_EXT_CREDENTIALS_CONTEXT_GET_CLASS
1915
</SECTION>
1916

  
1917 1287
<SECTION>
1918 1288
<FILE>misc_text_node</FILE>
1919 1289
<TITLE>LassoMiscTextNode</TITLE>
......
1933 1303
LASSO_MISC_TEXT_NODE_GET_CLASS
1934 1304
</SECTION>
1935 1305

  
1936
<SECTION>
1937
<FILE>disco_generate_bearer_token</FILE>
1938
<TITLE>LassoDiscoGenerateBearerToken</TITLE>
1939
LassoDiscoGenerateBearerToken
1940
lasso_disco_generate_bearer_token_new
1941
<SUBSECTION Standard>
1942
LASSO_DISCO_GENERATE_BEARER_TOKEN
1943
LASSO_IS_DISCO_GENERATE_BEARER_TOKEN
1944
LASSO_TYPE_DISCO_GENERATE_BEARER_TOKEN
1945
lasso_disco_generate_bearer_token_get_type
1946
LASSO_DISCO_GENERATE_BEARER_TOKEN_CLASS
1947
LASSO_IS_DISCO_GENERATE_BEARER_TOKEN_CLASS
1948
LASSO_DISCO_GENERATE_BEARER_TOKEN_GET_CLASS
1949
</SECTION>
1950

  
1951 1306
<SECTION>
1952 1307
<FILE>saml_subject_confirmation</FILE>
1953 1308
<TITLE>LassoSamlSubjectConfirmation</TITLE>
......
1978 1333
LASSO_SAMLP_STATUS_GET_CLASS
1979 1334
</SECTION>
1980 1335

  
1981
<SECTION>
1982
<FILE>disco_modify_response</FILE>
1983
<TITLE>LassoDiscoModifyResponse</TITLE>
1984
LassoDiscoModifyResponse
1985
lasso_disco_modify_response_new
1986
<SUBSECTION Standard>
1987
LASSO_DISCO_MODIFY_RESPONSE
1988
LASSO_IS_DISCO_MODIFY_RESPONSE
1989
LASSO_TYPE_DISCO_MODIFY_RESPONSE
1990
lasso_disco_modify_response_get_type
1991
LASSO_DISCO_MODIFY_RESPONSE_CLASS
1992
LASSO_IS_DISCO_MODIFY_RESPONSE_CLASS
1993
LASSO_DISCO_MODIFY_RESPONSE_GET_CLASS
1994
</SECTION>
1995

  
1996
<SECTION>
1997
<FILE>soap_binding_provider</FILE>
1998
<TITLE>LassoSoapBindingProvider</TITLE>
1999
LassoSoapBindingProvider
2000
lasso_soap_binding_provider_new
2001
<SUBSECTION Standard>
2002
LASSO_SOAP_BINDING_PROVIDER
2003
LASSO_IS_SOAP_BINDING_PROVIDER
2004
LASSO_TYPE_SOAP_BINDING_PROVIDER
2005
lasso_soap_binding_provider_get_type
2006
LASSO_SOAP_BINDING_PROVIDER_CLASS
2007
LASSO_IS_SOAP_BINDING_PROVIDER_CLASS
2008
LASSO_SOAP_BINDING_PROVIDER_GET_CLASS
2009
</SECTION>
2010

  
2011 1336
<SECTION>
2012 1337
<FILE>saml_condition_abstract</FILE>
2013 1338
<TITLE>LassoSamlConditionAbstract</TITLE>
......
2022 1347
LASSO_SAML_CONDITION_ABSTRACT_GET_CLASS
2023 1348
</SECTION>
2024 1349

  
2025
<SECTION>
2026
<FILE>soap_binding_consent</FILE>
2027
<TITLE>LassoSoapBindingConsent</TITLE>
2028
LassoSoapBindingConsent
2029
lasso_soap_binding_consent_new
2030
<SUBSECTION Standard>
2031
LASSO_SOAP_BINDING_CONSENT
2032
LASSO_IS_SOAP_BINDING_CONSENT
2033
LASSO_TYPE_SOAP_BINDING_CONSENT
2034
lasso_soap_binding_consent_get_type
2035
LASSO_SOAP_BINDING_CONSENT_CLASS
2036
LASSO_IS_SOAP_BINDING_CONSENT_CLASS
2037
LASSO_SOAP_BINDING_CONSENT_GET_CLASS
2038
</SECTION>
2039

  
2040 1350
<SECTION>
2041 1351
<FILE>soap_body</FILE>
2042 1352
<TITLE>LassoSoapBody</TITLE>
......
2053 1363
LASSO_SOAP_BODY_GET_CLASS
2054 1364
</SECTION>
2055 1365

  
2056
<SECTION>
2057
<FILE>is_text</FILE>
2058
LASSO_IS_IS_TEXT
2059
<TITLE>LassoIsText</TITLE>
2060
LassoIsText
2061
lasso_is_text_new
2062
<SUBSECTION Standard>
2063
LASSO_IS_TEXT
2064
LASSO_TYPE_IS_TEXT
2065
lasso_is_text_get_type
2066
LASSO_IS_TEXT_CLASS
2067
LASSO_IS_IS_TEXT_CLASS
2068
LASSO_IS_TEXT_GET_CLASS
2069
</SECTION>
2070

  
2071 1366
<SECTION>
2072 1367
<FILE>saml_subject</FILE>
2073 1368
<TITLE>LassoSamlSubject</TITLE>
......
2083 1378
LASSO_SAML_SUBJECT_GET_CLASS
2084 1379
</SECTION>
2085 1380

  
2086
<SECTION>
2087
<FILE>is_interaction_statement</FILE>
2088
LASSO_IS_IS_INTERACTION_STATEMENT
2089
<TITLE>LassoIsInteractionStatement</TITLE>
2090
LassoIsInteractionStatement
2091
lasso_is_interaction_statement_new
2092
<SUBSECTION Standard>
2093
LASSO_IS_INTERACTION_STATEMENT
2094
LASSO_TYPE_IS_INTERACTION_STATEMENT
2095
lasso_is_interaction_statement_get_type
2096
LASSO_IS_INTERACTION_STATEMENT_CLASS
2097
LASSO_IS_IS_INTERACTION_STATEMENT_CLASS
2098
LASSO_IS_INTERACTION_STATEMENT_GET_CLASS
2099
</SECTION>
2100

  
2101
<SECTION>
2102
<FILE>sa_password_transforms</FILE>
2103
<TITLE>LassoSaPasswordTransforms</TITLE>
2104
LassoSaPasswordTransforms
2105
lasso_sa_password_transforms_new
2106
<SUBSECTION Standard>
2107
LASSO_SA_PASSWORD_TRANSFORMS
2108
LASSO_IS_SA_PASSWORD_TRANSFORMS
2109
LASSO_TYPE_SA_PASSWORD_TRANSFORMS
2110
lasso_sa_password_transforms_get_type
2111
LASSO_SA_PASSWORD_TRANSFORMS_CLASS
2112
LASSO_IS_SA_PASSWORD_TRANSFORMS_CLASS
2113
LASSO_SA_PASSWORD_TRANSFORMS_GET_CLASS
2114
</SECTION>
2115

  
2116 1381
<SECTION>
2117 1382
<FILE>lib_scoping</FILE>
2118 1383
<TITLE>LassoLibScoping</TITLE>
......
2128 1393
LASSO_LIB_SCOPING_GET_CLASS
2129 1394
</SECTION>
2130 1395

  
2131
<SECTION>
2132
<FILE>disco_insert_entry</FILE>
2133
<TITLE>LassoDiscoInsertEntry</TITLE>
2134
LassoDiscoInsertEntry
2135
lasso_disco_insert_entry_new
2136
<SUBSECTION Standard>
2137
LASSO_DISCO_INSERT_ENTRY
2138
LASSO_IS_DISCO_INSERT_ENTRY
2139
LASSO_TYPE_DISCO_INSERT_ENTRY
2140
lasso_disco_insert_entry_get_type
2141
LASSO_DISCO_INSERT_ENTRY_CLASS
2142
LASSO_IS_DISCO_INSERT_ENTRY_CLASS
2143
LASSO_DISCO_INSERT_ENTRY_GET_CLASS
2144
</SECTION>
2145

  
2146
<SECTION>
2147
<FILE>sa_credentials</FILE>
2148
<TITLE>LassoSaCredentials</TITLE>
2149
LassoSaCredentials
2150
lasso_sa_credentials_new
2151
<SUBSECTION Standard>
2152
LASSO_SA_CREDENTIALS
2153
LASSO_IS_SA_CREDENTIALS
2154
LASSO_TYPE_SA_CREDENTIALS
2155
lasso_sa_credentials_get_type
2156
LASSO_SA_CREDENTIALS_CLASS
2157
LASSO_IS_SA_CREDENTIALS_CLASS
2158
LASSO_SA_CREDENTIALS_GET_CLASS
2159
</SECTION>
2160

  
2161
<SECTION>
2162
<FILE>is_select</FILE>
2163
LASSO_IS_IS_SELECT
2164
<TITLE>LassoIsSelect</TITLE>
2165
LassoIsSelect
2166
lasso_is_select_new
2167
<SUBSECTION Standard>
2168
LASSO_IS_SELECT
2169
LASSO_TYPE_IS_SELECT
2170
lasso_is_select_get_type
2171
LASSO_IS_SELECT_CLASS
2172
LASSO_IS_IS_SELECT_CLASS
2173
LASSO_IS_SELECT_GET_CLASS
2174
</SECTION>
2175

  
2176 1396
<SECTION>
2177 1397
<FILE>lib_authn_request</FILE>
2178 1398
<TITLE>LassoLibAuthnRequest</TITLE>
......
2188 1408
LASSO_LIB_AUTHN_REQUEST_GET_CLASS
2189 1409
</SECTION>
2190 1410

  
2191
<SECTION>
2192
<FILE>disco_authenticate_session_context</FILE>
2193
<TITLE>LassoDiscoAuthenticateSessionContext</TITLE>
2194
LassoDiscoAuthenticateSessionContext
2195
lasso_disco_authenticate_session_context_new
2196
<SUBSECTION Standard>
2197
LASSO_DISCO_AUTHENTICATE_SESSION_CONTEXT
2198
LASSO_IS_DISCO_AUTHENTICATE_SESSION_CONTEXT
2199
LASSO_TYPE_DISCO_AUTHENTICATE_SESSION_CONTEXT
2200
lasso_disco_authenticate_session_context_get_type
2201
LASSO_DISCO_AUTHENTICATE_SESSION_CONTEXT_CLASS
2202
LASSO_IS_DISCO_AUTHENTICATE_SESSION_CONTEXT_CLASS
2203
LASSO_DISCO_AUTHENTICATE_SESSION_CONTEXT_GET_CLASS
2204
</SECTION>
2205

  
2206
<SECTION>
2207
<FILE>disco_encrypt_resource_id</FILE>
2208
<TITLE>LassoDiscoEncryptResourceID</TITLE>
2209
LassoDiscoEncryptResourceID
2210
lasso_disco_encrypt_resource_id_new
2211
<SUBSECTION Standard>
2212
LASSO_DISCO_ENCRYPT_RESOURCE_ID
2213
LASSO_IS_DISCO_ENCRYPT_RESOURCE_ID
2214
LASSO_TYPE_DISCO_ENCRYPT_RESOURCE_ID
2215
lasso_disco_encrypt_resource_id_get_type
2216
LASSO_DISCO_ENCRYPT_RESOURCE_ID_CLASS
2217
LASSO_IS_DISCO_ENCRYPT_RESOURCE_ID_CLASS
2218
LASSO_DISCO_ENCRYPT_RESOURCE_ID_GET_CLASS
2219
</SECTION>
2220

  
2221 1411
<SECTION>
2222 1412
<FILE>saml_attribute</FILE>
2223 1413
<TITLE>LassoSamlAttribute</TITLE>
......
2233 1423
LASSO_SAML_ATTRIBUTE_GET_CLASS
2234 1424
</SECTION>
2235 1425

  
2236
<SECTION>
2237
<FILE>is_redirect_request</FILE>
2238
LASSO_IS_IS_REDIRECT_REQUEST
2239
<TITLE>LassoIsRedirectRequest</TITLE>
2240
LassoIsRedirectRequest
2241
lasso_is_redirect_request_new
2242
<SUBSECTION Standard>
2243
LASSO_IS_REDIRECT_REQUEST
2244
LASSO_TYPE_IS_REDIRECT_REQUEST
2245
lasso_is_redirect_request_get_type
2246
LASSO_IS_REDIRECT_REQUEST_CLASS
2247
LASSO_IS_IS_REDIRECT_REQUEST_CLASS
2248
LASSO_IS_REDIRECT_REQUEST_GET_CLASS
2249
</SECTION>
2250

  
2251
<SECTION>
2252
<FILE>soap_binding_ext_credential</FILE>
2253
<TITLE>LassoSoapBindingExtCredential</TITLE>
2254
LassoSoapBindingExtCredential
2255
lasso_soap_binding_ext_credential_new
2256
<SUBSECTION Standard>
2257
LASSO_SOAP_BINDING_EXT_CREDENTIAL
2258
LASSO_IS_SOAP_BINDING_EXT_CREDENTIAL
2259
LASSO_TYPE_SOAP_BINDING_EXT_CREDENTIAL
2260
lasso_soap_binding_ext_credential_get_type
2261
LASSO_SOAP_BINDING_EXT_CREDENTIAL_CLASS
2262
LASSO_IS_SOAP_BINDING_EXT_CREDENTIAL_CLASS
2263
LASSO_SOAP_BINDING_EXT_CREDENTIAL_GET_CLASS
2264
</SECTION>
2265

  
2266 1426
<SECTION>
2267 1427
<FILE>saml_advice</FILE>
2268 1428
<TITLE>LassoSamlAdvice</TITLE>
......
2293 1453
LASSO_SAML_AUTHENTICATION_STATEMENT_GET_CLASS
2294 1454
</SECTION>
2295 1455

  
2296
<SECTION>
2297
<FILE>is_inquiry_element</FILE>
2298
LASSO_IS_IS_INQUIRY_ELEMENT
2299
<TITLE>LassoIsInquiryElement</TITLE>
2300
LassoIsInquiryElement
2301
lasso_is_inquiry_element_new
2302
<SUBSECTION Standard>
2303
LASSO_IS_INQUIRY_ELEMENT
2304
LASSO_TYPE_IS_INQUIRY_ELEMENT
2305
lasso_is_inquiry_element_get_type
2306
LASSO_IS_INQUIRY_ELEMENT_CLASS
2307
LASSO_IS_IS_INQUIRY_ELEMENT_CLASS
2308
LASSO_IS_INQUIRY_ELEMENT_GET_CLASS
2309
</SECTION>
2310

  
2311
<SECTION>
2312
<FILE>dst_data</FILE>
2313
<TITLE>LassoDstData</TITLE>
2314
LassoDstData
2315
lasso_dst_data_new
2316
<SUBSECTION Standard>
2317
LASSO_DST_DATA
2318
LASSO_IS_DST_DATA
2319
LASSO_TYPE_DST_DATA
2320
lasso_dst_data_get_type
2321
LASSO_DST_DATA_CLASS
2322
LASSO_IS_DST_DATA_CLASS
2323
LASSO_DST_DATA_GET_CLASS
2324
</SECTION>
2325

  
2326 1456
<SECTION>
2327 1457
<FILE>saml_audience_restriction_condition</FILE>
2328 1458
<TITLE>LassoSamlAudienceRestrictionCondition</TITLE>
......
2355 1485
LASSO_LIB_AUTHENTICATION_STATEMENT_GET_CLASS
2356 1486
</SECTION>
2357 1487

  
2358
<SECTION>
2359
<FILE>is_inquiry</FILE>
2360
LASSO_IS_IS_INQUIRY
2361
<TITLE>LassoIsInquiry</TITLE>
2362
LassoIsInquiry
2363
lasso_is_inquiry_new
2364
<SUBSECTION Standard>
2365
LASSO_IS_INQUIRY
2366
LASSO_TYPE_IS_INQUIRY
2367
lasso_is_inquiry_get_type
2368
LASSO_IS_INQUIRY_CLASS
2369
LASSO_IS_IS_INQUIRY_CLASS
2370
LASSO_IS_INQUIRY_GET_CLASS
2371
</SECTION>
2372

  
2373 1488
<SECTION>
2374 1489
<FILE>lib_authn_request_envelope</FILE>
2375 1490
<TITLE>LassoLibAuthnRequestEnvelope</TITLE>
......
2386 1501
LASSO_LIB_AUTHN_REQUEST_ENVELOPE_GET_CLASS
2387 1502
</SECTION>
2388 1503

  
2389
<SECTION>
2390
<FILE>disco_credentials</FILE>
2391
<TITLE>LassoDiscoCredentials</TITLE>
2392
LassoDiscoCredentials
2393
lasso_disco_credentials_new
2394
<SUBSECTION Standard>
2395
LASSO_DISCO_CREDENTIALS
2396
LASSO_IS_DISCO_CREDENTIALS
2397
LASSO_TYPE_DISCO_CREDENTIALS
2398
lasso_disco_credentials_get_type
2399
LASSO_DISCO_CREDENTIALS_CLASS
2400
LASSO_IS_DISCO_CREDENTIALS_CLASS
2401
LASSO_DISCO_CREDENTIALS_GET_CLASS
2402
</SECTION>
2403

  
2404
<SECTION>
2405
<FILE>disco_authenticate_requester</FILE>
2406
<TITLE>LassoDiscoAuthenticateRequester</TITLE>
2407
LassoDiscoAuthenticateRequester
2408
lasso_disco_authenticate_requester_new
2409
<SUBSECTION Standard>
2410
LASSO_DISCO_AUTHENTICATE_REQUESTER
2411
LASSO_IS_DISCO_AUTHENTICATE_REQUESTER
2412
LASSO_TYPE_DISCO_AUTHENTICATE_REQUESTER
2413
lasso_disco_authenticate_requester_get_type
2414
LASSO_DISCO_AUTHENTICATE_REQUESTER_CLASS
2415
LASSO_IS_DISCO_AUTHENTICATE_REQUESTER_CLASS
2416
LASSO_DISCO_AUTHENTICATE_REQUESTER_GET_CLASS
2417
</SECTION>
2418

  
2419 1504
<SECTION>
2420 1505
<FILE>saml_attribute_statement</FILE>
2421 1506
<TITLE>LassoSamlAttributeStatement</TITLE>
......
2446 1531
LASSO_SAMLP_STATUS_CODE_GET_CLASS
2447 1532
</SECTION>
2448 1533

  
2449
<SECTION>
2450
<FILE>utility_status</FILE>
2451
<TITLE>LassoUtilityStatus</TITLE>
2452
LassoUtilityStatus
2453
lasso_utility_status_new
2454
<SUBSECTION Standard>
2455
LASSO_UTILITY_STATUS
2456
LASSO_IS_UTILITY_STATUS
2457
LASSO_TYPE_UTILITY_STATUS
2458
lasso_utility_status_get_type
2459
LASSO_UTILITY_STATUS_CLASS
2460
LASSO_IS_UTILITY_STATUS_CLASS
2461
LASSO_UTILITY_STATUS_GET_CLASS
2462
</SECTION>
2463

  
2464 1534
<SECTION>
2465 1535
<FILE>soap_detail</FILE>
2466 1536
<TITLE>LassoSoapDetail</TITLE>
......
2484 1554
lasso_soap_envelope_new
2485 1555
lasso_soap_envelope_new_full
2486 1556
lasso_soap_envelope_new_from_message
2487
<SUBSECTION SoapBinding>
2488
lasso_soap_envelope_add_action
2489
lasso_soap_envelope_add_security_token
2490
lasso_soap_envelope_add_to_body
2491
lasso_soap_envelope_get_action
2492
lasso_soap_envelope_get_body_content
2493
lasso_soap_envelope_get_message_id
2494
lasso_soap_envelope_get_relates_to
2495
lasso_soap_envelope_get_saml2_security_token
2496
lasso_soap_envelope_get_sb2_user_interaction_hint
2497
lasso_soap_envelope_sb2_get_provider_id
2498
lasso_soap_envelope_sb2_get_redirect_request_url
2499
lasso_soap_envelope_sb2_get_target_identity_header
2500
lasso_soap_envelope_set_sb2_user_interaction_hint
2501
lasso_soap_envelope_wssec_get_security_header
2502
lasso_soap_envelope_get_soap_fault
2503
lasso_soap_envelope_set_relates_to
2504 1557
<SUBSECTION Standard>
2505 1558
LASSO_SOAP_ENVELOPE
2506 1559
LASSO_IS_SOAP_ENVELOPE
......
2541 1594
LASSO_SAMLP_RESPONSE_ABSTRACT_GET_CLASS
2542 1595
</SECTION>
2543 1596

  
2544
<SECTION>
2545
<FILE>is_item</FILE>
2546
LASSO_IS_IS_ITEM
2547
<TITLE>LassoIsItem</TITLE>
2548
LassoIsItem
2549
lasso_is_item_new
2550
<SUBSECTION Standard>
2551
LASSO_IS_ITEM
2552
LASSO_TYPE_IS_ITEM
2553
lasso_is_item_get_type
2554
LASSO_IS_ITEM_CLASS
2555
LASSO_IS_IS_ITEM_CLASS
2556
LASSO_IS_ITEM_GET_CLASS
2557
</SECTION>
2558

  
2559
<SECTION>
2560
<FILE>is_interaction_request</FILE>
2561
LASSO_IS_IS_INTERACTION_REQUEST
2562
<TITLE>LassoIsInteractionRequest</TITLE>
2563
LassoIsInteractionRequest
2564
lasso_is_interaction_request_new
2565
<SUBSECTION Standard>
2566
LASSO_IS_INTERACTION_REQUEST
2567
LASSO_TYPE_IS_INTERACTION_REQUEST
2568
lasso_is_interaction_request_get_type
2569
LASSO_IS_INTERACTION_REQUEST_CLASS
2570
LASSO_IS_IS_INTERACTION_REQUEST_CLASS
2571
LASSO_IS_INTERACTION_REQUEST_GET_CLASS
2572
</SECTION>
2573

  
2574
<SECTION>
2575
<FILE>soap_binding_ext_service_instance_update</FILE>
2576
<TITLE>LassoSoapBindingExtServiceInstanceUpdate</TITLE>
2577
LassoSoapBindingExtServiceInstanceUpdate
2578
lasso_soap_binding_ext_service_instance_update_new
2579
<SUBSECTION Standard>
2580
LASSO_SOAP_BINDING_EXT_SERVICE_INSTANCE_UPDATE
2581
LASSO_IS_SOAP_BINDING_EXT_SERVICE_INSTANCE_UPDATE
2582
LASSO_TYPE_SOAP_BINDING_EXT_SERVICE_INSTANCE_UPDATE
2583
lasso_soap_binding_ext_service_instance_update_get_type
2584
LASSO_SOAP_BINDING_EXT_SERVICE_INSTANCE_UPDATE_CLASS
2585
LASSO_IS_SOAP_BINDING_EXT_SERVICE_INSTANCE_UPDATE_CLASS
2586
LASSO_SOAP_BINDING_EXT_SERVICE_INSTANCE_UPDATE_GET_CLASS
2587
</SECTION>
2588

  
2589
<SECTION>
2590
<FILE>soap_binding_processing_context</FILE>
2591
<TITLE>LassoSoapBindingProcessingContext</TITLE>
2592
LassoSoapBindingProcessingContext
2593
lasso_soap_binding_processing_context_new
2594
<SUBSECTION Standard>
2595
LASSO_SOAP_BINDING_PROCESSING_CONTEXT
2596
LASSO_IS_SOAP_BINDING_PROCESSING_CONTEXT
2597
LASSO_TYPE_SOAP_BINDING_PROCESSING_CONTEXT
2598
lasso_soap_binding_processing_context_get_type
2599
LASSO_SOAP_BINDING_PROCESSING_CONTEXT_CLASS
2600
LASSO_IS_SOAP_BINDING_PROCESSING_CONTEXT_CLASS
2601
LASSO_SOAP_BINDING_PROCESSING_CONTEXT_GET_CLASS
2602
</SECTION>
2603

  
2604
<SECTION>
2605
<FILE>soap_binding_ext_timeout</FILE>
2606
<TITLE>LassoSoapBindingExtTimeout</TITLE>
2607
LassoSoapBindingExtTimeout
2608
lasso_soap_binding_ext_timeout_new
2609
<SUBSECTION Standard>
2610
LASSO_SOAP_BINDING_EXT_TIMEOUT
2611
LASSO_IS_SOAP_BINDING_EXT_TIMEOUT
2612
LASSO_TYPE_SOAP_BINDING_EXT_TIMEOUT
2613
lasso_soap_binding_ext_timeout_get_type
2614
LASSO_SOAP_BINDING_EXT_TIMEOUT_CLASS
2615
LASSO_IS_SOAP_BINDING_EXT_TIMEOUT_CLASS
2616
LASSO_SOAP_BINDING_EXT_TIMEOUT_GET_CLASS
2617
</SECTION>
2618

  
2619 1597
<SECTION>
2620 1598
<FILE>lib_authn_response</FILE>
2621 1599
<TITLE>LassoLibAuthnResponse</TITLE>
......
2646 1624
LASSO_SAML_ASSERTION_GET_CLASS
2647 1625
</SECTION>
2648 1626

  
2649
<SECTION>
2650
<FILE>dst_modify_response</FILE>
2651
<TITLE>LassoDstModifyResponse</TITLE>
2652
LassoDstModifyResponse
2653
lasso_dst_modify_response_new
2654
<SUBSECTION Standard>
2655
LASSO_DST_MODIFY_RESPONSE
2656
LASSO_IS_DST_MODIFY_RESPONSE
2657
LASSO_TYPE_DST_MODIFY_RESPONSE
2658
lasso_dst_modify_response_get_type
2659
LASSO_DST_MODIFY_RESPONSE_CLASS
2660
LASSO_IS_DST_MODIFY_RESPONSE_CLASS
2661
LASSO_DST_MODIFY_RESPONSE_GET_CLASS
2662
</SECTION>
2663

  
2664 1627
<SECTION>
2665 1628
<FILE>samlp2_artifact_response</FILE>
2666 1629
<TITLE>LassoSamlp2ArtifactResponse</TITLE>
......
3462 2425
</SECTION>
3463 2426

  
3464 2427
<SECTION>
3465
<FILE>wsse_security_header</FILE>
3466
<TITLE>LassoWsSec1SecurityHeader</TITLE>
3467
LassoWsSec1SecurityHeader
3468
lasso_wsse_security_header_new
3469
<SUBSECTION Standard>
3470
LASSO_WSSE_SECURITY_HEADER
3471
LASSO_IS_WSSE_SECURITY_HEADER
3472
LASSO_TYPE_WSSE_SECURITY_HEADER
3473
lasso_wsse_security_header_get_type
3474
LASSO_WSSE_SECURITY_HEADER_CLASS
3475
LASSO_IS_WSSE_SECURITY_HEADER_CLASS
3476
LASSO_WSSE_SECURITY_HEADER_GET_CLASS
3477
</SECTION>
3478

  
3479
<SECTION>
3480
<FILE>wsse_transformation_parameters</FILE>
3481
<TITLE>LassoWsSec1TransformationParameters</TITLE>
3482
LassoWsSec1TransformationParameters
3483
lasso_wsse_transformation_parameters_new
3484
<SUBSECTION Standard>
3485
LASSO_WSSE_TRANSFORMATION_PARAMETERS
3486
LASSO_IS_WSSE_TRANSFORMATION_PARAMETERS
3487
LASSO_TYPE_WSSE_TRANSFORMATION_PARAMETERS
3488
lasso_wsse_transformation_parameters_get_type
3489
LASSO_WSSE_TRANSFORMATION_PARAMETERS_CLASS
3490
LASSO_IS_WSSE_TRANSFORMATION_PARAMETERS_CLASS
3491
LASSO_WSSE_TRANSFORMATION_PARAMETERS_GET_CLASS
3492
</SECTION>
3493

  
3494
<SECTION>
3495
<FILE>wsa_problem_action</FILE>
3496
<TITLE>LassoWsAddrProblemAction</TITLE>
3497
LassoWsAddrProblemAction
3498
lasso_wsa_problem_action_new
3499
<SUBSECTION Standard>
3500
LASSO_WSA_PROBLEM_ACTION
3501
LASSO_IS_WSA_PROBLEM_ACTION
3502
LASSO_TYPE_WSA_PROBLEM_ACTION
3503
lasso_wsa_problem_action_get_type
3504
LASSO_WSA_PROBLEM_ACTION_CLASS
3505
LASSO_IS_WSA_PROBLEM_ACTION_CLASS
3506
LASSO_WSA_PROBLEM_ACTION_GET_CLASS
3507
</SECTION>
3508

  
3509
<SECTION>
3510
<FILE>wsa_attributed_any</FILE>
3511
<TITLE>LassoWsAddrAttributedAny</TITLE>
3512
LassoWsAddrAttributedAny
3513
lasso_wsa_attributed_any_new
3514
<SUBSECTION Standard>
3515
LASSO_WSA_ATTRIBUTED_ANY
3516
LASSO_IS_WSA_ATTRIBUTED_ANY
3517
LASSO_TYPE_WSA_ATTRIBUTED_ANY
3518
lasso_wsa_attributed_any_get_type
3519
LASSO_WSA_ATTRIBUTED_ANY_CLASS
3520
LASSO_IS_WSA_ATTRIBUTED_ANY_CLASS
3521
LASSO_WSA_ATTRIBUTED_ANY_GET_CLASS
3522
</SECTION>
3523

  
3524
<SECTION>
3525
<FILE>wsa_relates_to</FILE>
3526
<TITLE>LassoWsAddrRelatesTo</TITLE>
3527
LassoWsAddrRelatesTo
3528
lasso_wsa_relates_to_new
3529
lasso_wsa_relates_to_new_with_string
3530
<SUBSECTION Standard>
3531
LASSO_WSA_RELATES_TO
3532
LASSO_IS_WSA_RELATES_TO
3533
LASSO_TYPE_WSA_RELATES_TO
3534
lasso_wsa_relates_to_get_type
3535
LASSO_WSA_RELATES_TO_CLASS
3536
LASSO_IS_WSA_RELATES_TO_CLASS
3537
LASSO_WSA_RELATES_TO_GET_CLASS
3538
</SECTION>
3539

  
3540
<SECTION>
3541
<FILE>wsse_username_token</FILE>
3542
LassoWsseUsernameTokenPasswordType
3543
<TITLE>LassoWsseUsernameToken</TITLE>
3544
LassoWsseUsernameToken
3545
lasso_wsse_username_token_new
3546
lasso_wsse_username_token_reset_nonce
3547
lasso_wsse_username_token_set_password_kind
3548
lasso_wsse_username_token_set_password
3549
lasso_wsse_username_token_check_password
3550
lasso_wsse_username_token_derive_key
3551
<SUBSECTION Standard>
3552
LASSO_WSSE_USERNAME_TOKEN
3553
LASSO_IS_WSSE_USERNAME_TOKEN
3554
LASSO_TYPE_WSSE_USERNAME_TOKEN
3555
lasso_wsse_username_token_get_type
3556
LASSO_WSSE_USERNAME_TOKEN_CLASS
3557
LASSO_IS_WSSE_USERNAME_TOKEN_CLASS
3558
LASSO_WSSE_USERNAME_TOKEN_GET_CLASS
3559
</SECTION>
3560

  
3561
<SECTION>
3562
<FILE>wsa_reference_parameters</FILE>
3563
<TITLE>LassoWsAddrReferenceParameters</TITLE>
3564
LassoWsAddrReferenceParameters
3565
lasso_wsa_reference_parameters_new
3566
<SUBSECTION Standard>
3567
LASSO_WSA_REFERENCE_PARAMETERS
3568
LASSO_IS_WSA_REFERENCE_PARAMETERS
3569
LASSO_TYPE_WSA_REFERENCE_PARAMETERS
3570
lasso_wsa_reference_parameters_get_type
3571
LASSO_WSA_REFERENCE_PARAMETERS_CLASS
3572
LASSO_IS_WSA_REFERENCE_PARAMETERS_CLASS
3573
LASSO_WSA_REFERENCE_PARAMETERS_GET_CLASS
3574
</SECTION>
3575

  
3576
<SECTION>
3577
<FILE>wsa_attributed_qname</FILE>
3578
<TITLE>LassoWsAddrAttributedQName</TITLE>
3579
LassoWsAddrAttributedQName
3580
lasso_wsa_attributed_qname_new
3581
lasso_wsa_attributed_qname_new_with_string
3582
<SUBSECTION Standard>
3583
LASSO_WSA_ATTRIBUTED_QNAME
3584
LASSO_IS_WSA_ATTRIBUTED_QNAME
3585
LASSO_TYPE_WSA_ATTRIBUTED_QNAME
3586
lasso_wsa_attributed_qname_get_type
3587
LASSO_WSA_ATTRIBUTED_QNAME_CLASS
3588
LASSO_IS_WSA_ATTRIBUTED_QNAME_CLASS
3589
LASSO_WSA_ATTRIBUTED_QNAME_GET_CLASS
3590
</SECTION>
3591

  
3592
<SECTION>
3593
<FILE>wsa_metadata</FILE>
3594
<TITLE>LassoWsAddrMetadata</TITLE>
3595
LassoWsAddrMetadata
3596
lasso_wsa_metadata_new
3597
<SUBSECTION Standard>
3598
LASSO_WSA_METADATA
3599
LASSO_IS_WSA_METADATA
3600
LASSO_TYPE_WSA_METADATA
3601
lasso_wsa_metadata_get_type
3602
LASSO_WSA_METADATA_CLASS
3603
LASSO_IS_WSA_METADATA_CLASS
3604
LASSO_WSA_METADATA_GET_CLASS
3605
</SECTION>
3606

  
3607
<SECTION>
3608
<FILE>wsa_attributed_unsigned_long</FILE>
3609
<TITLE>LassoWsAddrAttributedUnsignedLong</TITLE>
3610
LassoWsAddrAttributedUnsignedLong
3611
lasso_wsa_attributed_unsigned_long_new
3612
<SUBSECTION Standard>
3613
LASSO_WSA_ATTRIBUTED_UNSIGNED_LONG
3614
LASSO_IS_WSA_ATTRIBUTED_UNSIGNED_LONG
3615
LASSO_TYPE_WSA_ATTRIBUTED_UNSIGNED_LONG
3616
lasso_wsa_attributed_unsigned_long_get_type
3617
LASSO_WSA_ATTRIBUTED_UNSIGNED_LONG_CLASS
3618
LASSO_IS_WSA_ATTRIBUTED_UNSIGNED_LONG_CLASS
3619
LASSO_WSA_ATTRIBUTED_UNSIGNED_LONG_GET_CLASS
3620
</SECTION>
3621

  
3622
<SECTION>
3623
<FILE>wsa_attributed_uri</FILE>
3624
<TITLE>LassoWsAddrAttributedURI</TITLE>
3625
LassoWsAddrAttributedURI
3626
lasso_wsa_attributed_uri_new
3627
lasso_wsa_attributed_uri_new_with_string
3628
<SUBSECTION Standard>
3629
LASSO_WSA_ATTRIBUTED_URI
3630
LASSO_IS_WSA_ATTRIBUTED_URI
3631
LASSO_TYPE_WSA_ATTRIBUTED_URI
3632
lasso_wsa_attributed_uri_get_type
3633
LASSO_WSA_ATTRIBUTED_URI_CLASS
3634
LASSO_IS_WSA_ATTRIBUTED_URI_CLASS
3635
LASSO_WSA_ATTRIBUTED_URI_GET_CLASS
3636
</SECTION>
3637

  
3638
<SECTION>
3639
<FILE>wsa_endpoint_reference</FILE>
3640
<TITLE>LassoWsAddrEndpointReference</TITLE>
3641
LassoWsAddrEndpointReference
3642
lasso_wsa_endpoint_reference_new
3643
lasso_wsa_endpoint_reference_get_target_identity_token
3644
lasso_wsa_endpoint_reference_new_for_idwsf2_service
3645
lasso_wsa_endpoint_reference_add_security_token
3646
lasso_wsa_endpoint_reference_associate_service_to_type
3647
lasso_wsa_endpoint_reference_get_service
3648
<SUBSECTION Standard>
3649
LASSO_WSA_ENDPOINT_REFERENCE
3650
LASSO_IS_WSA_ENDPOINT_REFERENCE
3651
LASSO_TYPE_WSA_ENDPOINT_REFERENCE
3652
lasso_wsa_endpoint_reference_get_type
3653
LASSO_WSA_ENDPOINT_REFERENCE_CLASS
3654
LASSO_IS_WSA_ENDPOINT_REFERENCE_CLASS
3655
LASSO_WSA_ENDPOINT_REFERENCE_GET_CLASS
3656
</SECTION>
3657

  
3658
<SECTION>
3659
<FILE>wsse_reference</FILE>
3660
<TITLE>LassoWsSec1Reference</TITLE>
3661
LassoWsSec1Reference
3662
lasso_wsse_reference_new
3663
<SUBSECTION Standard>
3664
LASSO_WSSE_REFERENCE
3665
LASSO_IS_WSSE_REFERENCE
3666
LASSO_TYPE_WSSE_REFERENCE
3667
lasso_wsse_reference_get_type
3668
LASSO_WSSE_REFERENCE_CLASS
3669
LASSO_IS_WSSE_REFERENCE_CLASS
3670
LASSO_WSSE_REFERENCE_GET_CLASS
3671
</SECTION>
3672

  
3673
<SECTION>
3674
<FILE>wsse_embedded</FILE>
3675
<TITLE>LassoWsSec1Embedded</TITLE>
3676
LassoWsSec1Embedded
3677
lasso_wsse_embedded_new
3678
<SUBSECTION Standard>
3679
LASSO_WSSE_EMBEDDED
3680
LASSO_IS_WSSE_EMBEDDED
3681
LASSO_TYPE_WSSE_EMBEDDED
3682
lasso_wsse_embedded_get_type
3683
LASSO_WSSE_EMBEDDED_CLASS
3684
LASSO_IS_WSSE_EMBEDDED_CLASS
3685
LASSO_WSSE_EMBEDDED_GET_CLASS
3686
</SECTION>
3687

  
3688
<SECTION>
3689
<FILE>wsu_timestamp</FILE>
3690
<TITLE>LassoWsUtil1Timestamp</TITLE>
3691
LassoWsUtil1Timestamp
3692
lasso_wsu_timestamp_new
3693
<SUBSECTION Standard>
3694
LASSO_WSU_TIMESTAMP
3695
LASSO_IS_WSU_TIMESTAMP
3696
LASSO_TYPE_WSU_TIMESTAMP
3697
lasso_wsu_timestamp_get_type
3698
LASSO_WSU_TIMESTAMP_CLASS
3699
LASSO_IS_WSU_TIMESTAMP_CLASS
3700
LASSO_WSU_TIMESTAMP_GET_CLASS
3701
</SECTION>
3702

  
3703
<SECTION>
3704
<FILE>wsse_security_token_reference</FILE>
3705
<TITLE>LassoWsSec1SecurityTokenReference</TITLE>
3706
LassoWsSec1SecurityTokenReference
3707
lasso_wsse_security_token_reference_new
3708
<SUBSECTION Standard>
3709
LASSO_WSSE_SECURITY_TOKEN_REFERENCE
3710
LASSO_IS_WSSE_SECURITY_TOKEN_REFERENCE
3711
LASSO_TYPE_WSSE_SECURITY_TOKEN_REFERENCE
3712
lasso_wsse_security_token_reference_get_type
3713
LASSO_WSSE_SECURITY_TOKEN_REFERENCE_CLASS
3714
LASSO_IS_WSSE_SECURITY_TOKEN_REFERENCE_CLASS
3715
LASSO_WSSE_SECURITY_TOKEN_REFERENCE_GET_CLASS
3716
</SECTION>
3717

  
3718
<SECTION>
3719
<FILE>dst_delete_response</FILE>
3720
<TITLE>LassoIdWsf2DstDeleteResponse</TITLE>
3721
LassoIdWsf2DstDeleteResponse
3722
lasso_idwsf2_dst_delete_response_new
3723
<SUBSECTION Standard>
3724
LASSO_IDWSF2_DST_DELETE_RESPONSE
3725
LASSO_IS_IDWSF2_DST_DELETE_RESPONSE
3726
LASSO_TYPE_IDWSF2_DST_DELETE_RESPONSE
3727
lasso_idwsf2_dst_delete_response_get_type
3728
LASSO_IDWSF2_DST_DELETE_RESPONSE_CLASS
3729
LASSO_IS_IDWSF2_DST_DELETE_RESPONSE_CLASS
3730
LASSO_IDWSF2_DST_DELETE_RESPONSE_GET_CLASS
3731
</SECTION>
3732

  
3733
<SECTION>
3734
<FILE>subsref_create_item</FILE>
3735
<TITLE>LassoIdWsf2SubsRefCreateItem</TITLE>
3736
LassoIdWsf2SubsRefCreateItem
3737
lasso_idwsf2_subsref_create_item_new
3738
<SUBSECTION Standard>
3739
LASSO_IDWSF2_SUBSREF_CREATE_ITEM
3740
LASSO_IS_IDWSF2_SUBSREF_CREATE_ITEM
3741
LASSO_TYPE_IDWSF2_SUBSREF_CREATE_ITEM
3742
lasso_idwsf2_subsref_create_item_get_type
3743
LASSO_IDWSF2_SUBSREF_CREATE_ITEM_CLASS
3744
LASSO_IS_IDWSF2_SUBSREF_CREATE_ITEM_CLASS
3745
LASSO_IDWSF2_SUBSREF_CREATE_ITEM_GET_CLASS
3746
</SECTION>
3747

  
3748
<SECTION>
3749
<FILE>disco_svc_md_query_response</FILE>
3750
<TITLE>LassoIdWsf2DiscoSvcMDQueryResponse</TITLE>
3751
LassoIdWsf2DiscoSvcMDQueryResponse
3752
lasso_idwsf2_disco_svc_md_query_response_new
3753
<SUBSECTION Standard>
3754
LASSO_IDWSF2_DISCO_SVC_MD_QUERY_RESPONSE
3755
LASSO_IS_IDWSF2_DISCO_SVC_MD_QUERY_RESPONSE
3756
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_QUERY_RESPONSE
3757
lasso_idwsf2_disco_svc_md_query_response_get_type
3758
LASSO_IDWSF2_DISCO_SVC_MD_QUERY_RESPONSE_CLASS
3759
LASSO_IS_IDWSF2_DISCO_SVC_MD_QUERY_RESPONSE_CLASS
3760
LASSO_IDWSF2_DISCO_SVC_MD_QUERY_RESPONSE_GET_CLASS
3761
</SECTION>
3762

  
3763
<SECTION>
3764
<FILE>disco_endpoint_context</FILE>
3765
<TITLE>LassoIdWsf2DiscoEndpointContext</TITLE>
3766
LassoIdWsf2DiscoEndpointContext
3767
lasso_idwsf2_disco_endpoint_context_new
3768
lasso_idwsf2_disco_endpoint_context_new_full
3769
<SUBSECTION Standard>
3770
LASSO_IDWSF2_DISCO_ENDPOINT_CONTEXT
3771
LASSO_IS_IDWSF2_DISCO_ENDPOINT_CONTEXT
3772
LASSO_TYPE_IDWSF2_DISCO_ENDPOINT_CONTEXT
3773
lasso_idwsf2_disco_endpoint_context_get_type
3774
LASSO_IDWSF2_DISCO_ENDPOINT_CONTEXT_CLASS
3775
LASSO_IS_IDWSF2_DISCO_ENDPOINT_CONTEXT_CLASS
3776
LASSO_IDWSF2_DISCO_ENDPOINT_CONTEXT_GET_CLASS
3777
</SECTION>
3778

  
3779
<SECTION>
3780
<FILE>disco_provider_id</FILE>
3781
<TITLE>LassoIdWsf2DiscoProviderID</TITLE>
3782
LassoIdWsf2DiscoProviderID
3783
lasso_idwsf2_disco_provider_id_new
3784
lasso_idwsf2_disco_provider_id_new_with_string
3785
<SUBSECTION Standard>
3786
LASSO_IDWSF2_DISCO_PROVIDER_ID
3787
LASSO_IS_IDWSF2_DISCO_PROVIDER_ID
3788
LASSO_TYPE_IDWSF2_DISCO_PROVIDER_ID
3789
lasso_idwsf2_disco_provider_id_get_type
3790
LASSO_IDWSF2_DISCO_PROVIDER_ID_CLASS
3791
LASSO_IS_IDWSF2_DISCO_PROVIDER_ID_CLASS
3792
LASSO_IDWSF2_DISCO_PROVIDER_ID_GET_CLASS
3793
</SECTION>
3794

  
3795
<SECTION>
3796
<FILE>ps_remove_collection_request</FILE>
3797
<TITLE>LassoIdWsf2PsRemoveCollectionRequest</TITLE>
3798
LassoIdWsf2PsRemoveCollectionRequest
3799
lasso_idwsf2_ps_remove_collection_request_new
3800
<SUBSECTION Standard>
3801
LASSO_IDWSF2_PS_REMOVE_COLLECTION_REQUEST
3802
LASSO_IS_IDWSF2_PS_REMOVE_COLLECTION_REQUEST
3803
LASSO_TYPE_IDWSF2_PS_REMOVE_COLLECTION_REQUEST
3804
lasso_idwsf2_ps_remove_collection_request_get_type
3805
LASSO_IDWSF2_PS_REMOVE_COLLECTION_REQUEST_CLASS
3806
LASSO_IS_IDWSF2_PS_REMOVE_COLLECTION_REQUEST_CLASS
3807
LASSO_IDWSF2_PS_REMOVE_COLLECTION_REQUEST_GET_CLASS
3808
</SECTION>
3809

  
3810
<SECTION>
3811
<FILE>id_wsf_2_0_is_interaction_statement</FILE>
3812
LASSO_IS_IDWSF2_IS_INTERACTION_STATEMENT
3813
<TITLE>LassoIdWsf2IsInteractionStatement</TITLE>
3814
LassoIdWsf2IsInteractionStatement
3815
lasso_idwsf2_is_interaction_statement_new
3816
<SUBSECTION Standard>
3817
LASSO_IDWSF2_IS_INTERACTION_STATEMENT
3818
LASSO_TYPE_IDWSF2_IS_INTERACTION_STATEMENT
3819
lasso_idwsf2_is_interaction_statement_get_type
3820
LASSO_IDWSF2_IS_INTERACTION_STATEMENT_CLASS
3821
LASSO_IS_IDWSF2_IS_INTERACTION_STATEMENT_CLASS
3822
LASSO_IDWSF2_IS_INTERACTION_STATEMENT_GET_CLASS
3823
</SECTION>
3824

  
3825
<SECTION>
3826
<FILE>util_status</FILE>
3827
<TITLE>LassoIdWsf2UtilStatus</TITLE>
3828
LassoIdWsf2UtilStatus
3829
lasso_idwsf2_util_status_new
3830
lasso_idwsf2_util_status_new_with_code
3831
<SUBSECTION Standard>
3832
LASSO_IDWSF2_UTIL_STATUS
3833
LASSO_IS_IDWSF2_UTIL_STATUS
3834
LASSO_TYPE_IDWSF2_UTIL_STATUS
3835
lasso_idwsf2_util_status_get_type
3836
LASSO_IDWSF2_UTIL_STATUS_CLASS
3837
LASSO_IS_IDWSF2_UTIL_STATUS_CLASS
3838
LASSO_IDWSF2_UTIL_STATUS_GET_CLASS
3839
</SECTION>
3840

  
3841
<SECTION>
3842
<FILE>dstref_modify</FILE>
3843
<TITLE>LassoIdWsf2DstRefModify</TITLE>
3844
LassoIdWsf2DstRefModify
3845
lasso_idwsf2_dstref_modify_new
3846
<SUBSECTION Standard>
3847
LASSO_IDWSF2_DSTREF_MODIFY
3848
LASSO_IS_IDWSF2_DSTREF_MODIFY
3849
LASSO_TYPE_IDWSF2_DSTREF_MODIFY
3850
lasso_idwsf2_dstref_modify_get_type
3851
LASSO_IDWSF2_DSTREF_MODIFY_CLASS
3852
LASSO_IS_IDWSF2_DSTREF_MODIFY_CLASS
3853
LASSO_IDWSF2_DSTREF_MODIFY_GET_CLASS
3854
</SECTION>
3855

  
3856
<SECTION>
3857
<FILE>subsref_delete_item</FILE>
3858
<TITLE>LassoIdWsf2SubsRefDeleteItem</TITLE>
3859
LassoIdWsf2SubsRefDeleteItem
3860
lasso_idwsf2_subsref_delete_item_new
3861
<SUBSECTION Standard>
3862
LASSO_IDWSF2_SUBSREF_DELETE_ITEM
3863
LASSO_IS_IDWSF2_SUBSREF_DELETE_ITEM
3864
LASSO_TYPE_IDWSF2_SUBSREF_DELETE_ITEM
3865
lasso_idwsf2_subsref_delete_item_get_type
3866
LASSO_IDWSF2_SUBSREF_DELETE_ITEM_CLASS
3867
LASSO_IS_IDWSF2_SUBSREF_DELETE_ITEM_CLASS
3868
LASSO_IDWSF2_SUBSREF_DELETE_ITEM_GET_CLASS
3869
</SECTION>
3870

  
3871
<SECTION>
3872
<FILE>subsref_data_response</FILE>
3873
<TITLE>LassoIdWsf2SubsRefDataResponse</TITLE>
3874
LassoIdWsf2SubsRefDataResponse
3875
lasso_idwsf2_subsref_data_response_new
3876
<SUBSECTION Standard>
3877
LASSO_IDWSF2_SUBSREF_DATA_RESPONSE
3878
LASSO_IS_IDWSF2_SUBSREF_DATA_RESPONSE
3879
LASSO_TYPE_IDWSF2_SUBSREF_DATA_RESPONSE
3880
lasso_idwsf2_subsref_data_response_get_type
3881
LASSO_IDWSF2_SUBSREF_DATA_RESPONSE_CLASS
3882
LASSO_IS_IDWSF2_SUBSREF_DATA_RESPONSE_CLASS
3883
LASSO_IDWSF2_SUBSREF_DATA_RESPONSE_GET_CLASS
3884
</SECTION>
3885

  
3886
<SECTION>
3887
<FILE>id_wsf_2_0_is_parameter</FILE>
3888
LASSO_IS_IDWSF2_IS_PARAMETER
3889
<TITLE>LassoIdWsf2IsParameter</TITLE>
3890
LassoIdWsf2IsParameter
3891
lasso_idwsf2_is_parameter_new
3892
<SUBSECTION Standard>
3893
LASSO_IDWSF2_IS_PARAMETER
3894
LASSO_TYPE_IDWSF2_IS_PARAMETER
3895
lasso_idwsf2_is_parameter_get_type
3896
LASSO_IDWSF2_IS_PARAMETER_CLASS
3897
LASSO_IS_IDWSF2_IS_PARAMETER_CLASS
3898
LASSO_IDWSF2_IS_PARAMETER_GET_CLASS
3899
</SECTION>
3900

  
3901
<SECTION>
3902
<FILE>ps_resolve_identifier_response</FILE>
3903
<TITLE>LassoIdWsf2PsResolveIdentifierResponse</TITLE>
3904
LassoIdWsf2PsResolveIdentifierResponse
3905
lasso_idwsf2_ps_resolve_identifier_response_new
3906
<SUBSECTION Standard>
3907
LASSO_IDWSF2_PS_RESOLVE_IDENTIFIER_RESPONSE
3908
LASSO_IS_IDWSF2_PS_RESOLVE_IDENTIFIER_RESPONSE
3909
LASSO_TYPE_IDWSF2_PS_RESOLVE_IDENTIFIER_RESPONSE
3910
lasso_idwsf2_ps_resolve_identifier_response_get_type
3911
LASSO_IDWSF2_PS_RESOLVE_IDENTIFIER_RESPONSE_CLASS
3912
LASSO_IS_IDWSF2_PS_RESOLVE_IDENTIFIER_RESPONSE_CLASS
3913
LASSO_IDWSF2_PS_RESOLVE_IDENTIFIER_RESPONSE_GET_CLASS
3914
</SECTION>
3915

  
3916
<SECTION>
3917
<FILE>subsref_test_item</FILE>
3918
<TITLE>LassoIdWsf2SubsRefTestItem</TITLE>
3919
LassoIdWsf2SubsRefTestItem
3920
lasso_idwsf2_subsref_test_item_new
3921
<SUBSECTION Standard>
3922
LASSO_IDWSF2_SUBSREF_TEST_ITEM
3923
LASSO_IS_IDWSF2_SUBSREF_TEST_ITEM
3924
LASSO_TYPE_IDWSF2_SUBSREF_TEST_ITEM
3925
lasso_idwsf2_subsref_test_item_get_type
3926
LASSO_IDWSF2_SUBSREF_TEST_ITEM_CLASS
3927
LASSO_IS_IDWSF2_SUBSREF_TEST_ITEM_CLASS
3928
LASSO_IDWSF2_SUBSREF_TEST_ITEM_GET_CLASS
3929
</SECTION>
3930

  
3931
<SECTION>
3932
<FILE>id_wsf_2_0_is_inquiry</FILE>
3933
LASSO_IS_IDWSF2_IS_INQUIRY
3934
<TITLE>LassoIdWsf2IsInquiry</TITLE>
3935
LassoIdWsf2IsInquiry
3936
lasso_idwsf2_is_inquiry_new
3937
<SUBSECTION Standard>
3938
LASSO_IDWSF2_IS_INQUIRY
3939
LASSO_TYPE_IDWSF2_IS_INQUIRY
3940
lasso_idwsf2_is_inquiry_get_type
3941
LASSO_IDWSF2_IS_INQUIRY_CLASS
3942
LASSO_IS_IDWSF2_IS_INQUIRY_CLASS
3943
LASSO_IDWSF2_IS_INQUIRY_GET_CLASS
3944
</SECTION>
3945

  
3946
<SECTION>
3947
<FILE>util_empty</FILE>
3948
<TITLE>LassoIdWsf2UtilEmpty</TITLE>
3949
LassoIdWsf2UtilEmpty
3950
lasso_idwsf2_util_empty_new
3951
<SUBSECTION Standard>
3952
LASSO_IDWSF2_UTIL_EMPTY
3953
LASSO_IS_IDWSF2_UTIL_EMPTY
3954
LASSO_TYPE_IDWSF2_UTIL_EMPTY
3955
lasso_idwsf2_util_empty_get_type
3956
LASSO_IDWSF2_UTIL_EMPTY_CLASS
3957
LASSO_IS_IDWSF2_UTIL_EMPTY_CLASS
3958
LASSO_IDWSF2_UTIL_EMPTY_GET_CLASS
3959
</SECTION>
3960

  
3961
<SECTION>
3962
<FILE>sb2_redirect_request</FILE>
3963
<TITLE>LassoIdWsf2Sb2RedirectRequest</TITLE>
3964
LassoIdWsf2Sb2RedirectRequest
3965
lasso_idwsf2_sb2_redirect_request_new
3966
lasso_idwsf2_sb2_redirect_request_new_full
3967
<SUBSECTION Standard>
3968
LASSO_IDWSF2_SB2_REDIRECT_REQUEST
3969
LASSO_IS_IDWSF2_SB2_REDIRECT_REQUEST
3970
LASSO_TYPE_IDWSF2_SB2_REDIRECT_REQUEST
3971
lasso_idwsf2_sb2_redirect_request_get_type
3972
LASSO_IDWSF2_SB2_REDIRECT_REQUEST_CLASS
3973
LASSO_IS_IDWSF2_SB2_REDIRECT_REQUEST_CLASS
3974
LASSO_IDWSF2_SB2_REDIRECT_REQUEST_GET_CLASS
3975
</SECTION>
3976

  
3977
<SECTION>
3978
<FILE>ps_add_known_entity_request</FILE>
3979
<TITLE>LassoIdWsf2PsAddKnownEntityRequest</TITLE>
3980
LassoIdWsf2PsAddKnownEntityRequest
3981
lasso_idwsf2_ps_add_known_entity_request_new
3982
<SUBSECTION Standard>
3983
LASSO_IDWSF2_PS_ADD_KNOWN_ENTITY_REQUEST
3984
LASSO_IS_IDWSF2_PS_ADD_KNOWN_ENTITY_REQUEST
3985
LASSO_TYPE_IDWSF2_PS_ADD_KNOWN_ENTITY_REQUEST
3986
lasso_idwsf2_ps_add_known_entity_request_get_type
3987
LASSO_IDWSF2_PS_ADD_KNOWN_ENTITY_REQUEST_CLASS
3988
LASSO_IS_IDWSF2_PS_ADD_KNOWN_ENTITY_REQUEST_CLASS
3989
LASSO_IDWSF2_PS_ADD_KNOWN_ENTITY_REQUEST_GET_CLASS
3990
</SECTION>
3991

  
3992
<SECTION>
3993
<FILE>id_wsf_2_0_is_text</FILE>
3994
LASSO_IS_IDWSF2_IS_TEXT
3995
<TITLE>LassoIdWsf2IsText</TITLE>
3996
LassoIdWsf2IsText
3997
lasso_idwsf2_is_text_new
3998
<SUBSECTION Standard>
3999
LASSO_IDWSF2_IS_TEXT
4000
LASSO_TYPE_IDWSF2_IS_TEXT
4001
lasso_idwsf2_is_text_get_type
4002
LASSO_IDWSF2_IS_TEXT_CLASS
4003
LASSO_IS_IDWSF2_IS_TEXT_CLASS
4004
LASSO_IDWSF2_IS_TEXT_GET_CLASS
4005
</SECTION>
4006

  
4007
<SECTION>
4008
<FILE>ims_identity_mapping_request</FILE>
4009
<TITLE>LassoIdWsf2ImsIdentityMappingRequest</TITLE>
4010
LassoIdWsf2ImsIdentityMappingRequest
4011
lasso_idwsf2_ims_identity_mapping_request_new
4012
<SUBSECTION Standard>
4013
LASSO_IDWSF2_IMS_IDENTITY_MAPPING_REQUEST
4014
LASSO_IS_IDWSF2_IMS_IDENTITY_MAPPING_REQUEST
4015
LASSO_TYPE_IDWSF2_IMS_IDENTITY_MAPPING_REQUEST
4016
lasso_idwsf2_ims_identity_mapping_request_get_type
4017
LASSO_IDWSF2_IMS_IDENTITY_MAPPING_REQUEST_CLASS
4018
LASSO_IS_IDWSF2_IMS_IDENTITY_MAPPING_REQUEST_CLASS
4019
LASSO_IDWSF2_IMS_IDENTITY_MAPPING_REQUEST_GET_CLASS
4020
</SECTION>
4021

  
4022
<SECTION>
4023
<FILE>dstref_create_item</FILE>
4024
<TITLE>LassoIdWsf2DstRefCreateItem</TITLE>
4025
LassoIdWsf2DstRefCreateItem
4026
lasso_idwsf2_dstref_create_item_new
4027
<SUBSECTION Standard>
4028
LASSO_IDWSF2_DSTREF_CREATE_ITEM
4029
LASSO_IS_IDWSF2_DSTREF_CREATE_ITEM
4030
LASSO_TYPE_IDWSF2_DSTREF_CREATE_ITEM
4031
lasso_idwsf2_dstref_create_item_get_type
4032
LASSO_IDWSF2_DSTREF_CREATE_ITEM_CLASS
4033
LASSO_IS_IDWSF2_DSTREF_CREATE_ITEM_CLASS
4034
LASSO_IDWSF2_DSTREF_CREATE_ITEM_GET_CLASS
4035
</SECTION>
4036

  
4037
<SECTION>
4038
<FILE>ps_response_abstract</FILE>
4039
<TITLE>LassoIdWsf2PsResponseAbstract</TITLE>
4040
LassoIdWsf2PsResponseAbstract
4041
lasso_idwsf2_ps_response_abstract_new
4042
<SUBSECTION Standard>
4043
LASSO_IDWSF2_PS_RESPONSE_ABSTRACT
4044
LASSO_IS_IDWSF2_PS_RESPONSE_ABSTRACT
4045
LASSO_TYPE_IDWSF2_PS_RESPONSE_ABSTRACT
4046
lasso_idwsf2_ps_response_abstract_get_type
4047
LASSO_IDWSF2_PS_RESPONSE_ABSTRACT_CLASS
4048
LASSO_IS_IDWSF2_PS_RESPONSE_ABSTRACT_CLASS
4049
LASSO_IDWSF2_PS_RESPONSE_ABSTRACT_GET_CLASS
4050
</SECTION>
4051

  
4052
<SECTION>
4053
<FILE>disco_svc_md_replace_response</FILE>
4054
<TITLE>LassoIdWsf2DiscoSvcMDReplaceResponse</TITLE>
4055
LassoIdWsf2DiscoSvcMDReplaceResponse
4056
lasso_idwsf2_disco_svc_md_replace_response_new
4057
<SUBSECTION Standard>
4058
LASSO_IDWSF2_DISCO_SVC_MD_REPLACE_RESPONSE
4059
LASSO_IS_IDWSF2_DISCO_SVC_MD_REPLACE_RESPONSE
4060
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_REPLACE_RESPONSE
4061
lasso_idwsf2_disco_svc_md_replace_response_get_type
4062
LASSO_IDWSF2_DISCO_SVC_MD_REPLACE_RESPONSE_CLASS
4063
LASSO_IS_IDWSF2_DISCO_SVC_MD_REPLACE_RESPONSE_CLASS
4064
LASSO_IDWSF2_DISCO_SVC_MD_REPLACE_RESPONSE_GET_CLASS
4065
</SECTION>
4066

  
4067
<SECTION>
4068
<FILE>disco_svc_md_association_delete_response</FILE>
4069
<TITLE>LassoIdWsf2DiscoSvcMDAssociationDeleteResponse</TITLE>
4070
LassoIdWsf2DiscoSvcMDAssociationDeleteResponse
4071
lasso_idwsf2_disco_svc_md_association_delete_response_new
4072
<SUBSECTION Standard>
4073
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_RESPONSE
4074
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_RESPONSE
4075
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_RESPONSE
4076
lasso_idwsf2_disco_svc_md_association_delete_response_get_type
4077
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_RESPONSE_CLASS
4078
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_RESPONSE_CLASS
4079
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_RESPONSE_GET_CLASS
4080
</SECTION>
4081

  
4082
<SECTION>
4083
<FILE>id_wsf_2_0_disco_query</FILE>
4084
<TITLE>LassoIdWsf2DiscoQuery</TITLE>
4085
LassoIdWsf2DiscoQuery
4086
lasso_idwsf2_disco_query_new
4087
<SUBSECTION Standard>
4088
LASSO_IDWSF2_DISCO_QUERY
4089
LASSO_IS_IDWSF2_DISCO_QUERY
4090
LASSO_TYPE_IDWSF2_DISCO_QUERY
4091
lasso_idwsf2_disco_query_get_type
4092
LASSO_IDWSF2_DISCO_QUERY_CLASS
4093
LASSO_IS_IDWSF2_DISCO_QUERY_CLASS
4094
LASSO_IDWSF2_DISCO_QUERY_GET_CLASS
4095
</SECTION>
4096

  
4097
<SECTION>
4098
<FILE>disco_svc_md_association_query_response</FILE>
4099
<TITLE>LassoIdWsf2DiscoSvcMDAssociationQueryResponse</TITLE>
4100
LassoIdWsf2DiscoSvcMDAssociationQueryResponse
4101
lasso_idwsf2_disco_svc_md_association_query_response_new
4102
<SUBSECTION Standard>
4103
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_RESPONSE
4104
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_RESPONSE
4105
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_RESPONSE
4106
lasso_idwsf2_disco_svc_md_association_query_response_get_type
4107
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_RESPONSE_CLASS
4108
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_RESPONSE_CLASS
4109
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_RESPONSE_GET_CLASS
4110
</SECTION>
4111

  
4112
<SECTION>
4113
<FILE>sec_token_policy</FILE>
4114
<TITLE>LassoIdWsf2SecTokenPolicy</TITLE>
4115
LassoIdWsf2SecTokenPolicy
4116
lasso_idwsf2_sec_token_policy_new
4117
<SUBSECTION Standard>
4118
LASSO_IDWSF2_SEC_TOKEN_POLICY
4119
LASSO_IS_IDWSF2_SEC_TOKEN_POLICY
4120
LASSO_TYPE_IDWSF2_SEC_TOKEN_POLICY
4121
lasso_idwsf2_sec_token_policy_get_type
4122
LASSO_IDWSF2_SEC_TOKEN_POLICY_CLASS
4123
LASSO_IS_IDWSF2_SEC_TOKEN_POLICY_CLASS
4124
LASSO_IDWSF2_SEC_TOKEN_POLICY_GET_CLASS
4125
</SECTION>
4126

  
4127
<SECTION>
4128
<FILE>subs_notify_response</FILE>
4129
<TITLE>LassoIdWsf2SubsNotifyResponse</TITLE>
4130
LassoIdWsf2SubsNotifyResponse
4131
lasso_idwsf2_subs_notify_response_new
4132
<SUBSECTION Standard>
4133
LASSO_IDWSF2_SUBS_NOTIFY_RESPONSE
4134
LASSO_IS_IDWSF2_SUBS_NOTIFY_RESPONSE
4135
LASSO_TYPE_IDWSF2_SUBS_NOTIFY_RESPONSE
4136
lasso_idwsf2_subs_notify_response_get_type
4137
LASSO_IDWSF2_SUBS_NOTIFY_RESPONSE_CLASS
4138
LASSO_IS_IDWSF2_SUBS_NOTIFY_RESPONSE_CLASS
4139
LASSO_IDWSF2_SUBS_NOTIFY_RESPONSE_GET_CLASS
4140
</SECTION>
4141

  
4142
<SECTION>
4143
<FILE>dstref_data</FILE>
4144
<TITLE>LassoIdWsf2DstRefData</TITLE>
4145
LassoIdWsf2DstRefData
4146
lasso_idwsf2_dstref_data_new
4147
<SUBSECTION Standard>
4148
LASSO_IDWSF2_DSTREF_DATA
4149
LASSO_IS_IDWSF2_DSTREF_DATA
4150
LASSO_TYPE_IDWSF2_DSTREF_DATA
4151
lasso_idwsf2_dstref_data_get_type
4152
LASSO_IDWSF2_DSTREF_DATA_CLASS
4153
LASSO_IS_IDWSF2_DSTREF_DATA_CLASS
4154
LASSO_IDWSF2_DSTREF_DATA_GET_CLASS
4155
</SECTION>
4156

  
4157
<SECTION>
4158
<FILE>subsref_query_response</FILE>
4159
<TITLE>LassoIdWsf2SubsRefQueryResponse</TITLE>
4160
LassoIdWsf2SubsRefQueryResponse
4161
lasso_idwsf2_subsref_query_response_new
4162
<SUBSECTION Standard>
4163
LASSO_IDWSF2_SUBSREF_QUERY_RESPONSE
4164
LASSO_IS_IDWSF2_SUBSREF_QUERY_RESPONSE
4165
LASSO_TYPE_IDWSF2_SUBSREF_QUERY_RESPONSE
4166
lasso_idwsf2_subsref_query_response_get_type
4167
LASSO_IDWSF2_SUBSREF_QUERY_RESPONSE_CLASS
4168
LASSO_IS_IDWSF2_SUBSREF_QUERY_RESPONSE_CLASS
4169
LASSO_IDWSF2_SUBSREF_QUERY_RESPONSE_GET_CLASS
4170
</SECTION>
4171

  
4172
<SECTION>
4173
<FILE>dst_delete_item_base</FILE>
4174
<TITLE>LassoIdWsf2DstDeleteItemBase</TITLE>
4175
LassoIdWsf2DstDeleteItemBase
4176
lasso_idwsf2_dst_delete_item_base_new
4177
<SUBSECTION Standard>
4178
LASSO_IDWSF2_DST_DELETE_ITEM_BASE
4179
LASSO_IS_IDWSF2_DST_DELETE_ITEM_BASE
4180
LASSO_TYPE_IDWSF2_DST_DELETE_ITEM_BASE
4181
lasso_idwsf2_dst_delete_item_base_get_type
4182
LASSO_IDWSF2_DST_DELETE_ITEM_BASE_CLASS
4183
LASSO_IS_IDWSF2_DST_DELETE_ITEM_BASE_CLASS
4184
LASSO_IDWSF2_DST_DELETE_ITEM_BASE_GET_CLASS
4185
</SECTION>
4186

  
4187
<SECTION>
4188
<FILE>disco_svc_md_association_query</FILE>
4189
<TITLE>LassoIdWsf2DiscoSvcMDAssociationQuery</TITLE>
4190
LassoIdWsf2DiscoSvcMDAssociationQuery
4191
lasso_idwsf2_disco_svc_md_association_query_new
4192
<SUBSECTION Standard>
4193
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY
4194
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY
4195
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY
4196
lasso_idwsf2_disco_svc_md_association_query_get_type
4197
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_CLASS
4198
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_CLASS
4199
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_GET_CLASS
4200
</SECTION>
4201

  
4202
<SECTION>
4203
<FILE>subsref_app_data</FILE>
4204
<TITLE>LassoIdWsf2SubsRefAppData</TITLE>
4205
LassoIdWsf2SubsRefAppData
4206
lasso_idwsf2_subsref_app_data_new
4207
<SUBSECTION Standard>
4208
LASSO_IDWSF2_SUBSREF_APP_DATA
4209
LASSO_IS_IDWSF2_SUBSREF_APP_DATA
4210
LASSO_TYPE_IDWSF2_SUBSREF_APP_DATA
4211
lasso_idwsf2_subsref_app_data_get_type
4212
LASSO_IDWSF2_SUBSREF_APP_DATA_CLASS
4213
LASSO_IS_IDWSF2_SUBSREF_APP_DATA_CLASS
4214
LASSO_IDWSF2_SUBSREF_APP_DATA_GET_CLASS
4215
</SECTION>
4216

  
4217
<SECTION>
4218
<FILE>ps_query_objects_request</FILE>
4219
<TITLE>LassoIdWsf2PsQueryObjectsRequest</TITLE>
4220
LassoIdWsf2PsQueryObjectsRequest
4221
lasso_idwsf2_ps_query_objects_request_new
4222
<SUBSECTION Standard>
4223
LASSO_IDWSF2_PS_QUERY_OBJECTS_REQUEST
4224
LASSO_IS_IDWSF2_PS_QUERY_OBJECTS_REQUEST
4225
LASSO_TYPE_IDWSF2_PS_QUERY_OBJECTS_REQUEST
4226
lasso_idwsf2_ps_query_objects_request_get_type
4227
LASSO_IDWSF2_PS_QUERY_OBJECTS_REQUEST_CLASS
4228
LASSO_IS_IDWSF2_PS_QUERY_OBJECTS_REQUEST_CLASS
4229
LASSO_IDWSF2_PS_QUERY_OBJECTS_REQUEST_GET_CLASS
4230
</SECTION>
4231

  
4232
<SECTION>
4233
<FILE>id_wsf_2_0_is_select</FILE>
4234
LASSO_IS_IDWSF2_IS_SELECT
4235
<TITLE>LassoIdWsf2IsSelect</TITLE>
4236
LassoIdWsf2IsSelect
4237
lasso_idwsf2_is_select_new
4238
<SUBSECTION Standard>
4239
LASSO_IDWSF2_IS_SELECT
4240
LASSO_TYPE_IDWSF2_IS_SELECT
4241
lasso_idwsf2_is_select_get_type
4242
LASSO_IDWSF2_IS_SELECT_CLASS
4243
LASSO_IS_IDWSF2_IS_SELECT_CLASS
4244
LASSO_IDWSF2_IS_SELECT_GET_CLASS
4245
</SECTION>
4246

  
4247
<SECTION>
4248
<FILE>subsref_notify</FILE>
4249
<TITLE>LassoIdWsf2SubsRefNotify</TITLE>
4250
LassoIdWsf2SubsRefNotify
4251
lasso_idwsf2_subsref_notify_new
4252
<SUBSECTION Standard>
4253
LASSO_IDWSF2_SUBSREF_NOTIFY
4254
LASSO_IS_IDWSF2_SUBSREF_NOTIFY
4255
LASSO_TYPE_IDWSF2_SUBSREF_NOTIFY
4256
lasso_idwsf2_subsref_notify_get_type
4257
LASSO_IDWSF2_SUBSREF_NOTIFY_CLASS
4258
LASSO_IS_IDWSF2_SUBSREF_NOTIFY_CLASS
4259
LASSO_IDWSF2_SUBSREF_NOTIFY_GET_CLASS
4260
</SECTION>
4261

  
4262
<SECTION>
4263
<FILE>dstref_delete_item</FILE>
4264
<TITLE>LassoIdWsf2DstRefDeleteItem</TITLE>
4265
LassoIdWsf2DstRefDeleteItem
4266
lasso_idwsf2_dstref_delete_item_new
4267
<SUBSECTION Standard>
4268
LASSO_IDWSF2_DSTREF_DELETE_ITEM
4269
LASSO_IS_IDWSF2_DSTREF_DELETE_ITEM
4270
LASSO_TYPE_IDWSF2_DSTREF_DELETE_ITEM
4271
lasso_idwsf2_dstref_delete_item_get_type
4272
LASSO_IDWSF2_DSTREF_DELETE_ITEM_CLASS
4273
LASSO_IS_IDWSF2_DSTREF_DELETE_ITEM_CLASS
4274
LASSO_IDWSF2_DSTREF_DELETE_ITEM_GET_CLASS
4275
</SECTION>
4276

  
4277
<SECTION>
4278
<FILE>subsref_query</FILE>
4279
<TITLE>LassoIdWsf2SubsRefQuery</TITLE>
4280
LassoIdWsf2SubsRefQuery
4281
lasso_idwsf2_subsref_query_new
4282
<SUBSECTION Standard>
4283
LASSO_IDWSF2_SUBSREF_QUERY
4284
LASSO_IS_IDWSF2_SUBSREF_QUERY
4285
LASSO_TYPE_IDWSF2_SUBSREF_QUERY
4286
lasso_idwsf2_subsref_query_get_type
4287
LASSO_IDWSF2_SUBSREF_QUERY_CLASS
4288
LASSO_IS_IDWSF2_SUBSREF_QUERY_CLASS
4289
LASSO_IDWSF2_SUBSREF_QUERY_GET_CLASS
4290
</SECTION>
4291

  
4292
<SECTION>
4293
<FILE>ps_test_membership_request</FILE>
4294
<TITLE>LassoIdWsf2PsTestMembershipRequest</TITLE>
4295
LassoIdWsf2PsTestMembershipRequest
4296
lasso_idwsf2_ps_test_membership_request_new
4297
<SUBSECTION Standard>
4298
LASSO_IDWSF2_PS_TEST_MEMBERSHIP_REQUEST
4299
LASSO_IS_IDWSF2_PS_TEST_MEMBERSHIP_REQUEST
4300
LASSO_TYPE_IDWSF2_PS_TEST_MEMBERSHIP_REQUEST
4301
lasso_idwsf2_ps_test_membership_request_get_type
4302
LASSO_IDWSF2_PS_TEST_MEMBERSHIP_REQUEST_CLASS
4303
LASSO_IS_IDWSF2_PS_TEST_MEMBERSHIP_REQUEST_CLASS
4304
LASSO_IDWSF2_PS_TEST_MEMBERSHIP_REQUEST_GET_CLASS
4305
</SECTION>
4306

  
4307
<SECTION>
4308
<FILE>disco_svc_md_delete_response</FILE>
4309
<TITLE>LassoIdWsf2DiscoSvcMDDeleteResponse</TITLE>
4310
LassoIdWsf2DiscoSvcMDDeleteResponse
4311
lasso_idwsf2_disco_svc_md_delete_response_new
4312
<SUBSECTION Standard>
4313
LASSO_IDWSF2_DISCO_SVC_MD_DELETE_RESPONSE
4314
LASSO_IS_IDWSF2_DISCO_SVC_MD_DELETE_RESPONSE
4315
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_DELETE_RESPONSE
4316
lasso_idwsf2_disco_svc_md_delete_response_get_type
4317
LASSO_IDWSF2_DISCO_SVC_MD_DELETE_RESPONSE_CLASS
4318
LASSO_IS_IDWSF2_DISCO_SVC_MD_DELETE_RESPONSE_CLASS
4319
LASSO_IDWSF2_DISCO_SVC_MD_DELETE_RESPONSE_GET_CLASS
4320
</SECTION>
4321

  
4322
<SECTION>
4323
<FILE>dstref_delete_response</FILE>
4324
<TITLE>LassoIdWsf2DstRefDeleteResponse</TITLE>
4325
LassoIdWsf2DstRefDeleteResponse
4326
lasso_idwsf2_dstref_delete_response_new
4327
<SUBSECTION Standard>
4328
LASSO_IDWSF2_DSTREF_DELETE_RESPONSE
4329
LASSO_IS_IDWSF2_DSTREF_DELETE_RESPONSE
4330
LASSO_TYPE_IDWSF2_DSTREF_DELETE_RESPONSE
4331
lasso_idwsf2_dstref_delete_response_get_type
4332
LASSO_IDWSF2_DSTREF_DELETE_RESPONSE_CLASS
4333
LASSO_IS_IDWSF2_DSTREF_DELETE_RESPONSE_CLASS
4334
LASSO_IDWSF2_DSTREF_DELETE_RESPONSE_GET_CLASS
4335
</SECTION>
4336

  
4337
<SECTION>
4338
<FILE>ps_request_abstract</FILE>
4339
<TITLE>LassoIdWsf2PsRequestAbstract</TITLE>
4340
LassoIdWsf2PsRequestAbstract
4341
lasso_idwsf2_ps_request_abstract_new
4342
<SUBSECTION Standard>
4343
LASSO_IDWSF2_PS_REQUEST_ABSTRACT
4344
LASSO_IS_IDWSF2_PS_REQUEST_ABSTRACT
4345
LASSO_TYPE_IDWSF2_PS_REQUEST_ABSTRACT
4346
lasso_idwsf2_ps_request_abstract_get_type
4347
LASSO_IDWSF2_PS_REQUEST_ABSTRACT_CLASS
4348
LASSO_IS_IDWSF2_PS_REQUEST_ABSTRACT_CLASS
4349
LASSO_IDWSF2_PS_REQUEST_ABSTRACT_GET_CLASS
4350
</SECTION>
4351

  
4352
<SECTION>
4353
<FILE>subsref_item_data</FILE>
4354
<TITLE>LassoIdWsf2SubsRefItemData</TITLE>
4355
LassoIdWsf2SubsRefItemData
4356
lasso_idwsf2_subsref_item_data_new
4357
<SUBSECTION Standard>
4358
LASSO_IDWSF2_SUBSREF_ITEM_DATA
4359
LASSO_IS_IDWSF2_SUBSREF_ITEM_DATA
4360
LASSO_TYPE_IDWSF2_SUBSREF_ITEM_DATA
4361
lasso_idwsf2_subsref_item_data_get_type
4362
LASSO_IDWSF2_SUBSREF_ITEM_DATA_CLASS
4363
LASSO_IS_IDWSF2_SUBSREF_ITEM_DATA_CLASS
4364
LASSO_IDWSF2_SUBSREF_ITEM_DATA_GET_CLASS
4365
</SECTION>
4366

  
4367
<SECTION>
4368
<FILE>sb2_user_interaction_header</FILE>
4369
<TITLE>LassoIdWsf2Sb2UserInteractionHeader</TITLE>
4370
LassoIdWsf2Sb2UserInteractionHeader
4371
lasso_idwsf2_sb2_user_interaction_header_new
4372
<SUBSECTION Standard>
4373
LASSO_IDWSF2_SB2_USER_INTERACTION_HEADER
4374
LASSO_IS_IDWSF2_SB2_USER_INTERACTION_HEADER
4375
LASSO_TYPE_IDWSF2_SB2_USER_INTERACTION_HEADER
4376
lasso_idwsf2_sb2_user_interaction_header_get_type
4377
LASSO_IDWSF2_SB2_USER_INTERACTION_HEADER_CLASS
4378
LASSO_IS_IDWSF2_SB2_USER_INTERACTION_HEADER_CLASS
4379
LASSO_IDWSF2_SB2_USER_INTERACTION_HEADER_GET_CLASS
4380
</SECTION>
4381

  
4382
<SECTION>
4383
<FILE>dst_result_query_base</FILE>
4384
<TITLE>LassoIdWsf2DstResultQueryBase</TITLE>
4385
LassoIdWsf2DstResultQueryBase
4386
lasso_idwsf2_dst_result_query_base_new
4387
<SUBSECTION Standard>
4388
LASSO_IDWSF2_DST_RESULT_QUERY_BASE
4389
LASSO_IS_IDWSF2_DST_RESULT_QUERY_BASE
4390
LASSO_TYPE_IDWSF2_DST_RESULT_QUERY_BASE
4391
lasso_idwsf2_dst_result_query_base_get_type
4392
LASSO_IDWSF2_DST_RESULT_QUERY_BASE_CLASS
4393
LASSO_IS_IDWSF2_DST_RESULT_QUERY_BASE_CLASS
4394
LASSO_IDWSF2_DST_RESULT_QUERY_BASE_GET_CLASS
4395
</SECTION>
4396

  
4397
<SECTION>
4398
<FILE>ims_mapping_output</FILE>
4399
<TITLE>LassoIdWsf2ImsMappingOutput</TITLE>
4400
LassoIdWsf2ImsMappingOutput
4401
lasso_idwsf2_ims_mapping_output_new
4402
<SUBSECTION Standard>
4403
LASSO_IDWSF2_IMS_MAPPING_OUTPUT
4404
LASSO_IS_IDWSF2_IMS_MAPPING_OUTPUT
4405
LASSO_TYPE_IDWSF2_IMS_MAPPING_OUTPUT
4406
lasso_idwsf2_ims_mapping_output_get_type
4407
LASSO_IDWSF2_IMS_MAPPING_OUTPUT_CLASS
4408
LASSO_IS_IDWSF2_IMS_MAPPING_OUTPUT_CLASS
4409
LASSO_IDWSF2_IMS_MAPPING_OUTPUT_GET_CLASS
4410
</SECTION>
4411

  
4412
<SECTION>
4413
<FILE>ps_get_object_info_request</FILE>
4414
<TITLE>LassoIdWsf2PsGetObjectInfoRequest</TITLE>
4415
LassoIdWsf2PsGetObjectInfoRequest
4416
lasso_idwsf2_ps_get_object_info_request_new
4417
<SUBSECTION Standard>
4418
LASSO_IDWSF2_PS_GET_OBJECT_INFO_REQUEST
4419
LASSO_IS_IDWSF2_PS_GET_OBJECT_INFO_REQUEST
4420
LASSO_TYPE_IDWSF2_PS_GET_OBJECT_INFO_REQUEST
4421
lasso_idwsf2_ps_get_object_info_request_get_type
4422
LASSO_IDWSF2_PS_GET_OBJECT_INFO_REQUEST_CLASS
4423
LASSO_IS_IDWSF2_PS_GET_OBJECT_INFO_REQUEST_CLASS
4424
LASSO_IDWSF2_PS_GET_OBJECT_INFO_REQUEST_GET_CLASS
4425
</SECTION>
4426

  
4427
<SECTION>
4428
<FILE>ps_add_known_entity_response</FILE>
4429
<TITLE>LassoIdWsf2PsAddKnownEntityResponse</TITLE>
4430
LassoIdWsf2PsAddKnownEntityResponse
4431
lasso_idwsf2_ps_add_known_entity_response_new
4432
<SUBSECTION Standard>
4433
LASSO_IDWSF2_PS_ADD_KNOWN_ENTITY_RESPONSE
4434
LASSO_IS_IDWSF2_PS_ADD_KNOWN_ENTITY_RESPONSE
4435
LASSO_TYPE_IDWSF2_PS_ADD_KNOWN_ENTITY_RESPONSE
4436
lasso_idwsf2_ps_add_known_entity_response_get_type
4437
LASSO_IDWSF2_PS_ADD_KNOWN_ENTITY_RESPONSE_CLASS
4438
LASSO_IS_IDWSF2_PS_ADD_KNOWN_ENTITY_RESPONSE_CLASS
4439
LASSO_IDWSF2_PS_ADD_KNOWN_ENTITY_RESPONSE_GET_CLASS
4440
</SECTION>
4441

  
4442
<SECTION>
4443
<FILE>sb2_timeout</FILE>
4444
<TITLE>LassoIdWsf2Sb2Timeout</TITLE>
4445
LassoIdWsf2Sb2Timeout
4446
lasso_idwsf2_sb2_timeout_new
4447
<SUBSECTION Standard>
4448
LASSO_IDWSF2_SB2_TIMEOUT
4449
LASSO_IS_IDWSF2_SB2_TIMEOUT
4450
LASSO_TYPE_IDWSF2_SB2_TIMEOUT
4451
lasso_idwsf2_sb2_timeout_get_type
4452
LASSO_IDWSF2_SB2_TIMEOUT_CLASS
4453
LASSO_IS_IDWSF2_SB2_TIMEOUT_CLASS
4454
LASSO_IDWSF2_SB2_TIMEOUT_GET_CLASS
4455
</SECTION>
4456

  
4457
<SECTION>
4458
<FILE>disco_service_context</FILE>
4459
<TITLE>LassoIdWsf2DiscoServiceContext</TITLE>
4460
LassoIdWsf2DiscoServiceContext
4461
lasso_idwsf2_disco_service_context_new
4462
lasso_idwsf2_disco_service_context_new_full
4463
<SUBSECTION Standard>
4464
LASSO_IDWSF2_DISCO_SERVICE_CONTEXT
4465
LASSO_IS_IDWSF2_DISCO_SERVICE_CONTEXT
4466
LASSO_TYPE_IDWSF2_DISCO_SERVICE_CONTEXT
4467
lasso_idwsf2_disco_service_context_get_type
4468
LASSO_IDWSF2_DISCO_SERVICE_CONTEXT_CLASS
4469
LASSO_IS_IDWSF2_DISCO_SERVICE_CONTEXT_CLASS
4470
LASSO_IDWSF2_DISCO_SERVICE_CONTEXT_GET_CLASS
4471
</SECTION>
4472

  
4473
<SECTION>
4474
<FILE>subsref_result_query</FILE>
4475
<TITLE>LassoIdWsf2SubsRefResultQuery</TITLE>
4476
LassoIdWsf2SubsRefResultQuery
4477
lasso_idwsf2_subsref_result_query_new
4478
<SUBSECTION Standard>
4479
LASSO_IDWSF2_SUBSREF_RESULT_QUERY
4480
LASSO_IS_IDWSF2_SUBSREF_RESULT_QUERY
4481
LASSO_TYPE_IDWSF2_SUBSREF_RESULT_QUERY
4482
lasso_idwsf2_subsref_result_query_get_type
4483
LASSO_IDWSF2_SUBSREF_RESULT_QUERY_CLASS
4484
LASSO_IS_IDWSF2_SUBSREF_RESULT_QUERY_CLASS
4485
LASSO_IDWSF2_SUBSREF_RESULT_QUERY_GET_CLASS
4486
</SECTION>
4487

  
4488
<SECTION>
4489
<FILE>ps_add_collection_response</FILE>
4490
<TITLE>LassoIdWsf2PsAddCollectionResponse</TITLE>
4491
LassoIdWsf2PsAddCollectionResponse
4492
lasso_idwsf2_ps_add_collection_response_new
4493
<SUBSECTION Standard>
4494
LASSO_IDWSF2_PS_ADD_COLLECTION_RESPONSE
4495
LASSO_IS_IDWSF2_PS_ADD_COLLECTION_RESPONSE
4496
LASSO_TYPE_IDWSF2_PS_ADD_COLLECTION_RESPONSE
4497
lasso_idwsf2_ps_add_collection_response_get_type
4498
LASSO_IDWSF2_PS_ADD_COLLECTION_RESPONSE_CLASS
4499
LASSO_IS_IDWSF2_PS_ADD_COLLECTION_RESPONSE_CLASS
4500
LASSO_IDWSF2_PS_ADD_COLLECTION_RESPONSE_GET_CLASS
4501
</SECTION>
4502

  
4503
<SECTION>
4504
<FILE>dstref_result_query</FILE>
4505
<TITLE>LassoIdWsf2DstRefResultQuery</TITLE>
4506
LassoIdWsf2DstRefResultQuery
4507
lasso_idwsf2_dstref_result_query_new
4508
<SUBSECTION Standard>
4509
LASSO_IDWSF2_DSTREF_RESULT_QUERY
4510
LASSO_IS_IDWSF2_DSTREF_RESULT_QUERY
4511
LASSO_TYPE_IDWSF2_DSTREF_RESULT_QUERY
4512
lasso_idwsf2_dstref_result_query_get_type
4513
LASSO_IDWSF2_DSTREF_RESULT_QUERY_CLASS
4514
LASSO_IS_IDWSF2_DSTREF_RESULT_QUERY_CLASS
4515
LASSO_IDWSF2_DSTREF_RESULT_QUERY_GET_CLASS
4516
</SECTION>
4517

  
4518
<SECTION>
4519
<FILE>sb2_consent</FILE>
4520
<TITLE>LassoIdWsf2Sb2Consent</TITLE>
4521
LassoIdWsf2Sb2Consent
4522
lasso_idwsf2_sb2_consent_new
4523
<SUBSECTION Standard>
4524
LASSO_IDWSF2_SB2_CONSENT
4525
LASSO_IS_IDWSF2_SB2_CONSENT
4526
LASSO_TYPE_IDWSF2_SB2_CONSENT
4527
lasso_idwsf2_sb2_consent_get_type
4528
LASSO_IDWSF2_SB2_CONSENT_CLASS
4529
LASSO_IS_IDWSF2_SB2_CONSENT_CLASS
4530
LASSO_IDWSF2_SB2_CONSENT_GET_CLASS
4531
</SECTION>
4532

  
4533
<SECTION>
4534
<FILE>ps_item_data</FILE>
4535
<TITLE>LassoIdWsf2PsItemData</TITLE>
4536
LassoIdWsf2PsItemData
4537
lasso_idwsf2_ps_item_data_new
4538
<SUBSECTION Standard>
4539
LASSO_IDWSF2_PS_ITEM_DATA
4540
LASSO_IS_IDWSF2_PS_ITEM_DATA
4541
LASSO_TYPE_IDWSF2_PS_ITEM_DATA
4542
lasso_idwsf2_ps_item_data_get_type
4543
LASSO_IDWSF2_PS_ITEM_DATA_CLASS
4544
LASSO_IS_IDWSF2_PS_ITEM_DATA_CLASS
4545
LASSO_IDWSF2_PS_ITEM_DATA_GET_CLASS
4546
</SECTION>
4547

  
4548
<SECTION>
4549
<FILE>subsref_data</FILE>
4550
<TITLE>LassoIdWsf2SubsRefData</TITLE>
4551
LassoIdWsf2SubsRefData
4552
lasso_idwsf2_subsref_data_new
4553
<SUBSECTION Standard>
4554
LASSO_IDWSF2_SUBSREF_DATA
4555
LASSO_IS_IDWSF2_SUBSREF_DATA
4556
LASSO_TYPE_IDWSF2_SUBSREF_DATA
4557
lasso_idwsf2_subsref_data_get_type
4558
LASSO_IDWSF2_SUBSREF_DATA_CLASS
4559
LASSO_IS_IDWSF2_SUBSREF_DATA_CLASS
4560
LASSO_IDWSF2_SUBSREF_DATA_GET_CLASS
4561
</SECTION>
4562

  
4563
<SECTION>
4564
<FILE>ims_mapping_input</FILE>
4565
<TITLE>LassoIdWsf2ImsMappingInput</TITLE>
4566
LassoIdWsf2ImsMappingInput
4567
lasso_idwsf2_ims_mapping_input_new
4568
<SUBSECTION Standard>
4569
LASSO_IDWSF2_IMS_MAPPING_INPUT
4570
LASSO_IS_IDWSF2_IMS_MAPPING_INPUT
4571
LASSO_TYPE_IDWSF2_IMS_MAPPING_INPUT
4572
lasso_idwsf2_ims_mapping_input_get_type
4573
LASSO_IDWSF2_IMS_MAPPING_INPUT_CLASS
4574
LASSO_IS_IDWSF2_IMS_MAPPING_INPUT_CLASS
4575
LASSO_IDWSF2_IMS_MAPPING_INPUT_GET_CLASS
4576
</SECTION>
4577

  
4578
<SECTION>
4579
<FILE>sb2_usage_directive</FILE>
4580
<TITLE>LassoIdWsf2Sb2UsageDirective</TITLE>
4581
LassoIdWsf2Sb2UsageDirective
4582
lasso_idwsf2_sb2_usage_directive_new
4583
<SUBSECTION Standard>
4584
LASSO_IDWSF2_SB2_USAGE_DIRECTIVE
4585
LASSO_IS_IDWSF2_SB2_USAGE_DIRECTIVE
4586
LASSO_TYPE_IDWSF2_SB2_USAGE_DIRECTIVE
4587
lasso_idwsf2_sb2_usage_directive_get_type
4588
LASSO_IDWSF2_SB2_USAGE_DIRECTIVE_CLASS
4589
LASSO_IS_IDWSF2_SB2_USAGE_DIRECTIVE_CLASS
4590
LASSO_IDWSF2_SB2_USAGE_DIRECTIVE_GET_CLASS
4591
</SECTION>
4592

  
4593
<SECTION>
4594
<FILE>subsref_modify_item</FILE>
4595
<TITLE>LassoIdWsf2SubsRefModifyItem</TITLE>
4596
LassoIdWsf2SubsRefModifyItem
4597
lasso_idwsf2_subsref_modify_item_new
4598
<SUBSECTION Standard>
4599
LASSO_IDWSF2_SUBSREF_MODIFY_ITEM
4600
LASSO_IS_IDWSF2_SUBSREF_MODIFY_ITEM
4601
LASSO_TYPE_IDWSF2_SUBSREF_MODIFY_ITEM
4602
lasso_idwsf2_subsref_modify_item_get_type
4603
LASSO_IDWSF2_SUBSREF_MODIFY_ITEM_CLASS
4604
LASSO_IS_IDWSF2_SUBSREF_MODIFY_ITEM_CLASS
4605
LASSO_IDWSF2_SUBSREF_MODIFY_ITEM_GET_CLASS
4606
</SECTION>
4607

  
4608
<SECTION>
4609
<FILE>dstref_delete</FILE>
4610
<TITLE>LassoIdWsf2DstRefDelete</TITLE>
4611
LassoIdWsf2DstRefDelete
4612
lasso_idwsf2_dstref_delete_new
4613
<SUBSECTION Standard>
4614
LASSO_IDWSF2_DSTREF_DELETE
4615
LASSO_IS_IDWSF2_DSTREF_DELETE
4616
LASSO_TYPE_IDWSF2_DSTREF_DELETE
4617
lasso_idwsf2_dstref_delete_get_type
4618
LASSO_IDWSF2_DSTREF_DELETE_CLASS
4619
LASSO_IS_IDWSF2_DSTREF_DELETE_CLASS
4620
LASSO_IDWSF2_DSTREF_DELETE_GET_CLASS
4621
</SECTION>
4622

  
4623
<SECTION>
4624
<FILE>id_wsf_2_0_is_interaction_request</FILE>
4625
LASSO_IS_IDWSF2_IS_INTERACTION_REQUEST
4626
<TITLE>LassoIdWsf2IsInteractionRequest</TITLE>
4627
LassoIdWsf2IsInteractionRequest
4628
lasso_idwsf2_is_interaction_request_new
4629
<SUBSECTION Standard>
4630
LASSO_IDWSF2_IS_INTERACTION_REQUEST
4631
LASSO_TYPE_IDWSF2_IS_INTERACTION_REQUEST
4632
lasso_idwsf2_is_interaction_request_get_type
4633
LASSO_IDWSF2_IS_INTERACTION_REQUEST_CLASS
4634
LASSO_IS_IDWSF2_IS_INTERACTION_REQUEST_CLASS
4635
LASSO_IDWSF2_IS_INTERACTION_REQUEST_GET_CLASS
4636
</SECTION>
4637

  
4638
<SECTION>
4639
<FILE>ps_object</FILE>
4640
<TITLE>LassoIdWsf2PsObject</TITLE>
4641
LassoIdWsf2PsObject
4642
lasso_idwsf2_ps_object_new
4643
<SUBSECTION Standard>
4644
LASSO_IDWSF2_PS_OBJECT
4645
LASSO_IS_IDWSF2_PS_OBJECT
4646
LASSO_TYPE_IDWSF2_PS_OBJECT
4647
lasso_idwsf2_ps_object_get_type
4648
LASSO_IDWSF2_PS_OBJECT_CLASS
4649
LASSO_IS_IDWSF2_PS_OBJECT_CLASS
4650
LASSO_IDWSF2_PS_OBJECT_GET_CLASS
4651
</SECTION>
4652

  
4653
<SECTION>
4654
<FILE>dstref_create</FILE>
4655
<TITLE>LassoIdWsf2DstRefCreate</TITLE>
4656
LassoIdWsf2DstRefCreate
4657
lasso_idwsf2_dstref_create_new
4658
<SUBSECTION Standard>
4659
LASSO_IDWSF2_DSTREF_CREATE
4660
LASSO_IS_IDWSF2_DSTREF_CREATE
4661
LASSO_TYPE_IDWSF2_DSTREF_CREATE
4662
lasso_idwsf2_dstref_create_get_type
4663
LASSO_IDWSF2_DSTREF_CREATE_CLASS
4664
LASSO_IS_IDWSF2_DSTREF_CREATE_CLASS
4665
LASSO_IDWSF2_DSTREF_CREATE_GET_CLASS
4666
</SECTION>
4667

  
4668
<SECTION>
4669
<FILE>sb2_credentials_context</FILE>
4670
<TITLE>LassoIdWsf2Sb2CredentialsContext</TITLE>
4671
LassoIdWsf2Sb2CredentialsContext
4672
lasso_idwsf2_sb2_credentials_context_new
4673
<SUBSECTION Standard>
4674
LASSO_IDWSF2_SB2_CREDENTIALS_CONTEXT
4675
LASSO_IS_IDWSF2_SB2_CREDENTIALS_CONTEXT
4676
LASSO_TYPE_IDWSF2_SB2_CREDENTIALS_CONTEXT
4677
lasso_idwsf2_sb2_credentials_context_get_type
4678
LASSO_IDWSF2_SB2_CREDENTIALS_CONTEXT_CLASS
4679
LASSO_IS_IDWSF2_SB2_CREDENTIALS_CONTEXT_CLASS
4680
LASSO_IDWSF2_SB2_CREDENTIALS_CONTEXT_GET_CLASS
4681
</SECTION>
4682

  
4683
<SECTION>
4684
<FILE>dstref_modify_response</FILE>
4685
<TITLE>LassoIdWsf2DstRefModifyResponse</TITLE>
4686
LassoIdWsf2DstRefModifyResponse
4687
lasso_idwsf2_dstref_modify_response_new
4688
<SUBSECTION Standard>
4689
LASSO_IDWSF2_DSTREF_MODIFY_RESPONSE
4690
LASSO_IS_IDWSF2_DSTREF_MODIFY_RESPONSE
4691
LASSO_TYPE_IDWSF2_DSTREF_MODIFY_RESPONSE
4692
lasso_idwsf2_dstref_modify_response_get_type
4693
LASSO_IDWSF2_DSTREF_MODIFY_RESPONSE_CLASS
4694
LASSO_IS_IDWSF2_DSTREF_MODIFY_RESPONSE_CLASS
4695
LASSO_IDWSF2_DSTREF_MODIFY_RESPONSE_GET_CLASS
4696
</SECTION>
4697

  
4698
<SECTION>
4699
<FILE>disco_svc_metadata</FILE>
4700
<TITLE>LassoIdWsf2DiscoSvcMetadata</TITLE>
4701
LassoIdWsf2DiscoSvcMetadata
4702
lasso_idwsf2_disco_svc_metadata_new
4703
lasso_idwsf2_disco_svc_metadata_new_full
4704
<SUBSECTION Standard>
4705
LASSO_IDWSF2_DISCO_SVC_METADATA
4706
LASSO_IS_IDWSF2_DISCO_SVC_METADATA
4707
LASSO_TYPE_IDWSF2_DISCO_SVC_METADATA
4708
lasso_idwsf2_disco_svc_metadata_get_type
4709
LASSO_IDWSF2_DISCO_SVC_METADATA_CLASS
4710
LASSO_IS_IDWSF2_DISCO_SVC_METADATA_CLASS
4711
LASSO_IDWSF2_DISCO_SVC_METADATA_GET_CLASS
4712
</SECTION>
4713

  
4714
<SECTION>
4715
<FILE>util_response</FILE>
4716
<TITLE>LassoIdWsf2UtilResponse</TITLE>
4717
LassoIdWsf2UtilResponse
4718
lasso_idwsf2_util_response_new
4719
lasso_idwsf2_util_response_set_status
4720
lasso_idwsf2_util_response_set_status2
4721
<SUBSECTION Standard>
4722
LASSO_IDWSF2_UTIL_RESPONSE
4723
LASSO_IS_IDWSF2_UTIL_RESPONSE
4724
LASSO_TYPE_IDWSF2_UTIL_RESPONSE
4725
lasso_idwsf2_util_response_get_type
4726
LASSO_IDWSF2_UTIL_RESPONSE_CLASS
4727
LASSO_IS_IDWSF2_UTIL_RESPONSE_CLASS
4728
LASSO_IDWSF2_UTIL_RESPONSE_GET_CLASS
4729
</SECTION>
4730

  
4731
<SECTION>
4732
<FILE>sbf_framework</FILE>
4733
<TITLE>LassoIdWsf2SbfFramework</TITLE>
4734
LassoIdWsf2SbfFramework
4735
lasso_idwsf2_sbf_framework_new
4736
lasso_idwsf2_sbf_framework_new_full
4737
<SUBSECTION Standard>
4738
LASSO_IDWSF2_SBF_FRAMEWORK
4739
LASSO_IS_IDWSF2_SBF_FRAMEWORK
4740
LASSO_TYPE_IDWSF2_SBF_FRAMEWORK
4741
lasso_idwsf2_sbf_framework_get_type
4742
LASSO_IDWSF2_SBF_FRAMEWORK_CLASS
4743
LASSO_IS_IDWSF2_SBF_FRAMEWORK_CLASS
4744
LASSO_IDWSF2_SBF_FRAMEWORK_GET_CLASS
4745
</SECTION>
4746

  
4747
<SECTION>
4748
<FILE>disco_requested_service</FILE>
4749
<TITLE>LassoIdWsf2DiscoRequestedService</TITLE>
4750
LassoIdWsf2DiscoRequestedService
4751
lasso_idwsf2_disco_requested_service_new
4752
<SUBSECTION Standard>
4753
LASSO_IDWSF2_DISCO_REQUESTED_SERVICE
4754
LASSO_IS_IDWSF2_DISCO_REQUESTED_SERVICE
4755
LASSO_TYPE_IDWSF2_DISCO_REQUESTED_SERVICE
4756
lasso_idwsf2_disco_requested_service_get_type
4757
LASSO_IDWSF2_DISCO_REQUESTED_SERVICE_CLASS
4758
LASSO_IS_IDWSF2_DISCO_REQUESTED_SERVICE_CLASS
4759
LASSO_IDWSF2_DISCO_REQUESTED_SERVICE_GET_CLASS
4760
</SECTION>
4761

  
4762
<SECTION>
4763
<FILE>ps_list_members_request</FILE>
4764
<TITLE>LassoIdWsf2PsListMembersRequest</TITLE>
4765
LassoIdWsf2PsListMembersRequest
4766
lasso_idwsf2_ps_list_members_request_new
4767
<SUBSECTION Standard>
4768
LASSO_IDWSF2_PS_LIST_MEMBERS_REQUEST
4769
LASSO_IS_IDWSF2_PS_LIST_MEMBERS_REQUEST
4770
LASSO_TYPE_IDWSF2_PS_LIST_MEMBERS_REQUEST
4771
lasso_idwsf2_ps_list_members_request_get_type
4772
LASSO_IDWSF2_PS_LIST_MEMBERS_REQUEST_CLASS
4773
LASSO_IS_IDWSF2_PS_LIST_MEMBERS_REQUEST_CLASS
4774
LASSO_IDWSF2_PS_LIST_MEMBERS_REQUEST_GET_CLASS
4775
</SECTION>
4776

  
4777
<SECTION>
4778
<FILE>subsref_query_item</FILE>
4779
<TITLE>LassoIdWsf2SubsRefQueryItem</TITLE>
4780
LassoIdWsf2SubsRefQueryItem
4781
lasso_idwsf2_subsref_query_item_new
4782
<SUBSECTION Standard>
4783
LASSO_IDWSF2_SUBSREF_QUERY_ITEM
4784
LASSO_IS_IDWSF2_SUBSREF_QUERY_ITEM
4785
LASSO_TYPE_IDWSF2_SUBSREF_QUERY_ITEM
4786
lasso_idwsf2_subsref_query_item_get_type
4787
LASSO_IDWSF2_SUBSREF_QUERY_ITEM_CLASS
4788
LASSO_IS_IDWSF2_SUBSREF_QUERY_ITEM_CLASS
4789
LASSO_IDWSF2_SUBSREF_QUERY_ITEM_GET_CLASS
4790
</SECTION>
4791

  
4792
<SECTION>
4793
<FILE>ps_resolve_identifier_request</FILE>
4794
<TITLE>LassoIdWsf2PsResolveIdentifierRequest</TITLE>
4795
LassoIdWsf2PsResolveIdentifierRequest
4796
lasso_idwsf2_ps_resolve_identifier_request_new
4797
<SUBSECTION Standard>
4798
LASSO_IDWSF2_PS_RESOLVE_IDENTIFIER_REQUEST
4799
LASSO_IS_IDWSF2_PS_RESOLVE_IDENTIFIER_REQUEST
4800
LASSO_TYPE_IDWSF2_PS_RESOLVE_IDENTIFIER_REQUEST
4801
lasso_idwsf2_ps_resolve_identifier_request_get_type
4802
LASSO_IDWSF2_PS_RESOLVE_IDENTIFIER_REQUEST_CLASS
4803
LASSO_IS_IDWSF2_PS_RESOLVE_IDENTIFIER_REQUEST_CLASS
4804
LASSO_IDWSF2_PS_RESOLVE_IDENTIFIER_REQUEST_GET_CLASS
4805
</SECTION>
4806

  
4807
<SECTION>
4808
<FILE>disco_svc_md_replace</FILE>
4809
<TITLE>LassoIdWsf2DiscoSvcMDReplace</TITLE>
4810
LassoIdWsf2DiscoSvcMDReplace
4811
lasso_idwsf2_disco_svc_md_replace_new
4812
<SUBSECTION Standard>
4813
LASSO_IDWSF2_DISCO_SVC_MD_REPLACE
4814
LASSO_IS_IDWSF2_DISCO_SVC_MD_REPLACE
4815
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_REPLACE
4816
lasso_idwsf2_disco_svc_md_replace_get_type
4817
LASSO_IDWSF2_DISCO_SVC_MD_REPLACE_CLASS
4818
LASSO_IS_IDWSF2_DISCO_SVC_MD_REPLACE_CLASS
4819
LASSO_IDWSF2_DISCO_SVC_MD_REPLACE_GET_CLASS
4820
</SECTION>
4821

  
4822
<SECTION>
4823
<FILE>sb2_sender</FILE>
4824
<TITLE>LassoIdWsf2Sb2Sender</TITLE>
4825
LassoIdWsf2Sb2Sender
4826
lasso_idwsf2_sb2_sender_new
4827
<SUBSECTION Standard>
4828
LASSO_IDWSF2_SB2_SENDER
4829
LASSO_IS_IDWSF2_SB2_SENDER
4830
LASSO_TYPE_IDWSF2_SB2_SENDER
4831
lasso_idwsf2_sb2_sender_get_type
4832
LASSO_IDWSF2_SB2_SENDER_CLASS
4833
LASSO_IS_IDWSF2_SB2_SENDER_CLASS
4834
LASSO_IDWSF2_SB2_SENDER_GET_CLASS
4835
</SECTION>
4836

  
4837
<SECTION>
4838
<FILE>dstref_query_response</FILE>
4839
<TITLE>LassoIdWsf2DstRefQueryResponse</TITLE>
4840
LassoIdWsf2DstRefQueryResponse
4841
lasso_idwsf2_dstref_query_response_new
4842
<SUBSECTION Standard>
4843
LASSO_IDWSF2_DSTREF_QUERY_RESPONSE
4844
LASSO_IS_IDWSF2_DSTREF_QUERY_RESPONSE
4845
LASSO_TYPE_IDWSF2_DSTREF_QUERY_RESPONSE
4846
lasso_idwsf2_dstref_query_response_get_type
4847
LASSO_IDWSF2_DSTREF_QUERY_RESPONSE_CLASS
4848
LASSO_IS_IDWSF2_DSTREF_QUERY_RESPONSE_CLASS
4849
LASSO_IDWSF2_DSTREF_QUERY_RESPONSE_GET_CLASS
4850
</SECTION>
4851

  
4852
<SECTION>
4853
<FILE>ps_notify</FILE>
4854
<TITLE>LassoIdWsf2PsNotify</TITLE>
4855
LassoIdWsf2PsNotify
4856
lasso_idwsf2_ps_notify_new
4857
<SUBSECTION Standard>
4858
LASSO_IDWSF2_PS_NOTIFY
4859
LASSO_IS_IDWSF2_PS_NOTIFY
4860
LASSO_TYPE_IDWSF2_PS_NOTIFY
4861
lasso_idwsf2_ps_notify_get_type
4862
LASSO_IDWSF2_PS_NOTIFY_CLASS
4863
LASSO_IS_IDWSF2_PS_NOTIFY_CLASS
4864
LASSO_IDWSF2_PS_NOTIFY_GET_CLASS
4865
</SECTION>
4866

  
4867
<SECTION>
4868
<FILE>ps_get_object_info_response</FILE>
4869
<TITLE>LassoIdWsf2PsGetObjectInfoResponse</TITLE>
4870
LassoIdWsf2PsGetObjectInfoResponse
4871
lasso_idwsf2_ps_get_object_info_response_new
4872
<SUBSECTION Standard>
4873
LASSO_IDWSF2_PS_GET_OBJECT_INFO_RESPONSE
4874
LASSO_IS_IDWSF2_PS_GET_OBJECT_INFO_RESPONSE
4875
LASSO_TYPE_IDWSF2_PS_GET_OBJECT_INFO_RESPONSE
4876
lasso_idwsf2_ps_get_object_info_response_get_type
4877
LASSO_IDWSF2_PS_GET_OBJECT_INFO_RESPONSE_CLASS
4878
LASSO_IS_IDWSF2_PS_GET_OBJECT_INFO_RESPONSE_CLASS
4879
LASSO_IDWSF2_PS_GET_OBJECT_INFO_RESPONSE_GET_CLASS
4880
</SECTION>
4881

  
4882
<SECTION>
4883
<FILE>dstref_test_item</FILE>
4884
<TITLE>LassoIdWsf2DstRefTestItem</TITLE>
4885
LassoIdWsf2DstRefTestItem
4886
lasso_idwsf2_dstref_test_item_new
4887
<SUBSECTION Standard>
4888
LASSO_IDWSF2_DSTREF_TEST_ITEM
4889
LASSO_IS_IDWSF2_DSTREF_TEST_ITEM
4890
LASSO_TYPE_IDWSF2_DSTREF_TEST_ITEM
4891
lasso_idwsf2_dstref_test_item_get_type
4892
LASSO_IDWSF2_DSTREF_TEST_ITEM_CLASS
4893
LASSO_IS_IDWSF2_DSTREF_TEST_ITEM_CLASS
4894
LASSO_IDWSF2_DSTREF_TEST_ITEM_GET_CLASS
4895
</SECTION>
4896

  
4897
<SECTION>
4898
<FILE>id_wsf_2_0_is_item</FILE>
4899
LASSO_IS_IDWSF2_IS_ITEM
4900
<TITLE>LassoIdWsf2IsItem</TITLE>
4901
LassoIdWsf2IsItem
4902
lasso_idwsf2_is_item_new
4903
<SUBSECTION Standard>
4904
LASSO_IDWSF2_IS_ITEM
4905
LASSO_TYPE_IDWSF2_IS_ITEM
4906
lasso_idwsf2_is_item_get_type
4907
LASSO_IDWSF2_IS_ITEM_CLASS
4908
LASSO_IS_IDWSF2_IS_ITEM_CLASS
4909
LASSO_IDWSF2_IS_ITEM_GET_CLASS
4910
</SECTION>
4911

  
4912
<SECTION>
4913
<FILE>subsref_create</FILE>
4914
<TITLE>LassoIdWsf2SubsRefCreate</TITLE>
4915
LassoIdWsf2SubsRefCreate
4916
lasso_idwsf2_subsref_create_new
4917
<SUBSECTION Standard>
4918
LASSO_IDWSF2_SUBSREF_CREATE
4919
LASSO_IS_IDWSF2_SUBSREF_CREATE
4920
LASSO_TYPE_IDWSF2_SUBSREF_CREATE
4921
lasso_idwsf2_subsref_create_get_type
4922
LASSO_IDWSF2_SUBSREF_CREATE_CLASS
4923
LASSO_IS_IDWSF2_SUBSREF_CREATE_CLASS
4924
LASSO_IDWSF2_SUBSREF_CREATE_GET_CLASS
4925
</SECTION>
4926

  
4927
<SECTION>
4928
<FILE>subs_ref_item</FILE>
4929
<TITLE>LassoIdWsf2SubsRefItem</TITLE>
4930
LassoIdWsf2SubsRefItem
4931
lasso_idwsf2_subs_ref_item_new
4932
<SUBSECTION Standard>
4933
LASSO_IDWSF2_SUBS_REF_ITEM
4934
LASSO_IS_IDWSF2_SUBS_REF_ITEM
4935
LASSO_TYPE_IDWSF2_SUBS_REF_ITEM
4936
lasso_idwsf2_subs_ref_item_get_type
4937
LASSO_IDWSF2_SUBS_REF_ITEM_CLASS
4938
LASSO_IS_IDWSF2_SUBS_REF_ITEM_CLASS
4939
LASSO_IDWSF2_SUBS_REF_ITEM_GET_CLASS
4940
</SECTION>
4941

  
4942
<SECTION>
4943
<FILE>sec_token</FILE>
4944
<TITLE>LassoIdWsf2SecToken</TITLE>
4945
LassoIdWsf2SecToken
4946
lasso_idwsf2_sec_token_new
4947
<SUBSECTION Standard>
4948
LASSO_IDWSF2_SEC_TOKEN
4949
LASSO_IS_IDWSF2_SEC_TOKEN
4950
LASSO_TYPE_IDWSF2_SEC_TOKEN
4951
lasso_idwsf2_sec_token_get_type
4952
LASSO_IDWSF2_SEC_TOKEN_CLASS
4953
LASSO_IS_IDWSF2_SEC_TOKEN_CLASS
4954
LASSO_IDWSF2_SEC_TOKEN_GET_CLASS
4955
</SECTION>
4956

  
4957
<SECTION>
4958
<FILE>dst_test_item_base</FILE>
4959
<TITLE>LassoIdWsf2DstTestItemBase</TITLE>
4960
LassoIdWsf2DstTestItemBase
4961
lasso_idwsf2_dst_test_item_base_new
4962
<SUBSECTION Standard>
4963
LASSO_IDWSF2_DST_TEST_ITEM_BASE
4964
LASSO_IS_IDWSF2_DST_TEST_ITEM_BASE
4965
LASSO_TYPE_IDWSF2_DST_TEST_ITEM_BASE
4966
lasso_idwsf2_dst_test_item_base_get_type
4967
LASSO_IDWSF2_DST_TEST_ITEM_BASE_CLASS
4968
LASSO_IS_IDWSF2_DST_TEST_ITEM_BASE_CLASS
4969
LASSO_IDWSF2_DST_TEST_ITEM_BASE_GET_CLASS
4970
</SECTION>
4971

  
4972
<SECTION>
4973
<FILE>ps_add_entity_request</FILE>
4974
<TITLE>LassoIdWsf2PsAddEntityRequest</TITLE>
4975
LassoIdWsf2PsAddEntityRequest
4976
lasso_idwsf2_ps_add_entity_request_new
4977
<SUBSECTION Standard>
4978
LASSO_IDWSF2_PS_ADD_ENTITY_REQUEST
4979
LASSO_IS_IDWSF2_PS_ADD_ENTITY_REQUEST
4980
LASSO_TYPE_IDWSF2_PS_ADD_ENTITY_REQUEST
4981
lasso_idwsf2_ps_add_entity_request_get_type
4982
LASSO_IDWSF2_PS_ADD_ENTITY_REQUEST_CLASS
4983
LASSO_IS_IDWSF2_PS_ADD_ENTITY_REQUEST_CLASS
4984
LASSO_IDWSF2_PS_ADD_ENTITY_REQUEST_GET_CLASS
4985
</SECTION>
4986

  
4987
<SECTION>
4988
<FILE>dst_request</FILE>
4989
<TITLE>LassoIdWsf2DstRequest</TITLE>
4990
LassoIdWsf2DstRequest
4991
lasso_idwsf2_dst_request_new
4992
<SUBSECTION Standard>
4993
LASSO_IDWSF2_DST_REQUEST
4994
LASSO_IS_IDWSF2_DST_REQUEST
4995
LASSO_TYPE_IDWSF2_DST_REQUEST
4996
lasso_idwsf2_dst_request_get_type
4997
LASSO_IDWSF2_DST_REQUEST_CLASS
4998
LASSO_IS_IDWSF2_DST_REQUEST_CLASS
4999
LASSO_IDWSF2_DST_REQUEST_GET_CLASS
5000
</SECTION>
5001

  
5002
<SECTION>
5003
<FILE>subsref_delete</FILE>
5004
<TITLE>LassoIdWsf2SubsRefDelete</TITLE>
5005
LassoIdWsf2SubsRefDelete
5006
lasso_idwsf2_subsref_delete_new
5007
<SUBSECTION Standard>
5008
LASSO_IDWSF2_SUBSREF_DELETE
5009
LASSO_IS_IDWSF2_SUBSREF_DELETE
5010
LASSO_TYPE_IDWSF2_SUBSREF_DELETE
5011
lasso_idwsf2_subsref_delete_get_type
5012
LASSO_IDWSF2_SUBSREF_DELETE_CLASS
5013
LASSO_IS_IDWSF2_SUBSREF_DELETE_CLASS
5014
LASSO_IDWSF2_SUBSREF_DELETE_GET_CLASS
5015
</SECTION>
5016

  
5017
<SECTION>
5018
<FILE>subsref_delete_response</FILE>
5019
<TITLE>LassoIdWsf2SubsRefDeleteResponse</TITLE>
5020
LassoIdWsf2SubsRefDeleteResponse
5021
lasso_idwsf2_subsref_delete_response_new
5022
<SUBSECTION Standard>
5023
LASSO_IDWSF2_SUBSREF_DELETE_RESPONSE
5024
LASSO_IS_IDWSF2_SUBSREF_DELETE_RESPONSE
5025
LASSO_TYPE_IDWSF2_SUBSREF_DELETE_RESPONSE
5026
lasso_idwsf2_subsref_delete_response_get_type
5027
LASSO_IDWSF2_SUBSREF_DELETE_RESPONSE_CLASS
5028
LASSO_IS_IDWSF2_SUBSREF_DELETE_RESPONSE_CLASS
5029
LASSO_IDWSF2_SUBSREF_DELETE_RESPONSE_GET_CLASS
5030
</SECTION>
5031

  
5032
<SECTION>
5033
<FILE>sb2_target_identity</FILE>
5034
<TITLE>LassoIdWsf2Sb2TargetIdentity</TITLE>
5035
LassoIdWsf2Sb2TargetIdentity
5036
lasso_idwsf2_sb2_target_identity_new
5037
<SUBSECTION Standard>
5038
LASSO_IDWSF2_SB2_TARGET_IDENTITY
5039
LASSO_IS_IDWSF2_SB2_TARGET_IDENTITY
5040
LASSO_TYPE_IDWSF2_SB2_TARGET_IDENTITY
5041
lasso_idwsf2_sb2_target_identity_get_type
5042
LASSO_IDWSF2_SB2_TARGET_IDENTITY_CLASS
5043
LASSO_IS_IDWSF2_SB2_TARGET_IDENTITY_CLASS
5044
LASSO_IDWSF2_SB2_TARGET_IDENTITY_GET_CLASS
5045
</SECTION>
5046

  
5047
<SECTION>
5048
<FILE>subsref_notification</FILE>
5049
<TITLE>LassoIdWsf2SubsRefNotification</TITLE>
5050
LassoIdWsf2SubsRefNotification
5051
lasso_idwsf2_subsref_notification_new
5052
<SUBSECTION Standard>
5053
LASSO_IDWSF2_SUBSREF_NOTIFICATION
5054
LASSO_IS_IDWSF2_SUBSREF_NOTIFICATION
5055
LASSO_TYPE_IDWSF2_SUBSREF_NOTIFICATION
5056
lasso_idwsf2_subsref_notification_get_type
5057
LASSO_IDWSF2_SUBSREF_NOTIFICATION_CLASS
5058
LASSO_IS_IDWSF2_SUBSREF_NOTIFICATION_CLASS
5059
LASSO_IDWSF2_SUBSREF_NOTIFICATION_GET_CLASS
5060
</SECTION>
5061

  
5062
<SECTION>
5063
<FILE>ps_test_membership_response</FILE>
5064
<TITLE>LassoIdWsf2PsTestMembershipResponse</TITLE>
5065
LassoIdWsf2PsTestMembershipResponse
5066
lasso_idwsf2_ps_test_membership_response_new
5067
<SUBSECTION Standard>
5068
LASSO_IDWSF2_PS_TEST_MEMBERSHIP_RESPONSE
5069
LASSO_IS_IDWSF2_PS_TEST_MEMBERSHIP_RESPONSE
5070
LASSO_TYPE_IDWSF2_PS_TEST_MEMBERSHIP_RESPONSE
5071
lasso_idwsf2_ps_test_membership_response_get_type
5072
LASSO_IDWSF2_PS_TEST_MEMBERSHIP_RESPONSE_CLASS
5073
LASSO_IS_IDWSF2_PS_TEST_MEMBERSHIP_RESPONSE_CLASS
5074
LASSO_IDWSF2_PS_TEST_MEMBERSHIP_RESPONSE_GET_CLASS
5075
</SECTION>
5076

  
5077
<SECTION>
5078
<FILE>dstref_modify_item</FILE>
5079
<TITLE>LassoIdWsf2DstRefModifyItem</TITLE>
5080
LassoIdWsf2DstRefModifyItem
5081
lasso_idwsf2_dstref_modify_item_new
5082
lasso_idwsf2_dstref_modify_item_new_full
5083
<SUBSECTION Standard>
5084
LASSO_IDWSF2_DSTREF_MODIFY_ITEM
5085
LASSO_IS_IDWSF2_DSTREF_MODIFY_ITEM
5086
LASSO_TYPE_IDWSF2_DSTREF_MODIFY_ITEM
5087
lasso_idwsf2_dstref_modify_item_get_type
5088
LASSO_IDWSF2_DSTREF_MODIFY_ITEM_CLASS
5089
LASSO_IS_IDWSF2_DSTREF_MODIFY_ITEM_CLASS
5090
LASSO_IDWSF2_DSTREF_MODIFY_ITEM_GET_CLASS
5091
</SECTION>
5092

  
5093
<SECTION>
5094
<FILE>dstref_app_data</FILE>
5095
<TITLE>LassoIdWsf2DstRefAppData</TITLE>
5096
LassoIdWsf2DstRefAppData
5097
lasso_idwsf2_dstref_app_data_new
5098
<SUBSECTION Standard>
5099
LASSO_IDWSF2_DSTREF_APP_DATA
5100
LASSO_IS_IDWSF2_DSTREF_APP_DATA
5101
LASSO_TYPE_IDWSF2_DSTREF_APP_DATA
5102
lasso_idwsf2_dstref_app_data_get_type
5103
LASSO_IDWSF2_DSTREF_APP_DATA_CLASS
5104
LASSO_IS_IDWSF2_DSTREF_APP_DATA_CLASS
5105
LASSO_IDWSF2_DSTREF_APP_DATA_GET_CLASS
5106
</SECTION>
5107

  
5108
<SECTION>
5109
<FILE>ps_list_members_response</FILE>
5110
<TITLE>LassoIdWsf2PsListMembersResponse</TITLE>
5111
LassoIdWsf2PsListMembersResponse
5112
lasso_idwsf2_ps_list_members_response_new
5113
<SUBSECTION Standard>
5114
LASSO_IDWSF2_PS_LIST_MEMBERS_RESPONSE
5115
LASSO_IS_IDWSF2_PS_LIST_MEMBERS_RESPONSE
5116
LASSO_TYPE_IDWSF2_PS_LIST_MEMBERS_RESPONSE
5117
lasso_idwsf2_ps_list_members_response_get_type
5118
LASSO_IDWSF2_PS_LIST_MEMBERS_RESPONSE_CLASS
5119
LASSO_IS_IDWSF2_PS_LIST_MEMBERS_RESPONSE_CLASS
5120
LASSO_IDWSF2_PS_LIST_MEMBERS_RESPONSE_GET_CLASS
5121
</SECTION>
5122

  
5123
<SECTION>
5124
<FILE>sec_transited_provider_path</FILE>
5125
<TITLE>LassoIdWsf2SecTransitedProviderPath</TITLE>
5126
LassoIdWsf2SecTransitedProviderPath
5127
lasso_idwsf2_sec_transited_provider_path_new
5128
<SUBSECTION Standard>
5129
LASSO_IDWSF2_SEC_TRANSITED_PROVIDER_PATH
5130
LASSO_IS_IDWSF2_SEC_TRANSITED_PROVIDER_PATH
5131
LASSO_TYPE_IDWSF2_SEC_TRANSITED_PROVIDER_PATH
5132
lasso_idwsf2_sec_transited_provider_path_get_type
5133
LASSO_IDWSF2_SEC_TRANSITED_PROVIDER_PATH_CLASS
5134
LASSO_IS_IDWSF2_SEC_TRANSITED_PROVIDER_PATH_CLASS
5135
LASSO_IDWSF2_SEC_TRANSITED_PROVIDER_PATH_GET_CLASS
5136
</SECTION>
5137

  
5138
<SECTION>
5139
<FILE>ps_add_collection_request</FILE>
5140
<TITLE>LassoIdWsf2PsAddCollectionRequest</TITLE>
5141
LassoIdWsf2PsAddCollectionRequest
5142
lasso_idwsf2_ps_add_collection_request_new
5143
<SUBSECTION Standard>
5144
LASSO_IDWSF2_PS_ADD_COLLECTION_REQUEST
5145
LASSO_IS_IDWSF2_PS_ADD_COLLECTION_REQUEST
5146
LASSO_TYPE_IDWSF2_PS_ADD_COLLECTION_REQUEST
5147
lasso_idwsf2_ps_add_collection_request_get_type
5148
LASSO_IDWSF2_PS_ADD_COLLECTION_REQUEST_CLASS
5149
LASSO_IS_IDWSF2_PS_ADD_COLLECTION_REQUEST_CLASS
5150
LASSO_IDWSF2_PS_ADD_COLLECTION_REQUEST_GET_CLASS
5151
</SECTION>
5152

  
5153
<SECTION>
5154
<FILE>disco_svc_md_register</FILE>
5155
<TITLE>LassoIdWsf2DiscoSvcMDRegister</TITLE>
5156
LassoIdWsf2DiscoSvcMDRegister
5157
lasso_idwsf2_disco_svc_md_register_new
5158
lasso_idwsf2_disco_svc_md_register_new_full
5159
<SUBSECTION Standard>
5160
LASSO_IDWSF2_DISCO_SVC_MD_REGISTER
5161
LASSO_IS_IDWSF2_DISCO_SVC_MD_REGISTER
5162
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_REGISTER
5163
lasso_idwsf2_disco_svc_md_register_get_type
5164
LASSO_IDWSF2_DISCO_SVC_MD_REGISTER_CLASS
5165
LASSO_IS_IDWSF2_DISCO_SVC_MD_REGISTER_CLASS
5166
LASSO_IDWSF2_DISCO_SVC_MD_REGISTER_GET_CLASS
5167
</SECTION>
5168

  
5169
<SECTION>
5170
<FILE>ps_query_objects_response</FILE>
5171
<TITLE>LassoIdWsf2PsQueryObjectsResponse</TITLE>
5172
LassoIdWsf2PsQueryObjectsResponse
5173
lasso_idwsf2_ps_query_objects_response_new
5174
<SUBSECTION Standard>
5175
LASSO_IDWSF2_PS_QUERY_OBJECTS_RESPONSE
5176
LASSO_IS_IDWSF2_PS_QUERY_OBJECTS_RESPONSE
5177
LASSO_TYPE_IDWSF2_PS_QUERY_OBJECTS_RESPONSE
5178
lasso_idwsf2_ps_query_objects_response_get_type
5179
LASSO_IDWSF2_PS_QUERY_OBJECTS_RESPONSE_CLASS
5180
LASSO_IS_IDWSF2_PS_QUERY_OBJECTS_RESPONSE_CLASS
5181
LASSO_IDWSF2_PS_QUERY_OBJECTS_RESPONSE_GET_CLASS
5182
</SECTION>
5183

  
5184
<SECTION>
5185
<FILE>subs_notification</FILE>
5186
<TITLE>LassoIdWsf2SubsNotification</TITLE>
5187
LassoIdWsf2SubsNotification
5188
lasso_idwsf2_subs_notification_new
5189
<SUBSECTION Standard>
5190
LASSO_IDWSF2_SUBS_NOTIFICATION
5191
LASSO_IS_IDWSF2_SUBS_NOTIFICATION
5192
LASSO_TYPE_IDWSF2_SUBS_NOTIFICATION
5193
lasso_idwsf2_subs_notification_get_type
5194
LASSO_IDWSF2_SUBS_NOTIFICATION_CLASS
5195
LASSO_IS_IDWSF2_SUBS_NOTIFICATION_CLASS
5196
LASSO_IDWSF2_SUBS_NOTIFICATION_GET_CLASS
5197
</SECTION>
5198

  
5199
<SECTION>
5200
<FILE>disco_security_context</FILE>
5201
<TITLE>LassoIdWsf2DiscoSecurityContext</TITLE>
5202
LassoIdWsf2DiscoSecurityContext
5203
lasso_idwsf2_disco_security_context_new
5204
<SUBSECTION Standard>
5205
LASSO_IDWSF2_DISCO_SECURITY_CONTEXT
5206
LASSO_IS_IDWSF2_DISCO_SECURITY_CONTEXT
5207
LASSO_TYPE_IDWSF2_DISCO_SECURITY_CONTEXT
5208
lasso_idwsf2_disco_security_context_get_type
5209
LASSO_IDWSF2_DISCO_SECURITY_CONTEXT_CLASS
5210
LASSO_IS_IDWSF2_DISCO_SECURITY_CONTEXT_CLASS
5211
LASSO_IDWSF2_DISCO_SECURITY_CONTEXT_GET_CLASS
5212
</SECTION>
5213

  
5214
<SECTION>
5215
<FILE>ps_set_object_info_request</FILE>
5216
<TITLE>LassoIdWsf2PsSetObjectInfoRequest</TITLE>
5217
LassoIdWsf2PsSetObjectInfoRequest
5218
lasso_idwsf2_ps_set_object_info_request_new
5219
<SUBSECTION Standard>
5220
LASSO_IDWSF2_PS_SET_OBJECT_INFO_REQUEST
5221
LASSO_IS_IDWSF2_PS_SET_OBJECT_INFO_REQUEST
5222
LASSO_TYPE_IDWSF2_PS_SET_OBJECT_INFO_REQUEST
5223
lasso_idwsf2_ps_set_object_info_request_get_type
5224
LASSO_IDWSF2_PS_SET_OBJECT_INFO_REQUEST_CLASS
5225
LASSO_IS_IDWSF2_PS_SET_OBJECT_INFO_REQUEST_CLASS
5226
LASSO_IDWSF2_PS_SET_OBJECT_INFO_REQUEST_GET_CLASS
5227
</SECTION>
5228

  
5229
<SECTION>
5230
<FILE>disco_svc_md_association_add_response</FILE>
5231
<TITLE>LassoIdWsf2DiscoSvcMDAssociationAddResponse</TITLE>
5232
LassoIdWsf2DiscoSvcMDAssociationAddResponse
5233
lasso_idwsf2_disco_svc_md_association_add_response_new
5234
<SUBSECTION Standard>
5235
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE
5236
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE
5237
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE
5238
lasso_idwsf2_disco_svc_md_association_add_response_get_type
5239
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE_CLASS
5240
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE_CLASS
5241
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE_GET_CLASS
5242
</SECTION>
5243

  
5244
<SECTION>
5245
<FILE>dstref_query</FILE>
5246
<TITLE>LassoIdWsf2DstRefQuery</TITLE>
5247
LassoIdWsf2DstRefQuery
5248
lasso_idwsf2_dstref_query_new
5249
<SUBSECTION Standard>
5250
LASSO_IDWSF2_DSTREF_QUERY
5251
LASSO_IS_IDWSF2_DSTREF_QUERY
5252
LASSO_TYPE_IDWSF2_DSTREF_QUERY
5253
lasso_idwsf2_dstref_query_get_type
5254
LASSO_IDWSF2_DSTREF_QUERY_CLASS
5255
LASSO_IS_IDWSF2_DSTREF_QUERY_CLASS
5256
LASSO_IDWSF2_DSTREF_QUERY_GET_CLASS
5257
</SECTION>
5258

  
5259
<SECTION>
5260
<FILE>ps_remove_from_collection_request</FILE>
5261
<TITLE>LassoIdWsf2PsRemoveFromCollectionRequest</TITLE>
5262
LassoIdWsf2PsRemoveFromCollectionRequest
5263
lasso_idwsf2_ps_remove_from_collection_request_new
5264
<SUBSECTION Standard>
5265
LASSO_IDWSF2_PS_REMOVE_FROM_COLLECTION_REQUEST
5266
LASSO_IS_IDWSF2_PS_REMOVE_FROM_COLLECTION_REQUEST
5267
LASSO_TYPE_IDWSF2_PS_REMOVE_FROM_COLLECTION_REQUEST
5268
lasso_idwsf2_ps_remove_from_collection_request_get_type
5269
LASSO_IDWSF2_PS_REMOVE_FROM_COLLECTION_REQUEST_CLASS
5270
LASSO_IS_IDWSF2_PS_REMOVE_FROM_COLLECTION_REQUEST_CLASS
5271
LASSO_IDWSF2_PS_REMOVE_FROM_COLLECTION_REQUEST_GET_CLASS
5272
</SECTION>
5273

  
5274
<SECTION>
5275
<FILE>dstref_item_data</FILE>
5276
<TITLE>LassoIdWsf2DstRefItemData</TITLE>
5277
LassoIdWsf2DstRefItemData
5278
lasso_idwsf2_dstref_item_data_new
5279
<SUBSECTION Standard>
5280
LASSO_IDWSF2_DSTREF_ITEM_DATA
5281
LASSO_IS_IDWSF2_DSTREF_ITEM_DATA
5282
LASSO_TYPE_IDWSF2_DSTREF_ITEM_DATA
5283
lasso_idwsf2_dstref_item_data_get_type
5284
LASSO_IDWSF2_DSTREF_ITEM_DATA_CLASS
5285
LASSO_IS_IDWSF2_DSTREF_ITEM_DATA_CLASS
5286
LASSO_IDWSF2_DSTREF_ITEM_DATA_GET_CLASS
5287
</SECTION>
5288

  
5289
<SECTION>
5290
<FILE>dstref_create_response</FILE>
5291
<TITLE>LassoIdWsf2DstRefCreateResponse</TITLE>
5292
LassoIdWsf2DstRefCreateResponse
5293
lasso_idwsf2_dstref_create_response_new
5294
<SUBSECTION Standard>
5295
LASSO_IDWSF2_DSTREF_CREATE_RESPONSE
5296
LASSO_IS_IDWSF2_DSTREF_CREATE_RESPONSE
5297
LASSO_TYPE_IDWSF2_DSTREF_CREATE_RESPONSE
5298
lasso_idwsf2_dstref_create_response_get_type
5299
LASSO_IDWSF2_DSTREF_CREATE_RESPONSE_CLASS
5300
LASSO_IS_IDWSF2_DSTREF_CREATE_RESPONSE_CLASS
5301
LASSO_IDWSF2_DSTREF_CREATE_RESPONSE_GET_CLASS
5302
</SECTION>
5303

  
5304
<SECTION>
5305
<FILE>subsref_create_response</FILE>
5306
<TITLE>LassoIdWsf2SubsRefCreateResponse</TITLE>
5307
LassoIdWsf2SubsRefCreateResponse
5308
lasso_idwsf2_subsref_create_response_new
5309
<SUBSECTION Standard>
5310
LASSO_IDWSF2_SUBSREF_CREATE_RESPONSE
5311
LASSO_IS_IDWSF2_SUBSREF_CREATE_RESPONSE
5312
LASSO_TYPE_IDWSF2_SUBSREF_CREATE_RESPONSE
5313
lasso_idwsf2_subsref_create_response_get_type
5314
LASSO_IDWSF2_SUBSREF_CREATE_RESPONSE_CLASS
5315
LASSO_IS_IDWSF2_SUBSREF_CREATE_RESPONSE_CLASS
5316
LASSO_IDWSF2_SUBSREF_CREATE_RESPONSE_GET_CLASS
5317
</SECTION>
5318

  
5319
<SECTION>
5320
<FILE>id_wsf_2_0_is_inquiry_element</FILE>
5321
LASSO_IS_IDWSF2_IS_INQUIRY_ELEMENT
5322
<TITLE>LassoIdWsf2IsInquiryElement</TITLE>
5323
LassoIdWsf2IsInquiryElement
5324
lasso_idwsf2_is_inquiry_element_new
5325
<SUBSECTION Standard>
5326
LASSO_IDWSF2_IS_INQUIRY_ELEMENT
5327
LASSO_TYPE_IDWSF2_IS_INQUIRY_ELEMENT
5328
lasso_idwsf2_is_inquiry_element_get_type
5329
LASSO_IDWSF2_IS_INQUIRY_ELEMENT_CLASS
5330
LASSO_IS_IDWSF2_IS_INQUIRY_ELEMENT_CLASS
5331
LASSO_IDWSF2_IS_INQUIRY_ELEMENT_GET_CLASS
5332
</SECTION>
5333

  
5334
<SECTION>
5335
<FILE>ps_notification</FILE>
5336
<TITLE>LassoIdWsf2PsNotification</TITLE>
5337
LassoIdWsf2PsNotification
5338
lasso_idwsf2_ps_notification_new
5339
<SUBSECTION Standard>
5340
LASSO_IDWSF2_PS_NOTIFICATION
5341
LASSO_IS_IDWSF2_PS_NOTIFICATION
5342
LASSO_TYPE_IDWSF2_PS_NOTIFICATION
5343
lasso_idwsf2_ps_notification_get_type
5344
LASSO_IDWSF2_PS_NOTIFICATION_CLASS
5345
LASSO_IS_IDWSF2_PS_NOTIFICATION_CLASS
5346
LASSO_IDWSF2_PS_NOTIFICATION_GET_CLASS
5347
</SECTION>
5348

  
5349
<SECTION>
5350
<FILE>id_wsf_2_0_disco_query_response</FILE>
5351
<TITLE>LassoIdWsf2DiscoQueryResponse</TITLE>
5352
LassoIdWsf2DiscoQueryResponse
5353
lasso_idwsf2_disco_query_response_new
5354
<SUBSECTION Standard>
5355
LASSO_IDWSF2_DISCO_QUERY_RESPONSE
5356
LASSO_IS_IDWSF2_DISCO_QUERY_RESPONSE
5357
LASSO_TYPE_IDWSF2_DISCO_QUERY_RESPONSE
5358
lasso_idwsf2_disco_query_response_get_type
5359
LASSO_IDWSF2_DISCO_QUERY_RESPONSE_CLASS
5360
LASSO_IS_IDWSF2_DISCO_QUERY_RESPONSE_CLASS
5361
LASSO_IDWSF2_DISCO_QUERY_RESPONSE_GET_CLASS
5362
</SECTION>
5363

  
5364
<SECTION>
5365
<FILE>subsref_modify_response</FILE>
5366
<TITLE>LassoIdWsf2SubsRefModifyResponse</TITLE>
5367
LassoIdWsf2SubsRefModifyResponse
5368
lasso_idwsf2_subsref_modify_response_new
5369
<SUBSECTION Standard>
5370
LASSO_IDWSF2_SUBSREF_MODIFY_RESPONSE
5371
LASSO_IS_IDWSF2_SUBSREF_MODIFY_RESPONSE
5372
LASSO_TYPE_IDWSF2_SUBSREF_MODIFY_RESPONSE
5373
lasso_idwsf2_subsref_modify_response_get_type
5374
LASSO_IDWSF2_SUBSREF_MODIFY_RESPONSE_CLASS
5375
LASSO_IS_IDWSF2_SUBSREF_MODIFY_RESPONSE_CLASS
5376
LASSO_IDWSF2_SUBSREF_MODIFY_RESPONSE_GET_CLASS
5377
</SECTION>
5378

  
5379
<SECTION>
5380
<FILE>subsref_notify_response</FILE>
5381
<TITLE>LassoIdWsf2SubsRefNotifyResponse</TITLE>
5382
LassoIdWsf2SubsRefNotifyResponse
5383
lasso_idwsf2_subsref_notify_response_new
5384
<SUBSECTION Standard>
5385
LASSO_IDWSF2_SUBSREF_NOTIFY_RESPONSE
5386
LASSO_IS_IDWSF2_SUBSREF_NOTIFY_RESPONSE
5387
LASSO_TYPE_IDWSF2_SUBSREF_NOTIFY_RESPONSE
5388
lasso_idwsf2_subsref_notify_response_get_type
5389
LASSO_IDWSF2_SUBSREF_NOTIFY_RESPONSE_CLASS
5390
LASSO_IS_IDWSF2_SUBSREF_NOTIFY_RESPONSE_CLASS
5391
LASSO_IDWSF2_SUBSREF_NOTIFY_RESPONSE_GET_CLASS
5392
</SECTION>
5393

  
5394
<SECTION>
5395
<FILE>ims_identity_mapping_response</FILE>
5396
<TITLE>LassoIdWsf2ImsIdentityMappingResponse</TITLE>
5397
LassoIdWsf2ImsIdentityMappingResponse
5398
lasso_idwsf2_ims_identity_mapping_response_new
5399
<SUBSECTION Standard>
5400
LASSO_IDWSF2_IMS_IDENTITY_MAPPING_RESPONSE
5401
LASSO_IS_IDWSF2_IMS_IDENTITY_MAPPING_RESPONSE
5402
LASSO_TYPE_IDWSF2_IMS_IDENTITY_MAPPING_RESPONSE
5403
lasso_idwsf2_ims_identity_mapping_response_get_type
5404
LASSO_IDWSF2_IMS_IDENTITY_MAPPING_RESPONSE_CLASS
5405
LASSO_IS_IDWSF2_IMS_IDENTITY_MAPPING_RESPONSE_CLASS
5406
LASSO_IDWSF2_IMS_IDENTITY_MAPPING_RESPONSE_GET_CLASS
5407
</SECTION>
5408

  
5409
<SECTION>
5410
<FILE>subsref_modify</FILE>
5411
<TITLE>LassoIdWsf2SubsRefModify</TITLE>
5412
LassoIdWsf2SubsRefModify
5413
lasso_idwsf2_subsref_modify_new
5414
<SUBSECTION Standard>
5415
LASSO_IDWSF2_SUBSREF_MODIFY
5416
LASSO_IS_IDWSF2_SUBSREF_MODIFY
5417
LASSO_TYPE_IDWSF2_SUBSREF_MODIFY
5418
lasso_idwsf2_subsref_modify_get_type
5419
LASSO_IDWSF2_SUBSREF_MODIFY_CLASS
5420
LASSO_IS_IDWSF2_SUBSREF_MODIFY_CLASS
5421
LASSO_IDWSF2_SUBSREF_MODIFY_GET_CLASS
5422
</SECTION>
5423

  
5424
<SECTION>
5425
<FILE>ps_add_to_collection_request</FILE>
5426
<TITLE>LassoIdWsf2PsAddToCollectionRequest</TITLE>
5427
LassoIdWsf2PsAddToCollectionRequest
5428
lasso_idwsf2_ps_add_to_collection_request_new
5429
<SUBSECTION Standard>
5430
LASSO_IDWSF2_PS_ADD_TO_COLLECTION_REQUEST
5431
LASSO_IS_IDWSF2_PS_ADD_TO_COLLECTION_REQUEST
5432
LASSO_TYPE_IDWSF2_PS_ADD_TO_COLLECTION_REQUEST
5433
lasso_idwsf2_ps_add_to_collection_request_get_type
5434
LASSO_IDWSF2_PS_ADD_TO_COLLECTION_REQUEST_CLASS
5435
LASSO_IS_IDWSF2_PS_ADD_TO_COLLECTION_REQUEST_CLASS
5436
LASSO_IDWSF2_PS_ADD_TO_COLLECTION_REQUEST_GET_CLASS
5437
</SECTION>
5438

  
5439
<SECTION>
5440
<FILE>subs_subscription</FILE>
5441
<TITLE>LassoIdWsf2SubsSubscription</TITLE>
5442
LassoIdWsf2SubsSubscription
5443
lasso_idwsf2_subs_subscription_new
5444
<SUBSECTION Standard>
5445
LASSO_IDWSF2_SUBS_SUBSCRIPTION
5446
LASSO_IS_IDWSF2_SUBS_SUBSCRIPTION
5447
LASSO_TYPE_IDWSF2_SUBS_SUBSCRIPTION
5448
lasso_idwsf2_subs_subscription_get_type
5449
LASSO_IDWSF2_SUBS_SUBSCRIPTION_CLASS
5450
LASSO_IS_IDWSF2_SUBS_SUBSCRIPTION_CLASS
5451
LASSO_IDWSF2_SUBS_SUBSCRIPTION_GET_CLASS
5452
</SECTION>
5453

  
5454
<SECTION>
5455
<FILE>dstref_query_item</FILE>
5456
<TITLE>LassoIdWsf2DstRefQueryItem</TITLE>
5457
LassoIdWsf2DstRefQueryItem
5458
lasso_idwsf2_dstref_query_item_new
5459
lasso_idwsf2_dstref_query_item_new_full
5460
<SUBSECTION Standard>
5461
LASSO_IDWSF2_DSTREF_QUERY_ITEM
5462
LASSO_IS_IDWSF2_DSTREF_QUERY_ITEM
5463
LASSO_TYPE_IDWSF2_DSTREF_QUERY_ITEM
5464
lasso_idwsf2_dstref_query_item_get_type
5465
LASSO_IDWSF2_DSTREF_QUERY_ITEM_CLASS
5466
LASSO_IS_IDWSF2_DSTREF_QUERY_ITEM_CLASS
5467
LASSO_IDWSF2_DSTREF_QUERY_ITEM_GET_CLASS
5468
</SECTION>
5469

  
5470
<SECTION>
5471
<FILE>ps_add_entity_response</FILE>
5472
<TITLE>LassoIdWsf2PsAddEntityResponse</TITLE>
5473
LassoIdWsf2PsAddEntityResponse
5474
lasso_idwsf2_ps_add_entity_response_new
5475
<SUBSECTION Standard>
5476
LASSO_IDWSF2_PS_ADD_ENTITY_RESPONSE
5477
LASSO_IS_IDWSF2_PS_ADD_ENTITY_RESPONSE
5478
LASSO_TYPE_IDWSF2_PS_ADD_ENTITY_RESPONSE
5479
lasso_idwsf2_ps_add_entity_response_get_type
5480
LASSO_IDWSF2_PS_ADD_ENTITY_RESPONSE_CLASS
5481
LASSO_IS_IDWSF2_PS_ADD_ENTITY_RESPONSE_CLASS
5482
LASSO_IDWSF2_PS_ADD_ENTITY_RESPONSE_GET_CLASS
5483
</SECTION>
5484

  
5485
<SECTION>
5486
<FILE>id_wsf_2_0_is_interaction_response</FILE>
5487
LASSO_IS_IDWSF2_IS_INTERACTION_RESPONSE
5488
<TITLE>LassoIdWsf2IsInteractionResponse</TITLE>
5489
LassoIdWsf2IsInteractionResponse
5490
lasso_idwsf2_is_interaction_response_new
5491
<SUBSECTION Standard>
5492
LASSO_IDWSF2_IS_INTERACTION_RESPONSE
5493
LASSO_TYPE_IDWSF2_IS_INTERACTION_RESPONSE
5494
lasso_idwsf2_is_interaction_response_get_type
5495
LASSO_IDWSF2_IS_INTERACTION_RESPONSE_CLASS
5496
LASSO_IS_IDWSF2_IS_INTERACTION_RESPONSE_CLASS
5497
LASSO_IDWSF2_IS_INTERACTION_RESPONSE_GET_CLASS
5498
</SECTION>
5499

  
5500
<SECTION>
5501
<FILE>disco_svc_md_association_delete</FILE>
5502
<TITLE>LassoIdWsf2DiscoSvcMDAssociationDelete</TITLE>
5503
LassoIdWsf2DiscoSvcMDAssociationDelete
5504
lasso_idwsf2_disco_svc_md_association_delete_new
5505
<SUBSECTION Standard>
5506
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE
5507
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE
5508
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE
5509
lasso_idwsf2_disco_svc_md_association_delete_get_type
5510
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_CLASS
5511
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_CLASS
5512
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_GET_CLASS
5513
</SECTION>
5514

  
5515
<SECTION>
5516
<FILE>sb2_endpoint_update</FILE>
5517
<TITLE>LassoIdWsf2Sb2EndpointUpdate</TITLE>
5518
LassoIdWsf2Sb2EndpointUpdate
5519
lasso_idwsf2_sb2_endpoint_update_new
5520
<SUBSECTION Standard>
5521
LASSO_IDWSF2_SB2_ENDPOINT_UPDATE
5522
LASSO_IS_IDWSF2_SB2_ENDPOINT_UPDATE
5523
LASSO_TYPE_IDWSF2_SB2_ENDPOINT_UPDATE
5524
lasso_idwsf2_sb2_endpoint_update_get_type
5525
LASSO_IDWSF2_SB2_ENDPOINT_UPDATE_CLASS
5526
LASSO_IS_IDWSF2_SB2_ENDPOINT_UPDATE_CLASS
5527
LASSO_IDWSF2_SB2_ENDPOINT_UPDATE_GET_CLASS
5528
</SECTION>
5529

  
5530
<SECTION>
5531
<FILE>util_extension</FILE>
5532
<TITLE>LassoIdWsf2Utilextension</TITLE>
5533
LassoIdWsf2Utilextension
5534
lasso_idwsf2_util_extension_new
5535
<SUBSECTION Standard>
5536
LASSO_IDWSF2_UTIL_EXTENSION
5537
LASSO_IS_IDWSF2_UTIL_EXTENSION
5538
LASSO_TYPE_IDWSF2_UTIL_EXTENSION
5539
lasso_idwsf2_util_extension_get_type
5540
LASSO_IDWSF2_UTIL_EXTENSION_CLASS
5541
LASSO_IS_IDWSF2_UTIL_EXTENSION_CLASS
5542
LASSO_IDWSF2_UTIL_EXTENSION_GET_CLASS
5543
</SECTION>
5544

  
5545
<SECTION>
5546
<FILE>disco_svc_md_delete</FILE>
5547
<TITLE>LassoIdWsf2DiscoSvcMDDelete</TITLE>
5548
LassoIdWsf2DiscoSvcMDDelete
5549
lasso_idwsf2_disco_svc_md_delete_new
5550
<SUBSECTION Standard>
5551
LASSO_IDWSF2_DISCO_SVC_MD_DELETE
5552
LASSO_IS_IDWSF2_DISCO_SVC_MD_DELETE
5553
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_DELETE
5554
lasso_idwsf2_disco_svc_md_delete_get_type
5555
LASSO_IDWSF2_DISCO_SVC_MD_DELETE_CLASS
5556
LASSO_IS_IDWSF2_DISCO_SVC_MD_DELETE_CLASS
5557
LASSO_IDWSF2_DISCO_SVC_MD_DELETE_GET_CLASS
5558
</SECTION>
5559

  
5560
<SECTION>
5561
<FILE>disco_svc_md_query</FILE>
5562
<TITLE>LassoIdWsf2DiscoSvcMDQuery</TITLE>
5563
LassoIdWsf2DiscoSvcMDQuery
5564
lasso_idwsf2_disco_svc_md_query_new
5565
<SUBSECTION Standard>
5566
LASSO_IDWSF2_DISCO_SVC_MD_QUERY
5567
LASSO_IS_IDWSF2_DISCO_SVC_MD_QUERY
5568
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_QUERY
5569
lasso_idwsf2_disco_svc_md_query_get_type
5570
LASSO_IDWSF2_DISCO_SVC_MD_QUERY_CLASS
5571
LASSO_IS_IDWSF2_DISCO_SVC_MD_QUERY_CLASS
5572
LASSO_IDWSF2_DISCO_SVC_MD_QUERY_GET_CLASS
5573
</SECTION>
5574

  
5575
<SECTION>
5576
<FILE>id_wsf_2_0_disco_options</FILE>
5577
<TITLE>LassoIdWsf2DiscoOptions</TITLE>
5578
LassoIdWsf2DiscoOptions
5579
lasso_idwsf2_disco_options_new
5580
<SUBSECTION Standard>
5581
LASSO_IDWSF2_DISCO_OPTIONS
5582
LASSO_IS_IDWSF2_DISCO_OPTIONS
5583
LASSO_TYPE_IDWSF2_DISCO_OPTIONS
5584
lasso_idwsf2_disco_options_get_type
5585
LASSO_IDWSF2_DISCO_OPTIONS_CLASS
5586
LASSO_IS_IDWSF2_DISCO_OPTIONS_CLASS
5587
LASSO_IDWSF2_DISCO_OPTIONS_GET_CLASS
5588
</SECTION>
5589

  
5590
<SECTION>
5591
<FILE>disco_svc_md_register_response</FILE>
5592
<TITLE>LassoIdWsf2DiscoSvcMDRegisterResponse</TITLE>
5593
LassoIdWsf2DiscoSvcMDRegisterResponse
5594
lasso_idwsf2_disco_svc_md_register_response_new
5595
<SUBSECTION Standard>
5596
LASSO_IDWSF2_DISCO_SVC_MD_REGISTER_RESPONSE
5597
LASSO_IS_IDWSF2_DISCO_SVC_MD_REGISTER_RESPONSE
5598
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_REGISTER_RESPONSE
5599
lasso_idwsf2_disco_svc_md_register_response_get_type
5600
LASSO_IDWSF2_DISCO_SVC_MD_REGISTER_RESPONSE_CLASS
5601
LASSO_IS_IDWSF2_DISCO_SVC_MD_REGISTER_RESPONSE_CLASS
5602
LASSO_IDWSF2_DISCO_SVC_MD_REGISTER_RESPONSE_GET_CLASS
5603
</SECTION>
5604

  
5605
<SECTION>
5606
<FILE>disco_svc_md_association_add</FILE>
5607
<TITLE>LassoIdWsf2DiscoSvcMDAssociationAdd</TITLE>
5608
LassoIdWsf2DiscoSvcMDAssociationAdd
5609
lasso_idwsf2_disco_svc_md_association_add_new
5610
<SUBSECTION Standard>
5611
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD
5612
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD
5613
LASSO_TYPE_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD
5614
lasso_idwsf2_disco_svc_md_association_add_get_type
5615
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_CLASS
5616
LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_CLASS
5617
LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_GET_CLASS
5618
</SECTION>
5619

  
5620
<SECTION>
5621
<FILE>disco_abstract</FILE>
5622
<TITLE>LassoIdWsf2DiscoAbstract</TITLE>
5623
LassoIdWsf2DiscoAbstract
5624
lasso_idwsf2_disco_abstract_new
5625
lasso_idwsf2_disco_abstract_new_with_string
5626
<SUBSECTION Standard>
5627
LASSO_IDWSF2_DISCO_ABSTRACT
5628
LASSO_IS_IDWSF2_DISCO_ABSTRACT
5629
LASSO_TYPE_IDWSF2_DISCO_ABSTRACT
5630
lasso_idwsf2_disco_abstract_get_type
5631
LASSO_IDWSF2_DISCO_ABSTRACT_CLASS
5632
LASSO_IS_IDWSF2_DISCO_ABSTRACT_CLASS
5633
LASSO_IDWSF2_DISCO_ABSTRACT_GET_CLASS
5634
</SECTION>
5635

  
5636
<SECTION>
5637
<FILE>ps_remove_entity_request</FILE>
5638
<TITLE>LassoIdWsf2PsRemoveEntityRequest</TITLE>
5639
LassoIdWsf2PsRemoveEntityRequest
5640
lasso_idwsf2_ps_remove_entity_request_new
5641
<SUBSECTION Standard>
5642
LASSO_IDWSF2_PS_REMOVE_ENTITY_REQUEST
5643
LASSO_IS_IDWSF2_PS_REMOVE_ENTITY_REQUEST
5644
LASSO_TYPE_IDWSF2_PS_REMOVE_ENTITY_REQUEST
5645
lasso_idwsf2_ps_remove_entity_request_get_type
5646
LASSO_IDWSF2_PS_REMOVE_ENTITY_REQUEST_CLASS
5647
LASSO_IS_IDWSF2_PS_REMOVE_ENTITY_REQUEST_CLASS
5648
LASSO_IDWSF2_PS_REMOVE_ENTITY_REQUEST_GET_CLASS
5649
</SECTION>
5650

  
5651
<SECTION>
5652
<FILE>disco_service_type</FILE>
5653
<TITLE>LassoIdWsf2DiscoServiceType</TITLE>
5654
LassoIdWsf2DiscoServiceType
5655
lasso_idwsf2_disco_service_type_new
5656
lasso_idwsf2_disco_service_type_new_with_string
5657
<SUBSECTION Standard>
5658
LASSO_IDWSF2_DISCO_SERVICE_TYPE
5659
LASSO_IS_IDWSF2_DISCO_SERVICE_TYPE
5660
LASSO_TYPE_IDWSF2_DISCO_SERVICE_TYPE
5661
lasso_idwsf2_disco_service_type_get_type
5662
LASSO_IDWSF2_DISCO_SERVICE_TYPE_CLASS
5663
LASSO_IS_IDWSF2_DISCO_SERVICE_TYPE_CLASS
5664
LASSO_IDWSF2_DISCO_SERVICE_TYPE_GET_CLASS
5665
</SECTION>
5666

  
5667
<SECTION>
5668
<FILE>subsref_subscription</FILE>
5669
<TITLE>LassoIdWsf2SubsRefSubscription</TITLE>
5670
LassoIdWsf2SubsRefSubscription
5671
lasso_idwsf2_subsref_subscription_new
5672
<SUBSECTION Standard>
5673
LASSO_IDWSF2_SUBSREF_SUBSCRIPTION
5674
LASSO_IS_IDWSF2_SUBSREF_SUBSCRIPTION
5675
LASSO_TYPE_IDWSF2_SUBSREF_SUBSCRIPTION
5676
lasso_idwsf2_subsref_subscription_get_type
5677
LASSO_IDWSF2_SUBSREF_SUBSCRIPTION_CLASS
5678
LASSO_IS_IDWSF2_SUBSREF_SUBSCRIPTION_CLASS
5679
LASSO_IDWSF2_SUBSREF_SUBSCRIPTION_GET_CLASS
5680
</SECTION>
5681

  
5682
<SECTION>
5683
<FILE>dst_data_response_base</FILE>
5684
<TITLE>LassoIdWsf2DstDataResponseBase</TITLE>
5685
LassoIdWsf2DstDataResponseBase
5686
lasso_idwsf2_dst_data_response_base_new
5687
<SUBSECTION Standard>
5688
LASSO_IDWSF2_DST_DATA_RESPONSE_BASE
5689
LASSO_IS_IDWSF2_DST_DATA_RESPONSE_BASE
5690
LASSO_TYPE_IDWSF2_DST_DATA_RESPONSE_BASE
5691
lasso_idwsf2_dst_data_response_base_get_type
5692
LASSO_IDWSF2_DST_DATA_RESPONSE_BASE_CLASS
5693
LASSO_IS_IDWSF2_DST_DATA_RESPONSE_BASE_CLASS
5694
LASSO_IDWSF2_DST_DATA_RESPONSE_BASE_GET_CLASS
5695
</SECTION>
5696

  
5697
<SECTION>
5698
<FILE>ps_resolve_input</FILE>
5699
<TITLE>LassoIdWsf2PsResolveInput</TITLE>
5700
LassoIdWsf2PsResolveInput
5701
lasso_idwsf2_ps_resolve_input_new
5702
<SUBSECTION Standard>
5703
LASSO_IDWSF2_PS_RESOLVE_INPUT
5704
LASSO_IS_IDWSF2_PS_RESOLVE_INPUT
5705
LASSO_TYPE_IDWSF2_PS_RESOLVE_INPUT
5706
lasso_idwsf2_ps_resolve_input_get_type
5707
LASSO_IDWSF2_PS_RESOLVE_INPUT_CLASS
5708
LASSO_IS_IDWSF2_PS_RESOLVE_INPUT_CLASS
5709
LASSO_IDWSF2_PS_RESOLVE_INPUT_GET_CLASS
5710
</SECTION>
5711

  
5712
<SECTION>
5713
<FILE>id_wsf_2_0_is_help</FILE>
5714
LASSO_IS_IDWSF2_IS_HELP
5715
<TITLE>LassoIdWsf2IsHelp</TITLE>
5716
LassoIdWsf2IsHelp
5717
lasso_idwsf2_is_help_new
5718
<SUBSECTION Standard>
5719
LASSO_IDWSF2_IS_HELP
5720
LASSO_TYPE_IDWSF2_IS_HELP
5721
lasso_idwsf2_is_help_get_type
5722
LASSO_IDWSF2_IS_HELP_CLASS
5723
LASSO_IS_IDWSF2_IS_HELP_CLASS
5724
LASSO_IDWSF2_IS_HELP_GET_CLASS
5725
</SECTION>
5726

  
5727
<SECTION>
5728
<FILE>disco_keys</FILE>
5729
<TITLE>LassoIdWsf2DiscoKeys</TITLE>
5730
LassoIdWsf2DiscoKeys
5731
lasso_idwsf2_disco_keys_new
5732
<SUBSECTION Standard>
5733
LASSO_IDWSF2_DISCO_KEYS
5734
LASSO_IS_IDWSF2_DISCO_KEYS
5735
LASSO_TYPE_IDWSF2_DISCO_KEYS
5736
lasso_idwsf2_disco_keys_get_type
5737
LASSO_IDWSF2_DISCO_KEYS_CLASS
5738
LASSO_IS_IDWSF2_DISCO_KEYS_CLASS
5739
LASSO_IDWSF2_DISCO_KEYS_GET_CLASS
5740
</SECTION>
5741

  
5742
<SECTION>
5743
<FILE>dstref_data_response</FILE>
5744
<TITLE>LassoIdWsf2DstRefDataResponse</TITLE>
5745
LassoIdWsf2DstRefDataResponse
5746
lasso_idwsf2_dstref_data_response_new
5747
<SUBSECTION Standard>
5748
LASSO_IDWSF2_DSTREF_DATA_RESPONSE
5749
LASSO_IS_IDWSF2_DSTREF_DATA_RESPONSE
5750
LASSO_TYPE_IDWSF2_DSTREF_DATA_RESPONSE
5751
lasso_idwsf2_dstref_data_response_get_type
5752
LASSO_IDWSF2_DSTREF_DATA_RESPONSE_CLASS
5753
LASSO_IS_IDWSF2_DSTREF_DATA_RESPONSE_CLASS
5754
LASSO_IDWSF2_DSTREF_DATA_RESPONSE_GET_CLASS
5755
</SECTION>
5756

  
5757
<SECTION>
5758
<FILE>ecp</FILE>
5759
<TITLE>LassoEcp</TITLE>
5760
LassoEcp
5761
lasso_ecp_is_provider_in_sp_idplist
5762
lasso_ecp_is_idp_entry_known_idp_supporting_ecp
5763
lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp
5764
lasso_ecp_has_sp_idplist
5765
lasso_ecp_get_endpoint_url_by_entity_id
5766
lasso_ecp_process_sp_idp_list
5767
lasso_ecp_new
5768
lasso_ecp_process_authn_request_msg
5769
lasso_ecp_process_response_msg
5770
lasso_ecp_destroy
2428
<FILE>ecp</FILE>
2429
<TITLE>LassoEcp</TITLE>
2430
LassoEcp
2431
lasso_ecp_is_provider_in_sp_idplist
2432
lasso_ecp_is_idp_entry_known_idp_supporting_ecp
2433
lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp
2434
lasso_ecp_has_sp_idplist
2435
lasso_ecp_get_endpoint_url_by_entity_id
2436
lasso_ecp_process_sp_idp_list
2437
lasso_ecp_new
2438
lasso_ecp_process_authn_request_msg
2439
lasso_ecp_process_response_msg
2440
lasso_ecp_destroy
5771 2441
<SUBSECTION Standard>
5772 2442
LASSO_ECP
5773 2443
LASSO_IS_ECP
......
5827 2497
LASSO_ASSERTION_QUERY_GET_CLASS
5828 2498
</SECTION>
5829 2499

  
5830
<SECTION>
5831
<FILE>id_wsf_2_0_data_service</FILE>
5832
<TITLE>LassoIdWsf2DataService</TITLE>
5833
LassoIdWsf2DataService
5834
lasso_idwsf2_data_service_new
5835
lasso_idwsf2_data_service_init_create
5836
lasso_idwsf2_data_service_init_delete
5837
lasso_idwsf2_data_service_init_modify
5838
lasso_idwsf2_data_service_init_query
5839
lasso_idwsf2_data_service_add_modify_item
5840
lasso_idwsf2_data_service_add_namespace
5841
lasso_idwsf2_data_service_add_query_item
5842
lasso_idwsf2_data_service_build_request_msg
5843
lasso_idwsf2_data_service_build_response_msg
5844
lasso_idwsf2_data_service_get_item
5845
lasso_idwsf2_data_service_get_query_item_result
5846
lasso_idwsf2_data_service_get_query_item_results
5847
lasso_idwsf2_data_service_get_request_type
5848
lasso_idwsf2_data_service_get_service_type
5849
lasso_idwsf2_data_service_get_service_type_prefix
5850
lasso_idwsf2_data_service_process_request_msg
5851
lasso_idwsf2_data_service_process_response_msg
5852
lasso_idwsf2_data_service_set_query_item_result
5853
lasso_idwsf2_data_service_get_query_item_result_content
5854
lasso_idwsf2_data_service_set_service_type
5855
lasso_idwsf2_data_service_set_status_code
5856
lasso_idwsf2_data_service_get_item_ids
5857
lasso_idwsf2_data_service_get_items
5858
lasso_idwsf2_data_service_get_response_status
5859
lasso_idwsf2_data_service_validate_request
5860
<SUBSECTION Standard>
5861
LASSO_IDWSF2_DATA_SERVICE
5862
LASSO_IS_IDWSF2_DATA_SERVICE
5863
LASSO_TYPE_IDWSF2_DATA_SERVICE
5864
lasso_idwsf2_data_service_get_type
5865
LASSO_IDWSF2_DATA_SERVICE_CLASS
5866
LASSO_IS_IDWSF2_DATA_SERVICE_CLASS
5867
LASSO_IDWSF2_DATA_SERVICE_GET_CLASS
5868
</SECTION>
5869

  
5870
<SECTION>
5871
<FILE>id_wsf_2_0_profile</FILE>
5872
<TITLE>LassoIdWsf2Profile</TITLE>
5873
LassoIdWsf2Profile
5874
lasso_idwsf2_profile_set_epr
5875
lasso_idwsf2_profile_get_epr
5876
lasso_idwsf2_profile_get_soap_envelope_request
5877
lasso_idwsf2_profile_get_soap_envelope_response
5878
lasso_idwsf2_profile_init_request
5879
lasso_idwsf2_profile_build_request_msg
5880
lasso_idwsf2_profile_process_request_msg
5881
lasso_idwsf2_profile_check_security_mechanism
5882
lasso_idwsf2_profile_get_name_identifier
5883
lasso_idwsf2_profile_init_response
5884
lasso_idwsf2_profile_init_soap_fault_response
5885
lasso_idwsf2_profile_redirect_user_for_interaction
5886
lasso_idwsf2_profile_build_response_msg
5887
lasso_idwsf2_profile_process_response_msg
5888
<SUBSECTION Standard>
5889
LASSO_IDWSF2_PROFILE
5890
LASSO_IS_IDWSF2_PROFILE
5891
LASSO_TYPE_IDWSF2_PROFILE
5892
lasso_idwsf2_profile_get_type
5893
LASSO_IDWSF2_PROFILE_CLASS
5894
LASSO_IS_IDWSF2_PROFILE_CLASS
5895
LASSO_IDWSF2_PROFILE_GET_CLASS
5896
</SECTION>
5897

  
5898
<SECTION>
5899
<FILE>id_wsf_2_0_discovery</FILE>
5900
<TITLE>LassoIdWsf2Discovery</TITLE>
5901
LassoIdWsf2Discovery
5902
lasso_idwsf2_discovery_new
5903
lasso_idwsf2_discovery_init_metadata_register
5904
lasso_idwsf2_discovery_init_metadata_association_add
5905
lasso_idwsf2_discovery_init_query
5906
lasso_idwsf2_discovery_init_metadata_query
5907
lasso_idwsf2_discovery_init_metadata_replace
5908
lasso_idwsf2_discovery_init_metadata_delete
5909
lasso_idwsf2_discovery_init_metadata_association_delete
5910
lasso_idwsf2_discovery_init_metadata_association_query
5911
lasso_idwsf2_discovery_add_service_metadata
5912
lasso_idwsf2_discovery_add_simple_service_metadata
5913
lasso_idwsf2_discovery_get_metadatas
5914
lasso_idwsf2_discovery_add_requested_service
5915
lasso_idwsf2_discovery_build_request_msg
5916
lasso_idwsf2_discovery_process_request_msg
5917
lasso_idwsf2_discovery_get_request_type
5918
lasso_idwsf2_discovery_validate_request
5919
lasso_idwsf2_discovery_fail_request
5920
lasso_idwsf2_discovery_process_response_msg
5921
lasso_idwsf2_discovery_get_endpoint_references
5922
lasso_idwsf2_discovery_get_svcmdids
5923
lasso_idwsf2_discovery_set_svcmdids
5924
<SUBSECTION Standard>
5925
LASSO_IDWSF2_DISCOVERY
5926
LASSO_IS_IDWSF2_DISCOVERY
5927
LASSO_TYPE_IDWSF2_DISCOVERY
5928
lasso_idwsf2_discovery_get_type
5929
LASSO_IDWSF2_DISCOVERY_CLASS
5930
LASSO_IS_IDWSF2_DISCOVERY_CLASS
5931
LASSO_IDWSF2_DISCOVERY_GET_CLASS
5932
</SECTION>
5933

  
5934
<SECTION>
5935
<FILE>id_wsf_2_0_login</FILE>
5936
<TITLE>Addon to SAML 2.0 profile for ID-WSF 2.0 bootsraping</TITLE>
5937
lasso_login_idwsf2_add_discovery_bootstrap_epr
5938
lasso_login_idwsf2_get_discovery_bootstrap_epr
5939
lasso_saml2_assertion_idwsf2_get_discovery_bootstrap_epr
5940
</SECTION>
5941

  
5942 2500
<SECTION>
5943 2501
<FILE>errors</FILE>
5944 2502
<TITLE>Error Codes</TITLE>
......
6046 2604
LASSO_SOAP_ERROR_MISSING_HEADER
6047 2605
LASSO_SOAP_ERROR_MISSING_BODY
6048 2606
LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL
6049
LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE
6050
LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE
6051
LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER
6052
LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST
6053
LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION
6054
LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY
6055
LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID
6056
LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT
6057
LASSO_WSF_PROFILE_ERROR_SOAP_FAULT
6058
LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM
6059
LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION
6060
LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID
6061
LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF
6062
LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID
6063
LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED
6064
LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED
6065
LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE
6066
LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE
6067
LASSO_DST_ERROR_MISSING_SERVICE_DATA
6068
LASSO_DST_ERROR_QUERY_FAILED
6069
LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED
6070
LASSO_DST_ERROR_MODIFY_FAILED
6071
LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED
6072
LASSO_DST_ERROR_NEW_DATA_MISSING
6073
LASSO_DST_ERROR_QUERY_NOT_FOUND
6074
LASSO_DST_ERROR_NO_DATA
6075
LASSO_DST_ERROR_MALFORMED_QUERY
6076 2607
LASSO_REGISTRY_ERROR_KEY_EXISTS
6077 2608
LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY
6078 2609
</SECTION>
......
6097 2628
lasso_registry_default_get_mapping
6098 2629
</SECTION>
6099 2630

  
6100
<SECTION>
6101
<FILE>id_wsf2_utils</FILE>
6102
<TITLE>Utility functions for ID-WSF 2.0</TITLE>
6103
<SUBSECTION LassoIdentity Extensions>
6104
lasso_identity_add_svc_md_id
6105
lasso_identity_get_svc_md_ids
6106
<SUBSECTION LassoServer Extensions>
6107
lasso_server_add_svc_metadata
6108
lasso_server_get_svc_metadatas
6109
lasso_server_get_svc_metadatas_with_id_and_type
6110
lasso_server_create_assertion_as_idwsf2_security_token
6111
<SUBSECTION LassoSession Extensions>
6112
lasso_session_add_endpoint_reference
6113
lasso_session_get_endpoint_reference
6114
lasso_session_get_assertion_identity_token
6115
<SUBSECTION DST Service Registry>
6116
lasso_register_idwsf2_dst_service
6117
lasso_get_prefix_for_idwsf2_dst_service_href
6118
</SECTION>
6119

  
6120
<SECTION>
6121
<FILE>id_wsf_utils</FILE>
6122
<TITLE>Utility functions for ID-WSF 1.0</TITLE>
6123
<SUBSECTION Security Mech ID>
6124
lasso_security_mech_id_is_null_authentication
6125
lasso_security_mech_id_is_x509_authentication
6126
lasso_security_mech_id_is_saml_authentication
6127
lasso_security_mech_id_is_bearer_authentication
6128
<SUBSECTION LassoLogin Extensions>
6129
lasso_login_set_encryptedResourceId
6130
lasso_login_set_resourceId
6131
<SUBSECTION LassoServer Extensions>
6132
lasso_server_get_service
6133
lasso_server_add_service
6134
lasso_server_add_service_from_dump
6135
<SUBSECTION LassoIdentity Extensions>
6136
lasso_identity_add_resource_offering
6137
lasso_identity_remove_resource_offering
6138
lasso_identity_get_offerings
6139
lasso_identity_get_resource_offering
6140
<SUBSECTION Soap Binding>
6141
lasso_soap_binding_get_provider
6142
lasso_soap_binding_get_correlation
6143
<SUBSECTION DST Service Registry>
6144
lasso_register_dst_service
6145
lasso_get_prefix_for_dst_service_href
6146
</SECTION>
6147

  
6148 2631
<SECTION>
6149 2632
<FILE>saml2_utils</FILE>
6150 2633
<TITLE>Utility functions for SAML 2.0</TITLE>
......
6153 2636
lasso_provider_saml2_node_encrypt
6154 2637
</SECTION>
6155 2638

  
6156
<SECTION>
6157
<FILE>soap_binding2</FILE>
6158
<TITLE>SOAP Binding utility function for ID-WSF 2.0</TITLE>
6159
lasso_soap_envelope_sb2_get_provider_id
6160
lasso_soap_envelope_sb2_get_redirect_request_url
6161
lasso_soap_envelope_sb2_get_target_identity_header
6162
lasso_soap_envelope_get_sb2_user_interaction_header
6163
</SECTION>
6164

  
6165 2639
<SECTION>
6166 2640
<FILE>logging</FILE>
6167 2641
<TITLE>Logging</TITLE>
docs/reference/lasso/lasso.types
1
#include <lasso/lasso.h>
2
#include <lasso/xml/xml_idff.h>
3
#include <lasso/xml/saml-2.0/xml_saml2.h>
4
#include <lasso/xml/soap-1.1/xml_soap11.h>
5

  
6
lasso_assertion_query_get_type
7
lasso_defederation_get_type
8
lasso_ds_key_info_get_type
9
lasso_ds_key_value_get_type
10
lasso_ds_rsa_key_value_get_type
11
lasso_ecp_get_type
12
lasso_federation_get_type
13
lasso_identity_get_type
14
lasso_lecp_get_type
15
lasso_lib_assertion_get_type
16
lasso_lib_authentication_statement_get_type
17
lasso_lib_authn_context_get_type
18
lasso_lib_authn_request_envelope_get_type
19
lasso_lib_authn_request_get_type
20
lasso_lib_authn_response_envelope_get_type
21
lasso_lib_authn_response_get_type
22
lasso_lib_federation_termination_notification_get_type
23
lasso_lib_idp_entries_get_type
24
lasso_lib_idp_entry_get_type
25
lasso_lib_idp_list_get_type
26
lasso_lib_logout_request_get_type
27
lasso_lib_logout_response_get_type
28
lasso_lib_name_identifier_mapping_request_get_type
29
lasso_lib_name_identifier_mapping_response_get_type
30
lasso_lib_register_name_identifier_request_get_type
31
lasso_lib_register_name_identifier_response_get_type
32
lasso_lib_request_authn_context_get_type
33
lasso_lib_scoping_get_type
34
lasso_lib_status_response_get_type
35
lasso_lib_subject_get_type
36
lasso_login_get_type
37
lasso_logout_get_type
38
lasso_misc_text_node_get_type
39
lasso_name_identifier_mapping_get_type
40
lasso_name_id_management_get_type
41
lasso_name_registration_get_type
42
lasso_node_get_type
43
lasso_profile_get_type
44
lasso_provider_get_type
45
lasso_saml2_action_get_type
46
lasso_saml2_advice_get_type
47
lasso_saml2_assertion_get_type
48
lasso_saml2_attribute_get_type
49
lasso_saml2_attribute_statement_get_type
50
lasso_saml2_attribute_value_get_type
51
lasso_saml2_audience_restriction_get_type
52
lasso_saml2_authn_context_get_type
53
lasso_saml2_authn_statement_get_type
54
lasso_saml2_authz_decision_statement_get_type
55
lasso_saml2_base_idabstract_get_type
56
lasso_saml2_condition_abstract_get_type
57
lasso_saml2_conditions_get_type
58
lasso_saml2_encrypted_element_get_type
59
lasso_saml2_evidence_get_type
60
lasso_saml2_key_info_confirmation_data_get_type
61
lasso_saml2_name_id_get_type
62
lasso_saml2_one_time_use_get_type
63
lasso_saml2_proxy_restriction_get_type
64
lasso_saml2_statement_abstract_get_type
65
lasso_saml2_subject_confirmation_data_get_type
66
lasso_saml2_subject_confirmation_get_type
67
lasso_saml2_subject_get_type
68
lasso_saml2_subject_locality_get_type
69
lasso_saml_advice_get_type
70
lasso_saml_assertion_get_type
71
lasso_saml_attribute_designator_get_type
72
lasso_saml_attribute_get_type
73
lasso_saml_attribute_statement_get_type
74
lasso_saml_attribute_value_get_type
75
lasso_saml_audience_restriction_condition_get_type
76
lasso_saml_authentication_statement_get_type
77
lasso_saml_authority_binding_get_type
78
lasso_saml_condition_abstract_get_type
79
lasso_saml_conditions_get_type
80
lasso_saml_name_identifier_get_type
81
lasso_samlp2_artifact_resolve_get_type
82
lasso_samlp2_artifact_response_get_type
83
lasso_samlp2_assertion_id_request_get_type
84
lasso_samlp2_attribute_query_get_type
85
lasso_samlp2_authn_query_get_type
86
lasso_samlp2_authn_request_get_type
87
lasso_samlp2_authz_decision_query_get_type
88
lasso_samlp2_extensions_get_type
89
lasso_samlp2_idp_entry_get_type
90
lasso_samlp2_idp_list_get_type
91
lasso_samlp2_logout_request_get_type
92
lasso_samlp2_logout_response_get_type
93
lasso_samlp2_manage_name_id_request_get_type
94
lasso_samlp2_manage_name_id_response_get_type
95
lasso_samlp2_name_id_mapping_request_get_type
96
lasso_samlp2_name_id_mapping_response_get_type
97
lasso_samlp2_name_id_policy_get_type
98
lasso_samlp2_request_abstract_get_type
99
lasso_samlp2_requested_authn_context_get_type
100
lasso_samlp2_response_get_type
101
lasso_samlp2_scoping_get_type
102
lasso_samlp2_status_code_get_type
103
lasso_samlp2_status_detail_get_type
104
lasso_samlp2_status_get_type
105
lasso_samlp2_status_response_get_type
106
lasso_samlp2_subject_query_abstract_get_type
107
lasso_samlp2_terminate_get_type
108
lasso_samlp_request_abstract_get_type
109
lasso_samlp_request_get_type
110
lasso_samlp_response_abstract_get_type
111
lasso_samlp_response_get_type
112
lasso_samlp_status_code_get_type
113
lasso_samlp_status_get_type
114
lasso_saml_statement_abstract_get_type
115
lasso_saml_subject_confirmation_get_type
116
lasso_saml_subject_get_type
117
lasso_saml_subject_locality_get_type
118
lasso_saml_subject_statement_abstract_get_type
119
lasso_saml_subject_statement_get_type
120
lasso_server_get_type
121
lasso_session_get_type
122
lasso_soap_body_get_type
123
lasso_soap_detail_get_type
124
lasso_soap_envelope_get_type
125
lasso_soap_fault_get_type
126
lasso_soap_header_get_type
docs/reference/lasso/lasso.types.in
1
#include <lasso/lasso.h>
2
#include <lasso/xml/xml_idff.h>
3
#include <lasso/xml/saml-2.0/xml_saml2.h>
4
#WSF##include <lasso/id-wsf/id_wsf.h>
5
#WSF##include <lasso/id-wsf-2.0/id_wsf_2.h>
6
#WSF##include <lasso/xml/xml_idwsf.h>
7

  
8
lasso_assertion_query_get_type
9
lasso_defederation_get_type
10
lasso_ds_key_info_get_type
11
lasso_ds_key_value_get_type
12
lasso_ds_rsa_key_value_get_type
13
lasso_ecp_get_type
14
lasso_federation_get_type
15
lasso_identity_get_type
16
lasso_lecp_get_type
17
lasso_lib_assertion_get_type
18
lasso_lib_authentication_statement_get_type
19
lasso_lib_authn_context_get_type
20
lasso_lib_authn_request_envelope_get_type
21
lasso_lib_authn_request_get_type
22
lasso_lib_authn_response_envelope_get_type
23
lasso_lib_authn_response_get_type
24
lasso_lib_federation_termination_notification_get_type
25
lasso_lib_idp_entries_get_type
26
lasso_lib_idp_entry_get_type
27
lasso_lib_idp_list_get_type
28
lasso_lib_logout_request_get_type
29
lasso_lib_logout_response_get_type
30
lasso_lib_name_identifier_mapping_request_get_type
31
lasso_lib_name_identifier_mapping_response_get_type
32
lasso_lib_register_name_identifier_request_get_type
33
lasso_lib_register_name_identifier_response_get_type
34
lasso_lib_request_authn_context_get_type
35
lasso_lib_scoping_get_type
36
lasso_lib_status_response_get_type
37
lasso_lib_subject_get_type
38
lasso_login_get_type
39
lasso_logout_get_type
40
lasso_misc_text_node_get_type
41
lasso_name_identifier_mapping_get_type
42
lasso_name_id_management_get_type
43
lasso_name_registration_get_type
44
lasso_node_get_type
45
lasso_profile_get_type
46
lasso_provider_get_type
47
lasso_saml2_action_get_type
48
lasso_saml2_advice_get_type
49
lasso_saml2_assertion_get_type
50
lasso_saml2_attribute_get_type
51
lasso_saml2_attribute_statement_get_type
52
lasso_saml2_attribute_value_get_type
53
lasso_saml2_audience_restriction_get_type
54
lasso_saml2_authn_context_get_type
55
lasso_saml2_authn_statement_get_type
56
lasso_saml2_authz_decision_statement_get_type
57
lasso_saml2_base_idabstract_get_type
58
lasso_saml2_condition_abstract_get_type
59
lasso_saml2_conditions_get_type
60
lasso_saml2_encrypted_element_get_type
61
lasso_saml2_evidence_get_type
62
lasso_saml2_key_info_confirmation_data_get_type
63
lasso_saml2_name_id_get_type
64
lasso_saml2_one_time_use_get_type
65
lasso_saml2_proxy_restriction_get_type
66
lasso_saml2_statement_abstract_get_type
67
lasso_saml2_subject_confirmation_data_get_type
68
lasso_saml2_subject_confirmation_get_type
69
lasso_saml2_subject_get_type
70
lasso_saml2_subject_locality_get_type
71
lasso_saml_advice_get_type
72
lasso_saml_assertion_get_type
73
lasso_saml_attribute_designator_get_type
74
lasso_saml_attribute_get_type
75
lasso_saml_attribute_statement_get_type
76
lasso_saml_attribute_value_get_type
77
lasso_saml_audience_restriction_condition_get_type
78
lasso_saml_authentication_statement_get_type
79
lasso_saml_authority_binding_get_type
80
lasso_saml_condition_abstract_get_type
81
lasso_saml_conditions_get_type
82
lasso_saml_name_identifier_get_type
83
lasso_samlp2_artifact_resolve_get_type
84
lasso_samlp2_artifact_response_get_type
85
lasso_samlp2_assertion_id_request_get_type
86
lasso_samlp2_attribute_query_get_type
87
lasso_samlp2_authn_query_get_type
88
lasso_samlp2_authn_request_get_type
89
lasso_samlp2_authz_decision_query_get_type
90
lasso_samlp2_extensions_get_type
91
lasso_samlp2_idp_entry_get_type
92
lasso_samlp2_idp_list_get_type
93
lasso_samlp2_logout_request_get_type
94
lasso_samlp2_logout_response_get_type
95
lasso_samlp2_manage_name_id_request_get_type
96
lasso_samlp2_manage_name_id_response_get_type
97
lasso_samlp2_name_id_mapping_request_get_type
98
lasso_samlp2_name_id_mapping_response_get_type
99
lasso_samlp2_name_id_policy_get_type
100
lasso_samlp2_request_abstract_get_type
101
lasso_samlp2_requested_authn_context_get_type
102
lasso_samlp2_response_get_type
103
lasso_samlp2_scoping_get_type
104
lasso_samlp2_status_code_get_type
105
lasso_samlp2_status_detail_get_type
106
lasso_samlp2_status_get_type
107
lasso_samlp2_status_response_get_type
108
lasso_samlp2_subject_query_abstract_get_type
109
lasso_samlp2_terminate_get_type
110
lasso_samlp_request_abstract_get_type
111
lasso_samlp_request_get_type
112
lasso_samlp_response_abstract_get_type
113
lasso_samlp_response_get_type
114
lasso_samlp_status_code_get_type
115
lasso_samlp_status_get_type
116
lasso_saml_statement_abstract_get_type
117
lasso_saml_subject_confirmation_get_type
118
lasso_saml_subject_get_type
119
lasso_saml_subject_locality_get_type
120
lasso_saml_subject_statement_abstract_get_type
121
lasso_saml_subject_statement_get_type
122
lasso_server_get_type
123
lasso_session_get_type
124
lasso_soap_body_get_type
125
lasso_soap_detail_get_type
126
lasso_soap_envelope_get_type
127
lasso_soap_fault_get_type
128
lasso_soap_header_get_type
129
#WSF#lasso_authentication_get_type
130
#WSF#lasso_data_service_get_type
131
#WSF#lasso_disco_authenticate_requester_get_type
132
#WSF#lasso_disco_authenticate_session_context_get_type
133
#WSF#lasso_disco_authorize_requester_get_type
134
#WSF#lasso_disco_credentials_get_type
135
#WSF#lasso_disco_description_get_type
136
#WSF#lasso_disco_encrypted_resource_id_get_type
137
#WSF#lasso_disco_encrypt_resource_id_get_type
138
#WSF#lasso_disco_generate_bearer_token_get_type
139
#WSF#lasso_disco_insert_entry_get_type
140
#WSF#lasso_disco_modify_get_type
141
#WSF#lasso_disco_modify_response_get_type
142
#WSF#lasso_disco_options_get_type
143
#WSF#lasso_disco_query_get_type
144
#WSF#lasso_disco_query_response_get_type
145
#WSF#lasso_disco_remove_entry_get_type
146
#WSF#lasso_disco_requested_service_type_get_type
147
#WSF#lasso_disco_resource_id_get_type
148
#WSF#lasso_disco_resource_offering_get_type
149
#WSF#lasso_disco_send_single_logout_get_type
150
#WSF#lasso_disco_service_instance_get_type
151
#WSF#lasso_discovery_get_type
152
#WSF#lasso_dst_data_get_type
153
#WSF#lasso_dst_modification_get_type
154
#WSF#lasso_dst_modify_get_type
155
#WSF#lasso_dst_modify_response_get_type
156
#WSF#lasso_dst_new_data_get_type
157
#WSF#lasso_dst_query_get_type
158
#WSF#lasso_dst_query_item_get_type
159
#WSF#lasso_dst_query_response_get_type
160
#WSF#lasso_idwsf2_data_service_get_type
161
#WSF#lasso_idwsf2_disco_abstract_get_type
162
#WSF#lasso_idwsf2_disco_endpoint_context_get_type
163
#WSF#lasso_idwsf2_disco_keys_get_type
164
#WSF#lasso_idwsf2_disco_options_get_type
165
#WSF#lasso_idwsf2_disco_provider_id_get_type
166
#WSF#lasso_idwsf2_disco_query_get_type
167
#WSF#lasso_idwsf2_disco_query_response_get_type
168
#WSF#lasso_idwsf2_disco_requested_service_get_type
169
#WSF#lasso_idwsf2_disco_security_context_get_type
170
#WSF#lasso_idwsf2_disco_service_context_get_type
171
#WSF#lasso_idwsf2_disco_service_type_get_type
172
#WSF#lasso_idwsf2_disco_svc_md_association_add_get_type
173
#WSF#lasso_idwsf2_disco_svc_md_association_add_response_get_type
174
#WSF#lasso_idwsf2_disco_svc_md_association_delete_get_type
175
#WSF#lasso_idwsf2_disco_svc_md_association_delete_response_get_type
176
#WSF#lasso_idwsf2_disco_svc_md_association_query_get_type
177
#WSF#lasso_idwsf2_disco_svc_md_association_query_response_get_type
178
#WSF#lasso_idwsf2_disco_svc_md_delete_get_type
179
#WSF#lasso_idwsf2_disco_svc_md_delete_response_get_type
180
#WSF#lasso_idwsf2_disco_svc_md_query_get_type
181
#WSF#lasso_idwsf2_disco_svc_md_query_response_get_type
182
#WSF#lasso_idwsf2_disco_svc_md_register_get_type
183
#WSF#lasso_idwsf2_disco_svc_md_register_response_get_type
184
#WSF#lasso_idwsf2_disco_svc_md_replace_get_type
185
#WSF#lasso_idwsf2_disco_svc_md_replace_response_get_type
186
#WSF#lasso_idwsf2_disco_svc_metadata_get_type
187
#WSF#lasso_idwsf2_discovery_get_type
188
#WSF#lasso_idwsf2_dst_data_response_base_get_type
189
#WSF#lasso_idwsf2_dst_delete_item_base_get_type
190
#WSF#lasso_idwsf2_dst_delete_response_get_type
191
#WSF#lasso_idwsf2_dstref_app_data_get_type
192
#WSF#lasso_idwsf2_dstref_create_get_type
193
#WSF#lasso_idwsf2_dstref_create_item_get_type
194
#WSF#lasso_idwsf2_dstref_create_response_get_type
195
#WSF#lasso_idwsf2_dstref_data_get_type
196
#WSF#lasso_idwsf2_dstref_data_response_get_type
197
#WSF#lasso_idwsf2_dstref_delete_get_type
198
#WSF#lasso_idwsf2_dstref_delete_item_get_type
199
#WSF#lasso_idwsf2_dstref_delete_response_get_type
200
#WSF#lasso_idwsf2_dstref_item_data_get_type
201
#WSF#lasso_idwsf2_dstref_modify_get_type
202
#WSF#lasso_idwsf2_dstref_modify_item_get_type
203
#WSF#lasso_idwsf2_dstref_modify_response_get_type
204
#WSF#lasso_idwsf2_dstref_query_get_type
205
#WSF#lasso_idwsf2_dstref_query_item_get_type
206
#WSF#lasso_idwsf2_dstref_query_response_get_type
207
#WSF#lasso_idwsf2_dstref_result_query_get_type
208
#WSF#lasso_idwsf2_dstref_test_item_get_type
209
#WSF#lasso_idwsf2_dst_request_get_type
210
#WSF#lasso_idwsf2_dst_result_query_base_get_type
211
#WSF#lasso_idwsf2_dst_test_item_base_get_type
212
#WSF#lasso_idwsf2_ims_identity_mapping_request_get_type
213
#WSF#lasso_idwsf2_ims_identity_mapping_response_get_type
214
#WSF#lasso_idwsf2_ims_mapping_input_get_type
215
#WSF#lasso_idwsf2_ims_mapping_output_get_type
216
#WSF#lasso_idwsf2_is_help_get_type
217
#WSF#lasso_idwsf2_is_inquiry_element_get_type
218
#WSF#lasso_idwsf2_is_inquiry_get_type
219
#WSF#lasso_idwsf2_is_interaction_request_get_type
220
#WSF#lasso_idwsf2_is_interaction_response_get_type
221
#WSF#lasso_idwsf2_is_interaction_statement_get_type
222
#WSF#lasso_idwsf2_is_item_get_type
223
#WSF#lasso_idwsf2_is_parameter_get_type
224
#WSF#lasso_idwsf2_is_select_get_type
225
#WSF#lasso_idwsf2_is_text_get_type
226
#WSF#lasso_idwsf2_profile_get_type
227
#WSF#lasso_idwsf2_ps_add_collection_request_get_type
228
#WSF#lasso_idwsf2_ps_add_collection_response_get_type
229
#WSF#lasso_idwsf2_ps_add_entity_request_get_type
230
#WSF#lasso_idwsf2_ps_add_entity_response_get_type
231
#WSF#lasso_idwsf2_ps_add_known_entity_request_get_type
232
#WSF#lasso_idwsf2_ps_add_known_entity_response_get_type
233
#WSF#lasso_idwsf2_ps_add_to_collection_request_get_type
234
#WSF#lasso_idwsf2_ps_get_object_info_request_get_type
235
#WSF#lasso_idwsf2_ps_get_object_info_response_get_type
236
#WSF#lasso_idwsf2_ps_item_data_get_type
237
#WSF#lasso_idwsf2_ps_list_members_request_get_type
238
#WSF#lasso_idwsf2_ps_list_members_response_get_type
239
#WSF#lasso_idwsf2_ps_notification_get_type
240
#WSF#lasso_idwsf2_ps_notify_get_type
241
#WSF#lasso_idwsf2_ps_object_get_type
242
#WSF#lasso_idwsf2_ps_query_objects_request_get_type
243
#WSF#lasso_idwsf2_ps_query_objects_response_get_type
244
#WSF#lasso_idwsf2_ps_remove_collection_request_get_type
245
#WSF#lasso_idwsf2_ps_remove_entity_request_get_type
246
#WSF#lasso_idwsf2_ps_remove_from_collection_request_get_type
247
#WSF#lasso_idwsf2_ps_request_abstract_get_type
248
#WSF#lasso_idwsf2_ps_resolve_identifier_request_get_type
249
#WSF#lasso_idwsf2_ps_resolve_identifier_response_get_type
250
#WSF#lasso_idwsf2_ps_resolve_input_get_type
251
#WSF#lasso_idwsf2_ps_response_abstract_get_type
252
#WSF#lasso_idwsf2_ps_set_object_info_request_get_type
253
#WSF#lasso_idwsf2_ps_test_membership_request_get_type
254
#WSF#lasso_idwsf2_ps_test_membership_response_get_type
255
#WSF#lasso_idwsf2_sb2_consent_get_type
256
#WSF#lasso_idwsf2_sb2_credentials_context_get_type
257
#WSF#lasso_idwsf2_sb2_endpoint_update_get_type
258
#WSF#lasso_idwsf2_sb2_redirect_request_get_type
259
#WSF#lasso_idwsf2_sb2_sender_get_type
260
#WSF#lasso_idwsf2_sb2_target_identity_get_type
261
#WSF#lasso_idwsf2_sb2_timeout_get_type
262
#WSF#lasso_idwsf2_sb2_usage_directive_get_type
263
#WSF#lasso_idwsf2_sb2_user_interaction_header_get_type
264
#WSF#lasso_idwsf2_sbf_framework_get_type
265
#WSF#lasso_idwsf2_sec_token_get_type
266
#WSF#lasso_idwsf2_sec_token_policy_get_type
267
#WSF#lasso_idwsf2_sec_transited_provider_path_get_type
268
#WSF#lasso_idwsf2_subs_notification_get_type
269
#WSF#lasso_idwsf2_subs_notify_response_get_type
270
#WSF#lasso_idwsf2_subsref_app_data_get_type
271
#WSF#lasso_idwsf2_subsref_create_get_type
272
#WSF#lasso_idwsf2_subsref_create_item_get_type
273
#WSF#lasso_idwsf2_subsref_create_response_get_type
274
#WSF#lasso_idwsf2_subsref_data_get_type
275
#WSF#lasso_idwsf2_subsref_data_response_get_type
276
#WSF#lasso_idwsf2_subsref_delete_get_type
277
#WSF#lasso_idwsf2_subsref_delete_item_get_type
278
#WSF#lasso_idwsf2_subsref_delete_response_get_type
279
#WSF#lasso_idwsf2_subsref_item_data_get_type
280
#WSF#lasso_idwsf2_subs_ref_item_get_type
281
#WSF#lasso_idwsf2_subsref_modify_get_type
282
#WSF#lasso_idwsf2_subsref_modify_item_get_type
283
#WSF#lasso_idwsf2_subsref_modify_response_get_type
284
#WSF#lasso_idwsf2_subsref_notification_get_type
285
#WSF#lasso_idwsf2_subsref_notify_get_type
286
#WSF#lasso_idwsf2_subsref_notify_response_get_type
287
#WSF#lasso_idwsf2_subsref_query_get_type
288
#WSF#lasso_idwsf2_subsref_query_item_get_type
289
#WSF#lasso_idwsf2_subsref_query_response_get_type
290
#WSF#lasso_idwsf2_subsref_result_query_get_type
291
#WSF#lasso_idwsf2_subsref_subscription_get_type
292
#WSF#lasso_idwsf2_subsref_test_item_get_type
293
#WSF#lasso_idwsf2_subs_subscription_get_type
294
#WSF#lasso_idwsf2_util_empty_get_type
295
#WSF#lasso_idwsf2_util_extension_get_type
296
#WSF#lasso_idwsf2_util_response_get_type
297
#WSF#lasso_idwsf2_util_status_get_type
298
#WSF#lasso_interaction_profile_service_get_type
299
#WSF#lasso_is_help_get_type
300
#WSF#lasso_is_inquiry_element_get_type
301
#WSF#lasso_is_inquiry_get_type
302
#WSF#lasso_is_interaction_request_get_type
303
#WSF#lasso_is_interaction_response_get_type
304
#WSF#lasso_is_interaction_statement_get_type
305
#WSF#lasso_is_item_get_type
306
#WSF#lasso_is_parameter_get_type
307
#WSF#lasso_is_redirect_request_get_type
308
#WSF#lasso_is_select_get_type
309
#WSF#lasso_is_text_get_type
310
#WSF#lasso_is_user_interaction_get_type
311
#WSF#lasso_personal_profile_service_get_type
312
#WSF#lasso_sa_credentials_get_type
313
#WSF#lasso_sa_parameter_get_type
314
#WSF#lasso_sa_password_transforms_get_type
315
#WSF#lasso_sa_sasl_request_get_type
316
#WSF#lasso_sa_sasl_response_get_type
317
#WSF#lasso_sa_transform_get_type
318
#WSF#lasso_sec_resource_access_statement_get_type
319
#WSF#lasso_soap_binding_consent_get_type
320
#WSF#lasso_soap_binding_correlation_get_type
321
#WSF#lasso_soap_binding_ext_credential_get_type
322
#WSF#lasso_soap_binding_ext_credentials_context_get_type
323
#WSF#lasso_soap_binding_ext_service_instance_update_get_type
324
#WSF#lasso_soap_binding_ext_timeout_get_type
325
#WSF#lasso_soap_binding_processing_context_get_type
326
#WSF#lasso_soap_binding_provider_get_type
327
#WSF#lasso_soap_binding_usage_directive_get_type
328
#WSF#lasso_utility_status_get_type
329
#WSF#lasso_wsa_attributed_any_get_type
330
#WSF#lasso_wsa_attributed_qname_get_type
331
#WSF#lasso_wsa_attributed_unsigned_long_get_type
332
#WSF#lasso_wsa_attributed_uri_get_type
333
#WSF#lasso_wsa_endpoint_reference_get_type
334
#WSF#lasso_wsa_metadata_get_type
335
#WSF#lasso_wsa_problem_action_get_type
336
#WSF#lasso_wsa_reference_parameters_get_type
337
#WSF#lasso_wsa_relates_to_get_type
338
#WSF#lasso_wsf_profile_get_type
339
#WSF#lasso_wsse_embedded_get_type
340
#WSF#lasso_wsse_reference_get_type
341
#WSF#lasso_wsse_security_get_type
342
#WSF#lasso_wsse_security_header_get_type
343
#WSF#lasso_wsse_security_token_reference_get_type
344
#WSF#lasso_wsse_transformation_parameters_get_type
345
#WSF#lasso_wsse_username_token_get_type
346
#WSF#lasso_wsu_timestamp_get_type
lasso.doap
13 13
      Lasso (Liberty Alliance Single Sign On) is a free (GNU GPL) implementation
14 14
      of the Liberty Alliance specifications.  Those define protocols for
15 15
      federated identities, single sign-on, etc.  Lasso supports ID-FF 1.2,
16
      SAML 2.0 and parts of ID-WSF; it provides both a C library and bindings
16
      SAML 2.0; it provides both a C library and bindings
17 17
      for several languages (Python, Java, Perl, PHP 4 and PHP 5).
18 18
    </description>
19 19
    <shortdesc>Free Software implementation of Liberty Alliance specifications</shortdesc>
lasso/Makefile.am
1 1
SUBDIRS = xml id-ff saml-2.0
2
if WSF_ENABLED
3
SUBDIRS +=  id-wsf-2.0 id-wsf
4
endif
5 2

  
6 3
liblassoincludedir = $(includedir)/lasso
7 4

  
......
25 22

  
26 23
liblasso_la_SOURCES = lasso.c errors.c registry.c utils.c logging.c key.c
27 24

  
28
if WSF_ENABLED
29
SYMBOLS_ARGS = -wsf
30
endif
31

  
32 25
types.c: $(srcdir)/*.h $(srcdir)/*/*.h $(srcdir)/*/*/*.h
33 26
	$(PYTHON) $(srcdir)/extract_types.py $(srcdir) $(SYMBOLS_ARGS)
34 27

  
......
45 38
EXTRA_DIST = $(nodist_liblassoinclude_HEADERS) extract_types.py extract_symbols.py build_strerror.py \
46 39
	     errors.c.in extract_sections.py errors.c
47 40

  
48
if WSF_ENABLED
49
WSF_LIB_FILE = $(top_builddir)/lasso/id-wsf/liblasso-id-wsf.la
50

  
51
WSF2_LIB_FILES = $(top_builddir)/lasso/id-wsf-2.0/liblasso-id-wsf2.la \
52
	$(top_builddir)/lasso/xml/id-wsf-2.0/liblasso-xml-id-wsf-2.la \
53
	$(top_builddir)/lasso/xml/ws/liblasso-xml-ws.la
54
endif
55

  
56 41
if MINGW
57 42
liblasso_la_LIBADD = \
58 43
	$(top_builddir)/lasso/xml/liblasso-xml.la \
......
62 47
	$(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \
63 48
	$(top_builddir)/lasso/id-ff/liblasso-id-ff.la \
64 49
	$(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \
65
	$(WSF_LIB_FILE) \
66
	$(WSF2_LIB_FILES) \
67 50
	$(LASSO_LIBS) \
68 51
	lasso.rc.lo
69 52
# Just make damn sure the ABI stays the same between
......
80 63
	$(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \
81 64
	$(top_builddir)/lasso/id-ff/liblasso-id-ff.la \
82 65
	$(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \
83
	$(WSF_LIB_FILE) \
84
	$(WSF2_LIB_FILES) \
85 66
	$(LASSO_LIBS)
86 67
# Just make damn sure the ABI stays the same between
87 68
# upgrades.
lasso/errors.h
783 783
#define LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE -901
784 784
#define LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER -902
785 785

  
786
/* Data Service */
787
#define LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST    -1000
788
#define LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM           -1001
789

  
790
/* WSF Profile */
791
/**
792
 * LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION:
793
 *
794
 * Correlation SOAP Header is missing
795
 */
796
#define LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION -1100
797
/**
798
 * LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY:
799
 *
800
 * Security SOAP Header is missing
801
 */
802
#define LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY -1101
803
/**
804
 * LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID:
805
 *
806
 * AssertionID attribute is missing
807
 */
808
#define LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID -1102
809
/**
810
 * LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT:
811
 *
812
 * Cannot find an WSP endpoint for the ID-WSF service
813
 */
814
#define LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT -1103
815
/**
816
 * LASSO_WSF_PROFILE_ERROR_SOAP_FAULT:
817
 *
818
 * SOAP ID-WSF binding returned a SOAP fault
819
 */
820
#define LASSO_WSF_PROFILE_ERROR_SOAP_FAULT 1104
821
/**
822
 * LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM:
823
 *
824
 * The specified security mechanism is not supported by lasso ID-WSF library
825
 */
826
#define LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM 1105
827
/**
828
 * LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION:
829
 *
830
 * No ID-WSF web Service description could be found for the current security mechanism
831
 */
832
#define LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION -1106
833
/**
834
 * LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID:
835
 *
836
 * The necessary ResourceID or EncryptedResourceID for calling an ID-WSF service is missing.
837
 */
838
#define LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID -1107
839
/**
840
 * LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF:
841
 *
842
 * WS-Security SAML Token secmech needs a CredentialRef
843
 */
844
#define LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF -1108
845
/**
846
 * LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID:
847
 *
848
 * refToMessageID attribute of the Corrrelation header does not match the SOAP request
849
 */
850
#define LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID -1109
851
/**
852
 * LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED:
853
 *
854
 * Check for a security mechanism upon a received request failed.
855
 */
856
#define LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED 1110
857

  
858
/**
859
 * LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE:
860
 *
861
 * A response contained an unknown status code.
862
 */
863
#define LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE 1112
864
/**
865
 * LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED:
866
 *
867
 * A interaction is required but the sender did not allow use to make interact redirect requests.
868
 */
869
#define LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED 1113
870
/**
871
 * LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA:
872
 *
873
 * A interaction is required to get fresh datas but the sender did not allow use to make interact
874
 * redirect requests.
875
 */
876
#define LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA 1114
877
/**
878
 * LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST:
879
 *
880
 * The last parsed response contained a SOAP fault with a RedirectRequest element.
881
 */
882
#define LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST 1115
883
/**
884
 * LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER:
885
 *
886
 * The requester does not support SOAP Fault containing RedirectRequest elements. So it is not
887
 * possible to use lasso_idwsf2_profile_redirect_user_for_interaction().
888
 */
889
#define LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER 1116
890
/**
891
 * LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID:
892
 *
893
 * The received ID-WSF request miss a Sender id.
894
 */
895
#define LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID 1117
896

  
897

  
898
/* ID-WSF 2 Discovery */
899
/**
900
 * LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED:
901
 *
902
 * Service metadata registration failed
903
 */
904
#define LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED -1200
905
/**
906
 * LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED:
907
 *
908
 * Service metadata association failed
909
 */
910
#define LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED -1201
911
/**
912
 * LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE:
913
 *
914
 * Missing requested service
915
 */
916
#define LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE -1202
917
/**
918
 * LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE:
919
 *
920
 * Failed to build Endpoint Reference
921
 */
922
#define LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE -1203
923

  
924
/* ID-WSF 2 Data Service */
925
/**
926
 * LASSO_DST_ERROR_MISSING_SERVICE_DATA:
927
 *
928
 * Missing service data
929
 */
930
#define LASSO_DST_ERROR_MISSING_SERVICE_DATA -1300
931
/**
932
 * LASSO_DST_ERROR_QUERY_FAILED:
933
 *
934
 * Query failed
935
 */
936
#define LASSO_DST_ERROR_QUERY_FAILED -1301
937
/**
938
 * LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED:
939
 *
940
 * Query partially failed : some items were correctly processed
941
 */
942
#define LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED -1302
943
/**
944
 * LASSO_DST_ERROR_MODIFY_FAILED:
945
 *
946
 * Modify failed
947
 */
948
#define LASSO_DST_ERROR_MODIFY_FAILED -1303
949
/**
950
 * LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED:
951
 *
952
 * Modify partially failed : some items were correctly processed
953
 */
954
#define LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED -1304
955
/**
956
 * LASSO_DST_ERROR_NEW_DATA_MISSING:
957
 *
958
 * Missing new data
959
 */
960
#define LASSO_DST_ERROR_NEW_DATA_MISSING -1305
961
/**
962
 * LASSO_DST_ERROR_QUERY_NOT_FOUND:
963
 *
964
 * Looked query is not found
965
 */
966
#define LASSO_DST_ERROR_QUERY_NOT_FOUND -1306
967
/**
968
 * LASSO_DST_ERROR_NO_DATA:
969
 *
970
 * No data or no data for the designated query item in the query response
971
 */
972
#define LASSO_DST_ERROR_NO_DATA -1307
973
/**
974
 * LASSO_DST_ERROR_MALFORMED_QUERY:
975
 *
976
 * QueryObject is malformed
977
 */
978
#define LASSO_DST_ERROR_MALFORMED_QUERY -1308
979
/**
980
 * LASSO_DST_ERROR_EMPTY_REQUEST
981
 *
982
 * Request is empty.
983
 */
984
#define LASSO_DST_ERROR_EMPTY_REQUEST -1309
985

  
986 786
/* Lasso registry */
987 787
/**
988 788
 * LASSO_REGISTRY_ERROR_KEY_EXISTS:
......
999 799
 */
1000 800
#define LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY -1500
1001 801

  
1002
/* WS-Security */
1003
/**
1004
 * LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN:
1005
 *
1006
 * The request miss a WS-Security token.
1007
 */
1008
#define LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN 1600
1009

  
1010
/**
1011
 * LASSO_WSSEC_ERROR_BAD_PASSWORD:
1012
 *
1013
 * The known password does not match the UsernameToken
1014
 */
1015
#define LASSO_WSSEC_ERROR_BAD_PASSWORD 1601
1016

  
1017
/* ID-WSF 2.0 Discovery Service */
1018
/**
1019
 * LASSO_IDWSF2_DISCOVERY_ERROR_FAILED:
1020
 *
1021
 * Last discovery request failed.
1022
 */
1023
#define LASSO_IDWSF2_DISCOVERY_ERROR_FAILED 1700
1024
/**
1025
 * LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN:
1026
 *
1027
 * Last discovery request is forbidden by policy.
1028
 */
1029
#define LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN 1701
1030
/**
1031
 * LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE:
1032
 *
1033
 * Last discovery request was denied because it would result in duplicate data in the service
1034
 */
1035
#define LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE 1702
1036
/**
1037
 * LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE:
1038
 *
1039
 * Last discovery request was denied because it would result in logically duplicate data in the service
1040
 */
1041
#define LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE 1703
1042
/**
1043
 * LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS:
1044
 *
1045
 * The discovery query had no matching results.
1046
 */
1047
#define LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS 1704
1048
/**
1049
 * LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND:
1050
 *
1051
 * The specified item(s) were not found.
1052
 */
1053
#define LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND 1705
1054

  
1055
/* ID-WSF 2.0 Data Service Template */
1056

  
1057
/**
1058
 * LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM:
1059
 *
1060
 * A call to add a new item would result in duplicate items.
1061
 */
1062
#define LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM -1801
1063

  
1064
/**
1065
 * LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE:
1066
 *
1067
 * Server responded with a partial failure status code.
1068
 */
1069
#define LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE 1802
1070

  
1071
/**
1072
 * LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE:
1073
 *
1074
 * Server response with an unknown status code.
1075
 */
1076
#define LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE 1803
1077
/**
1078
 * LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND:
1079
 *
1080
 * The item_id was not found in the current query request.
1081
 */
1082
#define LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND 1804
1083

  
1084 802
/**
1085 803
 * LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST:
1086 804
 *
lasso/extract_sections.py
7 7
import os.path
8 8
from six import print_
9 9

  
10
enable_wsf = False
11

  
12
if '-wsf' in sys.argv:
13
    enable_wsf = True
14

  
15
if len(sys.argv) == 2+enable_wsf:
10
if len(sys.argv) == 2:
16 11
    srcdir = sys.argv[1]
17 12
else:
18 13
    srcdir = '.'
lasso/extract_symbols.py
6 6
import sys
7 7
import six
8 8

  
9
enable_wsf = False
10

  
11
if '-wsf' in sys.argv:
12
    enable_wsf = True
13

  
14
if len(sys.argv) == 2+enable_wsf:
9
if len(sys.argv) == 2:
15 10
    srcdir = sys.argv[1]
16 11
else:
17 12
    srcdir = '.'
......
21 16
symbols = []
22 17
for header_file in glob.glob('%s/*/*.h' % srcdir) + glob.glob('%s/*.h' % srcdir) + \
23 18
        glob.glob('%s/*/*/*.h' % srcdir):
24
    if ('/id-wsf/' in header_file or '/id-wsf-2.0' in header_file) and not enable_wsf:
25
        continue
19
    assert not ('/id-wsf/' in header_file or '/id-wsf-2.0' in header_file)
26 20
    symbols.extend(regex.findall(io.open(header_file, encoding='utf-8').read().replace('\\\n', '')))
27 21

  
28
wsf = ['lasso_disco_', 'lasso_dst_', 'lasso_is_', 'lasso_profile_service_',
29
        'lasso_discovery', 'lasso_wsf', 'lasso_interaction_', 'lasso_utility_',
30
        'lasso_sa_', 'lasso_soap_binding', 'lasso_authentication', 'lasso_wsse_',
31
        'lasso_sec_', 'lasso_idwsf2', 'lasso_wsf2', 'lasso_wsa_',
32
        'lasso_wsu_']
33
if enable_wsf:
34
    wsf = []
35

  
36 22
for s in symbols:
37
    for t in wsf:
38
        if s.startswith(t):
39
            break
40
    else:
41
        six.print_(s)
23
    six.print_(s)
42 24

  
lasso/extract_types.py
6 6
import sys
7 7
import six
8 8

  
9
enable_wsf = 0
10

  
11
if '-wsf' in sys.argv:
12
    enable_wsf = 1
13

  
14
if len(sys.argv) == 2+enable_wsf:
9
if len(sys.argv) == 2:
15 10
    srcdir = sys.argv[1]
16 11
else:
17 12
    srcdir = '.'
18 13

  
19
wsf = ['lasso_disco_', 'lasso_dst_', 'lasso_is_', 'lasso_profile_service_',
20
        'lasso_discovery', 'lasso_wsf', 'lasso_interaction_', 'lasso_utility_',
21
        'lasso_sa_', 'lasso_soap_binding', 'lasso_authentication', 'lasso_wsse_',
22
        'lasso_sec_', 'lasso_idwsf2', 'lasso_wsf2', 'lasso_wsa_',
23
        'lasso_wsu_']
24
if enable_wsf:
25
    wsf = []
26 14

  
27 15
fd = io.StringIO()
28 16

  
......
33 21

  
34 22
header_files = []
35 23
for header_file in sorted(glob.glob('%s/*/*.h' % srcdir) + glob.glob('%s/*/*/*.h' % srcdir)):
36
    if ('/id-wsf/' in header_file or '/id-wsf-2.0' in header_file) and not enable_wsf:
37
        continue
24
    assert not ('/id-wsf/' in header_file or '/id-wsf-2.0' in header_file)
38 25
    header_files.append(header_file)
39 26
    try:
40 27
        type = re.findall('lasso_.*get_type', io.open(header_file, encoding='utf-8').read())[0]
41 28
    except IndexError:
42 29
        continue
43
    for t in wsf:
44
        if type.startswith(t):
45
            break
46
    else:
47
        six.print_("extern GType %s();" % type, file=fd)
30
    six.print_("extern GType %s();" % type, file=fd)
48 31

  
49 32
six.print_(u"", file=fd)
50 33
six.print_(u"type_function functions[] = {", file=fd)
......
53 36
        type = re.findall('lasso_.*get_type', io.open(header_file, encoding='utf-8').read())[0]
54 37
    except IndexError:
55 38
        continue
56
    for t in wsf:
57
        if type.startswith(t):
58
            break
59
    else:
60
        six.print_(u"\t%s," % type, file=fd)
39
    six.print_(u"\t%s," % type, file=fd)
61 40
six.print_(u"\tNULL", file=fd)
62 41
six.print_(u"};", file=fd)
63 42

  
lasso/id-ff/identity.c
35 35
#include "../utils.h"
36 36
#include "identity.h"
37 37

  
38
#ifdef LASSO_WSF_ENABLED
39
#include "../id-wsf/id_ff_extensions.h"
40
#endif
41

  
42 38
#include "identityprivate.h"
43 39
#include "../lasso_config.h"
44 40

  
......
144 140
	xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE));
145 141
}
146 142

  
147
#ifdef LASSO_WSF_ENABLED
148
static void
149
add_text_childnode_from_list(gchar *value, xmlNode *xmlnode)
150
{
151
	xmlNewTextChild(xmlnode, NULL, (xmlChar*)"SvcMDID", (xmlChar*)value);
152
}
153
#endif
154

  
155 143
static xmlNode*
156 144
get_xmlNode(LassoNode *node, G_GNUC_UNUSED gboolean lasso_dump)
157 145
{
158 146
	xmlNode *xmlnode;
159 147
	LassoIdentity *identity = LASSO_IDENTITY(node);
160
#ifdef LASSO_WSF_ENABLED
161
	xmlNode *t;
162
#endif
163 148

  
164 149
	xmlnode = xmlNewNode(NULL, (xmlChar*)"Identity");
165 150
	xmlSetNs(xmlnode, xmlNewNs(xmlnode, (xmlChar*)LASSO_LASSO_HREF, NULL));
......
169 154
	if (g_hash_table_size(identity->federations))
170 155
		g_hash_table_foreach(identity->federations,
171 156
				(GHFunc)add_childnode_from_hashtable, xmlnode);
172
#ifdef LASSO_WSF_ENABLED
173
	/* Resource Offerings */
174
	g_hash_table_foreach(identity->private_data->resource_offerings_map,
175
			(GHFunc)add_childnode_from_hashtable, xmlnode);
176

  
177
	/* Service Metadatas IDs (svcMDID) */
178
	if (identity->private_data->svcMDID != NULL) {
179
		t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)"SvcMDIDs", NULL);
180
		g_list_foreach(identity->private_data->svcMDID,
181
				(GFunc)add_text_childnode_from_list, t);
182
	}
183
#endif
184

  
185 157
	return xmlnode;
186 158
}
187 159

  
......
190 162
{
191 163
	LassoIdentity *identity = LASSO_IDENTITY(node);
192 164
	xmlNode *t;
193
#ifdef LASSO_WSF_ENABLED
194
	xmlNode *t2;
195
	xmlChar *xml_content;
196
	gchar *content;
197
#endif
198 165

  
199 166
	t = xmlnode->children;
200 167
	while (t) {
......
212 179
					g_strdup(federation->remote_providerID), federation);
213 180
		}
214 181

  
215
#ifdef LASSO_WSF_ENABLED
216
		/* Resource Offerings */
217
		if (strcmp((char*)t->name, "ResourceOffering") == 0) {
218
			LassoDiscoResourceOffering *offering;
219
			offering = LASSO_DISCO_RESOURCE_OFFERING(lasso_node_new_from_xmlNode(t));
220
			g_hash_table_insert(identity->private_data->resource_offerings_map,
221
				g_strdup(offering->entryID),
222
				g_object_ref(offering));
223
		}
224

  
225
		/* Service Metadatas IDs (SvcMDID) */
226
		if (strcmp((char*)t->name, "SvcMDIDs") == 0) {
227
			t2 = t->children;
228
			while (t2) {
229
				if (t2->type != XML_ELEMENT_NODE) {
230
					t2 = t2->next;
231
					continue;
232
				}
233
				xml_content = xmlNodeGetContent(t2);
234
				content = g_strdup((gchar *)xml_content);
235
				identity->private_data->svcMDID = g_list_append(
236
					identity->private_data->svcMDID, content);
237
				xmlFree(xml_content);
238
				t2 = t2->next;
239
			}
240
		}
241
#endif
242

  
243 182
		t = t->next;
244 183
	}
245 184

  
......
256 195
{
257 196
	LassoIdentity *identity = LASSO_IDENTITY(object);
258 197

  
259

  
260 198
	if (identity->private_data->dispose_has_run == FALSE) {
261 199
		identity->private_data->dispose_has_run = TRUE;
262
#ifdef LASSO_WSF_ENABLED
263
		lasso_release_list_of_strings(identity->private_data->svcMDID);
264
		lasso_release_ghashtable(identity->private_data->resource_offerings_map);
265
#endif
266

  
267 200
		lasso_release_ghashtable(identity->federations);
268

  
269 201
		G_OBJECT_CLASS(parent_class)->dispose(object);
270 202
	}
271 203
}
......
288 220
{
289 221
	identity->private_data = g_new0(LassoIdentityPrivate, 1);
290 222
	identity->private_data->dispose_has_run = FALSE;
291
#ifdef LASSO_WSF_ENABLED
292
	identity->private_data->svcMDID = NULL;
293
	identity->private_data->last_entry_id = 0;
294
	identity->private_data->resource_offerings_map = g_hash_table_new_full(g_str_hash,
295
			g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)g_object_unref);
296
#endif
297 223
	identity->federations = g_hash_table_new_full(g_str_hash, g_str_equal,
298 224
			(GDestroyNotify)g_free,
299 225
			(GDestroyNotify)lasso_federation_destroy);
lasso/id-ff/identityprivate.h
33 33
struct _LassoIdentityPrivate
34 34
{
35 35
	gboolean dispose_has_run;
36
#ifdef LASSO_WSF_ENABLED
37
	guint last_entry_id;
38
	GHashTable *resource_offerings_map; /* of LassoDiscoResourceOffering */
39
	GList *svcMDID; /* of char* */
40
#endif
41 36
};
42 37

  
43 38
gint lasso_identity_add_federation(LassoIdentity *identity, LassoFederation *federation);
lasso/id-ff/login.c
270 270
#include "../saml-2.0/loginprivate.h"
271 271
#include "../lasso_config.h"
272 272

  
273
#ifdef LASSO_WSF_ENABLED
274
#include "../id-wsf/id_ff_extensions_private.h"
275
#endif
276

  
277 273
#define LASSO_LOGIN_GET_PRIVATE(o) \
278 274
	   (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_LOGIN, LassoLoginPrivate))
279 275

  
......
416 412
	lasso_list_add_gobject(LASSO_SAMLP_RESPONSE(profile->response)->Assertion,
417 413
			assertion);
418 414

  
419
#ifdef LASSO_WSF_ENABLED
420
	lasso_login_assertion_add_discovery(login, assertion);
421
#endif
422

  
423 415
	/* store assertion in session object */
424 416
	if (profile->session == NULL) {
425 417
		profile->session = lasso_session_new();
......
2445 2437

  
2446 2438
	lasso_release_string(login->private_data->soap_request_msg);
2447 2439
	lasso_release_gobject(login->private_data->saml2_assertion);
2448

  
2449
#ifdef LASSO_WSF_ENABLED
2450
	lasso_release_gobject(login->private_data->resourceId);
2451
	lasso_release_gobject(login->private_data->encryptedResourceId);
2452
#endif
2453 2440
	lasso_release_string(login->private_data->request_id);
2454 2441
	G_OBJECT_CLASS(parent_class)->dispose(object);
2455 2442
}
lasso/id-ff/loginprivate.h
32 32
#include "config.h"
33 33
#include "../xml/saml-2.0/saml2_assertion.h"
34 34

  
35
#ifdef LASSO_WSF_ENABLED
36
#include "../xml/disco_resource_id.h"
37
#include "../xml/disco_encrypted_resource_id.h"
38
#endif
39

  
40 35
struct _LassoLoginPrivate
41 36
{
42 37
	char *soap_request_msg;
43 38
	LassoSaml2Assertion *saml2_assertion;
44 39
	char *request_id;
45
#ifdef LASSO_WSF_ENABLED
46
	LassoDiscoResourceID *resourceId;
47
	LassoDiscoEncryptedResourceID *encryptedResourceId;
48
#endif
49 40
};
50 41

  
51 42
#ifdef __cplusplus
lasso/id-ff/profile.c
48 48
#include "../xml/soap-1.1/soap_fault.h"
49 49
#include "../utils.h"
50 50
#include "../debug.h"
51
#ifdef LASSO_WSF_ENABLED
52
#include "../xml/idwsf_strings.h"
53
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
54
#endif
55 51
#include "../lasso_config.h"
56 52

  
57 53
#include <stdio.h>
......
209 205
		type = LASSO_REQUEST_TYPE_LECP;
210 206
	} else if (strcmp(name, "ManageNameIDRequest") == 0) {
211 207
		type = LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT;
212
#ifdef LASSO_WSF_ENABLED
213
	} else if (strcmp(name, "Query") == 0) {
214
		if (strcmp((char*)ns->href, LASSO_DISCO_HREF) == 0) {
215
			type = LASSO_REQUEST_TYPE_DISCO_QUERY;
216
		} else if (strcmp((char*)ns->href, LASSO_IDWSF2_DISCOVERY_HREF) == 0) {
217
			type = LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY;
218
		} else {
219
			type = LASSO_REQUEST_TYPE_DST_QUERY;
220
		}
221
	} else if (strcmp(name, "Modify") == 0) {
222
		if (strcmp((char*)ns->href, LASSO_DISCO_HREF) == 0) {
223
			type = LASSO_REQUEST_TYPE_DISCO_MODIFY;
224
		} else {
225
			type = LASSO_REQUEST_TYPE_DST_MODIFY;
226
		}
227
	} else if (strcmp(name, "SASLRequest") == 0) {
228
		type = LASSO_REQUEST_TYPE_SASL_REQUEST;
229
	} else if (strcmp(name, "SvcMDRegister") == 0) {
230
		type = LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER;
231
	} else if (strcmp(name, "SvcMDAssociationAdd") == 0) {
232
		type = LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD;
233
#endif
234 208
	} else {
235 209
		message(G_LOG_LEVEL_WARNING, "Unknown node name : %s", name);
236 210
	}
lasso/id-ff/profile.h
58 58
 * @LASSO_REQUEST_TYPE_NAME_REGISTRATION: Name Registration
59 59
 * @LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING: Name Identifier Mapping
60 60
 * @LASSO_REQUEST_TYPE_LECP: Liberty-Enabled Client / Proxy
61
 * @LASSO_REQUEST_TYPE_DISCO_QUERY: ID-WSF 1.0 Discovery Query request
62
 * @LASSO_REQUEST_TYPE_DISCO_MODIFY: ID-WSF 1.0 Discovery Modify Request
63
 * @LASSO_REQUEST_TYPE_DST_QUERY: ID-WSF 1.0 Data Service Template Query request
64
 * @LASSO_REQUEST_TYPE_DST_MODIFY: ID-WSF 1.0 Data Service Temaplte Modify request
65
 * @LASSO_REQUEST_TYPE_SASL_REQUEST: ID-WSF 1.0 Authentication request
66 61
 * @LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT: SAML 2.0 NameID Management request
67
 * @LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER: ID-WSF 2.0 Discovery Service Metadata Register
68
 * request
69
 * @LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD: ID-WSF 2.0 Discovery Service Metadata
70
 * Add Association request
71
 * @LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY: ID-WSF 2.0 Discovery Query request
72 62
 *
73 63
 * Request types (known for SOAP endpoints)
74 64
 */
......
80 70
	LASSO_REQUEST_TYPE_NAME_REGISTRATION = 4,
81 71
	LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING = 5,
82 72
	LASSO_REQUEST_TYPE_LECP = 6,
83
	LASSO_REQUEST_TYPE_DISCO_QUERY = 7,
84
	LASSO_REQUEST_TYPE_DISCO_MODIFY = 8,
85
	LASSO_REQUEST_TYPE_DST_QUERY = 9,
86
	LASSO_REQUEST_TYPE_DST_MODIFY = 10,
87
	LASSO_REQUEST_TYPE_SASL_REQUEST = 11,
88 73
	LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT = 12,
89
	LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER = 13,
90
	LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD = 14,
91
	LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY = 15
92 74
} LassoRequestType;
93 75

  
94 76
/**
lasso/id-ff/provider.h
143 143
 * LassoProtocolConformance:
144 144
 * @LASSO_PROTOCOL_LIBERTY_1_0: Liberty ID-FF 1.0
145 145
 * @LASSO_PROTOCOL_LIBERTY_1_1: Liberty ID-FF 1.1
146
 * @LASSO_PROTOCOL_LIBERTY_1_2: Liberty ID-FF 1.2 / ID-WSF 1.0
146
 * @LASSO_PROTOCOL_LIBERTY_1_2: Liberty ID-FF 1.2
147 147
 * @LASSO_PROTOCOL_SAML_2_0: SAML 2.0
148 148
 *
149 149
 * Provider protocol conformance.
lasso/id-ff/server.c
41 41
#include "../utils.h"
42 42
#include "../debug.h"
43 43
#include "../lasso_config.h"
44
#ifdef LASSO_WSF_ENABLED
45
#include "../id-wsf/id_ff_extensions_private.h"
46
#include "../id-wsf-2.0/serverprivate.h"
47
#endif
48 44

  
49 45
#define RSA_SHA1 "RSA_SHA1"
50 46
#define DSA_SHA1 "DSA_SHA1"
......
297 293
	{ "SignatureMethod", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL },
298 294
	{ "Providers", SNIPPET_LIST_NODES, 0, NULL, NULL, NULL },
299 295
	{ "ServerDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL },
300
#ifdef LASSO_WSF_ENABLED
301
	{ "Services", SNIPPET_LIST_NODES, 0, NULL, NULL, NULL },
302
	{ "SvcMDs", SNIPPET_LIST_NODES, 0, NULL, NULL, NULL },
303
#endif
304

  
305 296
	{NULL, 0, 0, NULL, NULL, NULL}
306 297
};
307 298

  
......
341 332
				(GHFunc)add_provider_childnode, t);
342 333
	}
343 334

  
344
#ifdef LASSO_WSF_ENABLED
345
	lasso_server_dump_id_wsf_services(server, xmlnode);
346
	lasso_server_dump_id_wsf20_svcmds(server, xmlnode);
347
#endif
348

  
349 335
	xmlCleanNs(xmlnode);
350 336
	lasso_transfer_xml_node(ret_xmlnode, xmlnode);
351 337

  
......
422 408
				t2 = xmlSecGetNextElementNode(t2->next);
423 409
			}
424 410
		}
425

  
426
#ifdef LASSO_WSF_ENABLED
427
		lasso_server_init_id_wsf_services(server, t);
428
		lasso_server_init_id_wsf20_svcmds(server, t);
429
#endif
430

  
431 411
		t = xmlSecGetNextElementNode(t->next);
432 412
	}
433 413

  
lasso/id-ff/session.c
43 43
#include <xmlsec/xmltree.h>
44 44
#include <xmlsec/base64.h>
45 45

  
46
#ifdef LASSO_WSF_ENABLED
47
#include "../id-wsf-2.0/sessionprivate.h"
48
#endif
49

  
50 46
static gboolean lasso_match_name_id(LassoNode *a, LassoNode *b);
51 47

  
52 48
struct _NidAndSessionIndex {
......
355 351
	if (ret != 0) {
356 352
		return ret;
357 353
	}
358
	/* ID-WSF specific need */
359
	if (LASSO_IS_SAML_ASSERTION(assertion)) {
360
		LassoSamlAssertion *saml_assertion = LASSO_SAML_ASSERTION(assertion);
361
		if (saml_assertion->Advice) {
362
			LassoSamlAdvice *advice = saml_assertion->Advice;
363
			LassoSamlAssertion *advice_assertion = (LassoSamlAssertion*)advice->Assertion;
364
			if (LASSO_IS_SAML_ASSERTION(advice_assertion)) {
365
				xmlNode *node = lasso_node_get_original_xmlnode(&advice_assertion->parent);
366
				if (xmlSecCheckNodeName(node, (xmlChar*)"Assertion", (xmlChar*)LASSO_SAML_ASSERTION_HREF)) {
367
					xmlChar *id = xmlGetProp(node, (xmlChar*)"AssertionID");
368
					ret = lasso_session_add_assertion_with_id(session, (char*)id, node);
369
					xmlFree(id);
370
				}
371
			}
372
		}
373
	}
374

  
375 354
	session->is_dirty = TRUE;
376 355

  
377 356
	return ret;
......
606 585
	{
607 586
		return FALSE;
608 587
	}
609
#ifdef LASSO_WSF_ENABLED
610
	if (g_hash_table_size(session->eprs)) {
611
		return FALSE;
612
	}
613
#endif
614 588

  
615 589
	return TRUE;
616 590
}
......
818 792
				(GHFunc)xmlnode_add_assertion_nid_and_session_indexes, &context);
819 793
	}
820 794

  
821
#ifdef LASSO_WSF_ENABLED
822
	lasso_session_id_wsf2_dump_eprs(session, xmlnode);
823
#endif
824

  
825 795
	return xmlnode;
826 796
}
827 797

  
......
950 920
			init_from_xml_nid_and_session_index(node, t);
951 921
		}
952 922

  
953
#ifdef LASSO_WSF_ENABLED
954
	lasso_session_id_wsf2_init_eprs(session, t);
955
#endif
956

  
957 923
		t = t->next;
958 924
	}
959 925
	return 0;
......
981 947
	lasso_release_ghashtable(session->private_data->assertions_by_id);
982 948
	lasso_release_ghashtable(session->private_data->nid_and_session_indexes);
983 949

  
984
#ifdef LASSO_WSF_ENABLED
985
	lasso_release_ghashtable(session->private_data->eprs);
986
#endif
987

  
988 950
	G_OBJECT_CLASS(parent_class)->dispose(object);
989 951
}
990 952

  
......
1011 973
	session->private_data->nid_and_session_indexes = g_hash_table_new_full(g_str_hash,
1012 974
			g_str_equal, (GDestroyNotify)g_free,
1013 975
			(GDestroyNotify)lasso_release_list_of_nid_an_session_index);
1014
#ifdef LASSO_WSF_ENABLED
1015
	session->private_data->eprs = g_hash_table_new_full(g_str_hash, g_str_equal,
1016
			(GDestroyNotify)g_free,
1017
			(GDestroyNotify)g_object_unref);
1018
#endif
1019 976
}
1020 977

  
1021 978
static void
lasso/id-ff/sessionprivate.h
41 41
	GHashTable *status; /* hold temporary response status for sso-art */
42 42
	GHashTable *assertions_by_id;
43 43
	GHashTable *nid_and_session_indexes;
44
#ifdef LASSO_WSF_ENABLED
45
	GHashTable *eprs;
46
#endif
47 44
};
48 45

  
49 46
#define LASSO_SESSION_GET_PRIVATE(o) \
lasso/id-wsf-2.0/Makefile.am
1
MAINTAINERCLEANFILES = Makefile.in
2
liblassoincludedir = $(includedir)/lasso/id-wsf-2.0
3

  
4
AM_CPPFLAGS = \
5
	-I$(top_builddir) \
6
	-I$(top_srcdir) \
7
	$(LASSO_CORE_CFLAGS) \
8
	-DG_LOG_DOMAIN=\"lasso\"
9

  
10
noinst_LTLIBRARIES = liblasso-id-wsf2.la
11

  
12
lasso_private_h_sources = \
13
	private.h \
14
	serverprivate.h \
15
	sessionprivate.h \
16
	idwsf2_helper.h
17

  
18
liblasso_id_wsf2_la_SOURCES = \
19
	server.c \
20
	session.c \
21
	identity.c \
22
	discovery.c \
23
	data_service.c \
24
	profile.c \
25
	saml2_login.c \
26
	soap_binding.c \
27
	idwsf2_helper.c
28

  
29
liblassoinclude_HEADERS = \
30
	id_wsf_2.h \
31
	discovery.h \
32
	data_service.h \
33
	profile.h \
34
	identity.h \
35
	server.h \
36
	session.h \
37
	soap_binding.h \
38
	saml2_login.h
39

  
40
EXTRA_DIST = $(lasso_private_h_sources)
lasso/id-wsf-2.0/data_service.c
1
/* $Id: idwsf2_data_service.c 3101 2007-05-30 11:40:10Z dlaniel $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
/**
25
 * SECTION:idwsf2_data_service
26
 * @short_description: ID-WSF 2.0 Data Service profile
27
 *
28
 * DataService allows Attribute Consumers (WSC) to request an Attribute Provider (WSP) to get
29
 * or modify data about users with their consent.
30
 */
31

  
32
#include "../xml/private.h"
33
#include <libxml/xpath.h>
34
#include <libxml/xpathInternals.h>
35

  
36
#include "data_service.h"
37
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
38

  
39
#include "../xml/id-wsf-2.0/disco_service_type.h"
40
#include "../xml/id-wsf-2.0/dstref_query.h"
41
#include "../xml/id-wsf-2.0/dstref_query_response.h"
42
#include "../xml/id-wsf-2.0/dstref_data.h"
43
#include "../xml/id-wsf-2.0/util_status.h"
44
#include "../xml/id-wsf-2.0/util_response.h"
45
#include "../xml/id-wsf-2.0/sb2_redirect_request.h"
46
#include "../xml/id-wsf-2.0/dstref_modify.h"
47
#include "../xml/id-wsf-2.0/dstref_modify_item.h"
48
#include "../xml/id-wsf-2.0/dstref_modify_response.h"
49
#include "../xml/id-wsf-2.0/dstref_create.h"
50
#include "../xml/id-wsf-2.0/dstref_delete.h"
51

  
52
#include "../xml/soap-1.1/soap_envelope.h"
53
#include "../xml/soap-1.1/soap_fault.h"
54
#include "../xml/private.h"
55
#include "../utils.h"
56
#include "private.h"
57
#include "idwsf2_helper.h"
58
#include "soap_binding.h"
59

  
60
struct _LassoIdWsf2DataServicePrivate
61
{
62
	gboolean dispose_has_run;
63
	GList *query_items; /* of LassoIdWsf2DstRefQueryItem */
64
	GList *query_datas; /* of LassoIdWsf2DstRefData */
65
	GList *modify_items; /* of LassoIdWsf2DstRefModifyItem */
66
	gchar *service_type;
67
	gchar *service_type_prefix;
68
	GHashTable *namespaces;
69
};
70

  
71
extern GHashTable *idwsf2_dst_services_by_prefix; /* cf xml/xml.c */
72

  
73
#define lasso_idwsf2_data_service_set_dst_service_type(dst_node, service_type, prefix) \
74
	lasso_assign_string(dst_node->hrefServiceType, service_type); \
75
	lasso_assign_string(dst_node->prefixServiceType, prefix); \
76

  
77
static void
78
lasso_idwsf2_data_service_clean_private_data(LassoIdWsf2DataService *service)
79
{
80
	LassoIdWsf2DataServicePrivate *pdata = service->private_data;
81

  
82
	lasso_release_string(pdata->service_type);
83
	lasso_release_string(pdata->service_type_prefix);
84
	lasso_release_list_of_gobjects(pdata->query_items);
85
	lasso_release_list_of_gobjects(pdata->modify_items);
86
	lasso_release_ghashtable(pdata->namespaces);
87
}
88

  
89

  
90
/**
91
 * lasso_idwsf2_data_service_set_service_type:
92
 * @service: a #LassoIdWsf2DataService object
93
 * @prefix: a prefix to use in producing XML documents
94
 * @service_type: the service type URI
95
 *
96
 * Fix a service type for this @service.
97
 */
98
gint
99
lasso_idwsf2_data_service_set_service_type(LassoIdWsf2DataService *service, const char *prefix,
100
		const char *service_type)
101
{
102
	if (!LASSO_IS_IDWSF2_DATA_SERVICE(service) || lasso_strisempty(prefix)
103
			|| lasso_strisempty(service_type))
104
		return LASSO_PARAM_ERROR_INVALID_VALUE;
105
	lasso_assign_string(service->private_data->service_type_prefix, prefix);
106
	lasso_assign_string(service->private_data->service_type, service_type);
107
	return 0;
108
}
109

  
110
/**
111
 * lasso_idwsf2_data_service_get_service_type:
112
 * @service: a #LassoIdWsf2DataService object
113
 *
114
 * Return the service type of the received request
115
 *
116
 * Return value:(allow-none)(transfer none): the URI of the service type or NULL.
117
 */
118
const char*
119
lasso_idwsf2_data_service_get_service_type(LassoIdWsf2DataService *service)
120
{
121
	if (! LASSO_IS_IDWSF2_DATA_SERVICE(service))
122
		return NULL;
123
	return service->private_data->service_type;
124
}
125

  
126
/**
127
 * lasso_idwsf2_data_service_get_service_type_prefix:
128
 * @service: a #LassoIdWsf2DataService object
129
 *
130
 * Return the service type prefix of the received request
131
 *
132
 * Return value:(allow-none)(transfer none): the URI of the service type prefix or NULL.
133
 */
134
const char*
135
lasso_idwsf2_data_service_get_service_type_prefix(LassoIdWsf2DataService *service)
136
{
137
	if (! LASSO_IS_IDWSF2_DATA_SERVICE(service))
138
		return NULL;
139
	return service->private_data->service_type_prefix;
140
}
141

  
142
static gint
143
lasso_idwsf2_data_service_init_request(LassoIdWsf2DataService *service,
144
		LassoNode *(*constructor)())
145
{
146
	int rc = 0;
147
	LassoNode *request;
148
	LassoSoapEnvelope *envelope;
149
	
150
	lasso_bad_param(IDWSF2_DATA_SERVICE, service);
151
	lasso_release_list_of_gobjects(service->private_data->query_items);
152
	lasso_release_list_of_gobjects(service->private_data->modify_items);
153
	lasso_check_good_rc(lasso_idwsf2_profile_init_request(&service->parent));
154
	request = (LassoNode*)constructor();
155
	envelope = lasso_idwsf2_profile_get_soap_envelope_request(&service->parent);
156
	lasso_assign_new_gobject(service->parent.parent.request, request);
157
	lasso_soap_envelope_add_to_body(envelope, request);
158

  
159
cleanup:
160
	return rc;
161
}
162

  
163
/**
164
 * lasso_idwsf2_data_service_init_query:
165
 * @service: a #LassoIdWsf2DataService
166
 *
167
 * Initialise an ID-WSF 2.0 DataService query request.
168
 *
169
 * Return value: 0 on success; or a negative value otherwise.
170
 **/
171
gint
172
lasso_idwsf2_data_service_init_query(LassoIdWsf2DataService *service)
173
{
174
	return lasso_idwsf2_data_service_init_request(service,
175
			(LassoNode *(*)())lasso_idwsf2_dstref_query_new);
176
}
177

  
178
/**
179
 * lasso_idwsf2_data_service_init_modify:
180
 * @service: a #LassoIdWsf2DataService
181
 *
182
 * Initialise an ID-WSF 2.0 DataService modify request.
183
 *
184
 * Return value: 0 on success; or a negative value otherwise.
185
 **/
186
gint
187
lasso_idwsf2_data_service_init_modify(LassoIdWsf2DataService *service)
188
{
189
	return lasso_idwsf2_data_service_init_request(service,
190
			(LassoNode *(*)())lasso_idwsf2_dstref_modify_new);
191
}
192

  
193
gint
194
lasso_idwsf2_data_service_init_create(LassoIdWsf2DataService *service)
195
{
196
	return lasso_idwsf2_data_service_init_request(service,
197
			(LassoNode *(*)())lasso_idwsf2_dstref_create_new);
198
}
199

  
200
gint
201
lasso_idwsf2_data_service_init_delete(LassoIdWsf2DataService *service)
202
{
203
	return lasso_idwsf2_data_service_init_request(service,
204
			(LassoNode *(*)())lasso_idwsf2_dstref_delete_new);
205
}
206

  
207
/**
208
 * lasso_idwsf2_data_service_get_request_type:
209
 * @service: a #LassoIdWsf2DataService object
210
 *
211
 * Return the type of the currently handled request.
212
 */
213
LassoIdWsf2DataServiceRequestType
214
lasso_idwsf2_data_service_get_request_type(LassoIdWsf2DataService *service)
215
{
216
	GType request_type = 0;
217

  
218
#define check_request_type(a, b) \
219
		if (request_type == a) { \
220
			return b ;\
221
		}
222
	if (! LASSO_IS_IDWSF2_DATA_SERVICE(service))
223
		return LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_UNKNOWN;
224
	request_type = G_TYPE_FROM_INSTANCE(service->parent.parent.request);
225
	check_request_type(LASSO_TYPE_IDWSF2_DSTREF_QUERY,
226
			LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY);
227
	check_request_type(LASSO_TYPE_IDWSF2_DSTREF_MODIFY,
228
			LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY);
229
#undef check_request_type
230
	return LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_UNKNOWN;
231
}
232

  
233
/**
234
 * lasso_idwsf2_data_service_add_query_item:
235
 * @service: a #LassoIdWsf2DataService
236
 * @item_query: a query string
237
 * @item_id:(allow-none): identifier of the queried item, which will allow to retrieve it in the
238
 * response
239
 *
240
 * Add an item in the query request.
241
 *
242
 * Return value: 0 on success; or a negative value otherwise.
243
 **/
244
gint
245
lasso_idwsf2_data_service_add_query_item(LassoIdWsf2DataService *service, const gchar *item_query,
246
	const gchar *item_id)
247
{
248
	LassoIdWsf2DstRefQueryItem *item;
249
	GList *i;
250
	int rc = 0;
251

  
252
	lasso_bad_param(IDWSF2_DATA_SERVICE, service);
253
	lasso_check_non_empty_string(item_query);
254

  
255
	if (item_id == NULL) {
256
		item_id = lasso_build_unique_id(32);
257
	}
258
	/* Check duplicates */
259
	lasso_foreach(i, service->private_data->query_items) {
260
		LassoIdWsf2DstRefQueryItem *old_item = (LassoIdWsf2DstRefQueryItem *)i->data;
261
		if (lasso_strisequal(old_item->parent.parent.itemID,item_id)) {
262
			return LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM;
263
		}
264
	}
265
	item = lasso_idwsf2_dstref_query_item_new_full(item_query, item_id);
266
	lasso_list_add_gobject(service->private_data->query_items, item);
267
cleanup:
268
	return rc;
269
}
270

  
271
/**
272
 * lasso_idwsf2_data_service_add_modify_item:
273
 * @service: a #LassoIdWsf2DataService
274
 * @item_query: XPATH of the item to modify
275
 * @new_data:(allow-none):new value for the selected item
276
 * @overrideAllowed:(allow-none)(default FALSE): FALSE means only allowing to create a new item, but
277
 * not modify existing one, TRUE means allowing to modify existing item
278
 * @item_id:(allow-none): identifier of the item to modify
279
 *
280
 * Add an item in the modification request.
281
 *
282
 * Return value: 0 on success; or a negative value otherwise.
283
 **/
284
gint
285
lasso_idwsf2_data_service_add_modify_item(LassoIdWsf2DataService *service, const gchar *item_query,
286
	xmlNode *new_data, gboolean overrideAllowed, const gchar *item_id)
287
{
288
	LassoIdWsf2DstRefModifyItem *item;
289
	int rc = 0;
290
	GList *i;
291

  
292
	lasso_bad_param(IDWSF2_DATA_SERVICE, service);
293
	lasso_check_non_empty_string(item_query);
294

  
295
	if (item_id == NULL) {
296
		item_id = lasso_build_unique_id(10);
297
	}
298
	lasso_foreach(i, service->private_data->modify_items) {
299
		LassoIdWsf2DstRefModifyItem *old_item = (LassoIdWsf2DstRefModifyItem *)i->data;
300
		if (lasso_strisequal(old_item->id,item_id)) {
301
			return LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM;
302
		}
303
	}
304
	item = lasso_idwsf2_dstref_modify_item_new_full(
305
		item_query, item_id, new_data, overrideAllowed);
306
	lasso_list_add_gobject(service->private_data->modify_items, item);
307

  
308
cleanup:
309
	return rc;
310
}
311

  
312
/**
313
 * lasso_idwsf2_data_service_get_item_ids:
314
 * @service: a #LassoIdWsf2DataService object
315
 *
316
 * Return the list of items ids for the currently handled request.
317
 *
318
 * Return value:(element-type utf8)(transfer full): a list of string ids, or NULL if none is found.
319
 * The caller must free the return value.
320
 */
321
GList*
322
lasso_idwsf2_data_service_get_item_ids(LassoIdWsf2DataService *service)
323
{
324
	GList *i, *result = NULL;
325

  
326
	switch (lasso_idwsf2_data_service_get_request_type(service)) {
327
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY:
328
			lasso_foreach(i, service->private_data->query_items) {
329
				LassoIdWsf2DstRefQueryItem *old_item = (LassoIdWsf2DstRefQueryItem *)i->data;
330
				lasso_list_add_string(result, old_item->parent.parent.itemID);
331
			}
332
			break;
333
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY:
334
			lasso_foreach(i, service->private_data->modify_items) {
335
				LassoIdWsf2DstRefModifyItem *old_item = (LassoIdWsf2DstRefModifyItem *)i->data;
336
				lasso_list_add_string(result, old_item->id);
337
			}
338
			break;
339
		default:
340
			break;
341
	}
342
	return result;
343
}
344

  
345
/**
346
 * lasso_idwsf2_data_service_get_items:
347
 * @service: a #LassoIdWsf2DataService object
348
 *
349
 * Return value:(element-type LassoNode)(transfer none): a list of Query or Modify items, or NULL if
350
 * none is found.
351
 */
352
GList*
353
lasso_idwsf2_data_service_get_items(LassoIdWsf2DataService *service)
354
{
355
	switch (lasso_idwsf2_data_service_get_request_type(service)) {
356
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY:
357
			return service->private_data->query_items;
358
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY:
359
			return service->private_data->modify_items;
360
		default:
361
			break;
362
	}
363
	return NULL;
364
}
365

  
366
/**
367
 * lasso_idwsf2_data_service_get_item:
368
 * @service: a #LassoIdWsf2DataService object
369
 * @item_id: the itemID of the item to return, if NULL try to get the only one item (if there is
370
 * more than one, it returns NULL).
371
 *
372
 * Retrieve a specific item from a request.
373
 *
374
 * Return value:(transfer none)(allow-none): a #LassoIdWsf2DstRefQueryItem or a #LassoIdWsf2DstRefModifyItem object, or NULL if
375
 * no item for the given item_id exists.
376
 */
377
LassoNode*
378
lasso_idwsf2_data_service_get_item(LassoIdWsf2DataService *service,
379
		const char *item_id)
380
{
381
	GList *i;
382

  
383
	switch (lasso_idwsf2_data_service_get_request_type(service)) {
384
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY:
385
			if (item_id == NULL) {
386
				if (g_list_length(service->private_data->query_items) == 1)
387
					return (LassoNode*)service->private_data->query_items->data;
388
				else
389
					return NULL;
390
			}
391
			lasso_foreach(i, service->private_data->query_items) {
392
				LassoIdWsf2DstRefQueryItem *old_item = (LassoIdWsf2DstRefQueryItem *)i->data;
393
				if (lasso_strisequal(old_item->parent.parent.itemID,item_id)) {
394
					return (LassoNode*)old_item;
395
				}
396
			}
397
			break;
398
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY:
399
			if (item_id == NULL) {
400
				if (g_list_length(service->private_data->modify_items) == 1)
401
					return (LassoNode*)service->private_data->modify_items->data;
402
				else
403
					return NULL;
404
			}
405
			lasso_foreach(i, service->private_data->modify_items) {
406
				LassoIdWsf2DstRefModifyItem *old_item = (LassoIdWsf2DstRefModifyItem *)i->data;
407
				if (lasso_strisequal(old_item->id,item_id)) {
408
					return (LassoNode*)old_item;
409
				}
410
			}
411
			break;
412
		default:
413
			break;
414
	}
415
	return NULL;
416
}
417

  
418
/**
419
 * lasso_idwsf2_data_service_add_namespace:
420
 * @service: a #LassoIdWsf2DataService object
421
 *
422
 * Add a new namespace to use for example in XPath elements or in Data or NewData objects.
423
 *
424
 * Return value: 0 if successful, an error code otherwise.
425
 */
426
gint
427
lasso_idwsf2_data_service_add_namespace(LassoIdWsf2DataService *service, const char *prefix,
428
		const char *href)
429
{
430
	if (xmlValidateNCName(BAD_CAST prefix, 0) && ! lasso_strisempty(href))
431
		return LASSO_PARAM_ERROR_INVALID_VALUE;
432

  
433
	if (g_hash_table_lookup(service->private_data->namespaces, prefix) != NULL ||
434
			lasso_strisequal(service->private_data->service_type_prefix,prefix) ||
435
			lasso_strisequal(prefix,LASSO_IDWSF2_DSTREF_PREFIX)) {
436
		return LASSO_PARAM_ERROR_INVALID_VALUE;
437
	}
438

  
439
	g_hash_table_insert(service->private_data->namespaces, g_strdup(prefix), g_strdup(href));
440
	return 0;
441
}
442

  
443
static void
444
add_custom_namespace(const char *prefix, const char *href, LassoNode *node)
445
{
446
	lasso_node_add_custom_namespace(node, prefix, href);
447
}
448

  
449
/**
450
 * lasso_idwsf2_data_service_build_request_msg:
451
 * @service: a #LassoIdWsf2DataService object
452
 * @security_mech_id:(allow-none): the security mechanism to employ, default is Bearer mechanism.
453
 *
454
 * Build the request message.
455
 *
456
 * Return value: 0 if successful, an error code otherwise.
457
 */
458
gint
459
lasso_idwsf2_data_service_build_request_msg(LassoIdWsf2DataService *service,
460
		const char *security_mech_id)
461
{
462
	int rc = 0;
463
	LassoSoapEnvelope *envelope;
464
	LassoIdWsf2DstRefQuery *query = (LassoIdWsf2DstRefQuery*)service->parent.parent.request;
465
	LassoIdWsf2DstRefModify *modify = (LassoIdWsf2DstRefModify*)service->parent.parent.request;
466
	const char *service_type = NULL;
467
	const char *prefix = NULL;
468

  
469
	lasso_bad_param(IDWSF2_DATA_SERVICE, service);
470

  
471
	envelope = lasso_idwsf2_profile_get_soap_envelope_request(&service->parent);
472
	service_type = lasso_wsa_endpoint_reference_get_idwsf2_service_type(
473
			lasso_idwsf2_profile_get_epr(&service->parent));
474
	if (service_type) {
475
		const char *prefix = lasso_get_prefix_for_idwsf2_dst_service_href(service_type);
476
		if (! prefix)
477
			prefix = "dstref";
478
	} else {
479
		service_type = service->private_data->service_type;
480
		prefix = service->private_data->service_type_prefix;
481
	}
482

  
483
	switch (lasso_idwsf2_data_service_get_request_type(service)) {
484
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY:
485
			if (service_type) {
486
				lasso_idwsf2_data_service_set_dst_service_type(query, service_type, prefix);
487
			}
488
			lasso_assign_list_of_gobjects(query->QueryItem, service->private_data->query_items);
489
			g_hash_table_foreach(service->private_data->namespaces,
490
					(GHFunc)add_custom_namespace,
491
					query);
492
			break;
493
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY:
494
			if (service_type) {
495
				lasso_idwsf2_data_service_set_dst_service_type(modify, service_type, prefix);
496
			}
497
			lasso_assign_list_of_gobjects(modify->ModifyItem, service->private_data->modify_items);
498
			break;
499
		default:
500
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_REQUEST);
501
			break;
502
	}
503
	rc = lasso_idwsf2_profile_build_request_msg(&service->parent, security_mech_id);
504
cleanup:
505
	return rc;
506
}
507

  
508
static gint
509
lasso_idwsf2_data_service_process_query(LassoIdWsf2DataService *service)
510
{
511
	LassoIdWsf2DstRefQuery *query;
512
	GList *i;
513
	int rc = 0;
514

  
515
	query = (LassoIdWsf2DstRefQuery*)service->parent.parent.request;
516
	lasso_check_good_rc(lasso_idwsf2_data_service_set_service_type(
517
			service,
518
			query->prefixServiceType,
519
			query->hrefServiceType));
520

  
521
	/* Parse QueryItems to get a list of Query strings */
522
	/* FIXME: extract TestItems */
523
	lasso_foreach(i, query->QueryItem)
524
	{
525
		LassoIdWsf2DstRefQueryItem *item = (LassoIdWsf2DstRefQueryItem *)i->data;
526
		/* FIXME: check more query items invariants. */
527
		if (! LASSO_IS_IDWSF2_DSTREF_QUERY_ITEM(item)) {
528
			lasso_release_list_of_gobjects(service->private_data->query_items);
529
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_REQUEST);
530
		}
531
		lasso_list_add_gobject(service->private_data->query_items,
532
				item);
533
	}
534
cleanup:
535
	return rc;
536
}
537

  
538
static gint
539
lasso_idwsf2_data_service_process_modify(LassoIdWsf2DataService *service)
540
{
541
	LassoIdWsf2DstRefModify *modify;
542
	GList *i;
543
	int rc = 0;
544

  
545
	modify = (LassoIdWsf2DstRefModify*)service->parent.parent.request;
546
	lasso_foreach(i, modify->ModifyItem)
547
	{
548
		LassoIdWsf2DstRefModifyItem *item = (LassoIdWsf2DstRefModifyItem*)i->data;
549
		/* FIXME: check more Modify Item invariants */
550
		if (! LASSO_IS_IDWSF2_DSTREF_MODIFY_ITEM(item)) {
551
			lasso_release_list_of_gobjects(service->private_data->modify_items);
552
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_REQUEST);
553
		}
554
		lasso_list_add_gobject(service->private_data->modify_items, item);
555
	}
556
cleanup:
557
	return rc;
558
}
559

  
560
/**
561
 * lasso_idwsf2_data_service_process_request_msg:
562
 * @service: a #LassoIdWsf2DataService object
563
 * @msg: the message string
564
 *
565
 * Process a newly received requests.
566
 */
567
gint
568
lasso_idwsf2_data_service_process_request_msg(LassoIdWsf2DataService *service, const char *msg)
569
{
570
	int rc = 0;
571

  
572
	lasso_bad_param(IDWSF2_DATA_SERVICE, service);
573

  
574
	lasso_check_good_rc(lasso_idwsf2_profile_process_request_msg(&service->parent, msg));
575
	lasso_idwsf2_data_service_clean_private_data(service);
576
	switch (lasso_idwsf2_data_service_get_request_type(service)) {
577
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY:
578
			rc = lasso_idwsf2_data_service_process_query(service);
579
			break;
580
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY:
581
			rc = lasso_idwsf2_data_service_process_modify(service);
582
			break;
583
		default:
584
			rc = LASSO_PROFILE_ERROR_INVALID_REQUEST;
585
			break;
586
	}
587
	if (rc == LASSO_PROFILE_ERROR_INVALID_REQUEST) {
588
		lasso_idwsf2_data_service_set_status_code(service,
589
				LASSO_DST2_STATUS_CODE1_FAILED,
590
				"InvalidRequest");
591
	}
592
cleanup:
593
	return rc;
594
}
595

  
596
/**
597
 * lasso_idwsf2_data_service_validate_request:
598
 * @service: a #LassoIdWsf2DataService object
599
 *
600
 * Initialize a new response object corresponding to the current request. If not request if found or
601
 * the request is invalid, a failure response is created.
602
 *
603
 * Return value: 0 if successful, or LASSO_PROFILE_ERROR_INVALID_REQUEST.
604
 */
605
gint
606
lasso_idwsf2_data_service_validate_request(LassoIdWsf2DataService *service)
607
{
608
	LassoIdWsf2DstRefQueryResponse *query_response;
609
	LassoIdWsf2DstRefModifyResponse *modify_response;
610
	LassoNode *response = NULL;
611
	int rc = 0;
612
	const char *service_type = NULL;
613
	const char *prefix = NULL;
614

  
615
	lasso_bad_param(IDWSF2_DATA_SERVICE, service);
616

  
617
	lasso_check_good_rc(lasso_idwsf2_profile_init_response(&service->parent));
618
	if (service_type) {
619
		const char *prefix = lasso_get_prefix_for_idwsf2_dst_service_href(service_type);
620
		if (! prefix)
621
			prefix = "dstref";
622
	} else {
623
		service_type = service->private_data->service_type;
624
		prefix = service->private_data->service_type_prefix;
625
	}
626
	switch (lasso_idwsf2_data_service_get_request_type(service)) {
627
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY:
628
			query_response = lasso_idwsf2_dstref_query_response_new();
629
			if (service_type) {
630
				lasso_idwsf2_data_service_set_dst_service_type(query_response,
631
						service_type, prefix);
632
			}
633
			response = (LassoNode*)query_response;
634
			break;
635
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY:
636
			modify_response = lasso_idwsf2_dstref_modify_response_new();
637
			if (service_type) {
638
				lasso_idwsf2_data_service_set_dst_service_type(modify_response,
639
						service_type, prefix);
640
			}
641
			response = (LassoNode*)modify_response;
642
			break;
643
		default:
644
			lasso_idwsf2_data_service_set_status_code(service,
645
					LASSO_DST2_STATUS_CODE1_FAILED, "InvalidRequest");
646
			return LASSO_PROFILE_ERROR_INVALID_REQUEST;
647
	}
648
	if (response) {
649
		LassoSoapEnvelope *envelope =
650
			lasso_idwsf2_profile_get_soap_envelope_response(&service->parent);
651
		lasso_assign_new_gobject(service->parent.parent.response, response);
652
		lasso_soap_envelope_add_to_body(envelope, response);
653
		lasso_idwsf2_data_service_set_status_code(service, LASSO_DST2_STATUS_CODE1_OK, NULL);
654
	}
655
cleanup:
656
	return rc;
657
}
658

  
659
/**
660
 * lasso_idwsf2_data_service_set_status_code:
661
 * @service: a #LassoIdWsf2DataService
662
 * @status_code: a first level status code
663
 * @status_code2: a second level status code
664
 *
665
 * Set the status code for the current response, if no response exists, it starts one using
666
 * lasso_idwsf2_data_service_validate_request(), if it fails, report a SOAP Fault.
667
 */
668
gint
669
lasso_idwsf2_data_service_set_status_code(LassoIdWsf2DataService *service,
670
		const char *status_code, const char *status_code2)
671
{
672
	LassoNode *response;
673
	LassoIdWsf2UtilStatus **status = NULL;
674
	LassoIdWsf2UtilStatus *new_status = NULL;
675
	int rc = 0;
676

  
677

  
678
	response = service->parent.parent.response;
679
	if (LASSO_IS_IDWSF2_UTIL_RESPONSE(response)) {
680
		switch (lasso_idwsf2_data_service_get_request_type(service)) {
681
			case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY:
682
				status = &LASSO_IDWSF2_UTIL_RESPONSE(response)->Status;
683
				break;
684
			case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY:
685
				status = &LASSO_IDWSF2_UTIL_RESPONSE(response)->Status;
686
				break;
687
			default:
688
				break;
689
		}
690
	}
691

  
692
	new_status = lasso_idwsf2_util_status_new_with_code(status_code, status_code2);
693

  
694
	if (! LASSO_IS_IDWSF2_UTIL_RESPONSE(response) || ! status) {
695
		GList details = { .data = new_status, .next = NULL, .prev = NULL };
696

  
697
		lasso_check_good_rc(lasso_idwsf2_profile_init_soap_fault_response(&service->parent,
698
					LASSO_SOAP_FAULT_CODE_CLIENT, "Unknown Request Type",
699
					&details));
700
	} else {
701
		lasso_assign_gobject(*status, new_status);
702
	}
703
cleanup:
704
	lasso_release_gobject(new_status);
705
	return rc;
706
}
707

  
708
/**
709
 * lasso_idwsf2_data_service_set_query_item_result:
710
 * @service: a #LassoIdWsf2DataService object
711
 * @item_id:(allow-none): target a certain QueryItem if NULL, means there is only one query item
712
 * @xml_data:(allow-none): the data to add
713
 * @add:(allow-none)(default FALSE): add data to existing datas
714
 *
715
 * Set result data for a certain query-item.
716
 */
717
gint
718
lasso_idwsf2_data_service_set_query_item_result(LassoIdWsf2DataService *service,
719
		const char *item_id, xmlNode *xml_data, gboolean add)
720
{
721
	LassoIdWsf2DstRefQueryItem *item;
722
	LassoIdWsf2DstRefData *data;
723
	int rc = 0;
724

  
725
	if (lasso_idwsf2_data_service_get_request_type(service)
726
			!= LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY) {
727
		goto_cleanup_with_rc(LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND);
728
	}
729
	lasso_bad_param(IDWSF2_DATA_SERVICE, service);
730
	item = (LassoIdWsf2DstRefQueryItem*)lasso_idwsf2_data_service_get_item(service, item_id);
731
	if (! LASSO_IS_IDWSF2_DSTREF_QUERY_ITEM(item)) {
732
		goto_cleanup_with_rc(LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND);
733
	}
734
	data = lasso_idwsf2_data_service_get_query_item_result(service, item_id);
735
	if (data == NULL) {
736
		data = lasso_idwsf2_dstref_data_new();
737
	}
738
	if (xml_data) {
739
		if (! add) {
740
			lasso_release_list_of_xml_node(data->parent.parent.any);
741
		}
742
		lasso_list_add_xml_node(data->parent.parent.any, xml_data);
743
	}
744
	if (item_id) {
745
		lasso_assign_string(data->parent.itemIDRef, item_id);
746
	}
747
	if (g_list_find(service->private_data->query_datas, data) == NULL) {
748
		lasso_list_add_gobject(service->private_data->query_datas, data);
749
	}
750
cleanup:
751
	return rc;
752
}
753

  
754
/**
755
 * lasso_idwsf2_data_service_build_response_msg:
756
 * @service: a #LassoIdWsf2DataService object
757
 *
758
 * Build the response message corresponding to the current request.
759
 *
760
 * Return value: 0 if successfull, an error code otherwise.
761
 */
762
gint
763
lasso_idwsf2_data_service_build_response_msg(LassoIdWsf2DataService *service)
764
{
765
	LassoIdWsf2DstRefQueryResponse *query_response;
766
	GList *datas;
767
	int rc = 0;
768

  
769
	lasso_bad_param(IDWSF2_DATA_SERVICE, service);
770
	if (! LASSO_IS_SOAP_FAULT(service->parent.parent.response)) {
771
		switch (lasso_idwsf2_data_service_get_request_type(service)) {
772
			case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY:
773
				goto_cleanup_if_fail_with_rc(
774
						LASSO_IS_IDWSF2_DSTREF_QUERY_RESPONSE(
775
							service->parent.parent.response),
776
						LASSO_PROFILE_ERROR_INVALID_RESPONSE);
777
				query_response = (LassoIdWsf2DstRefQueryResponse*)service->parent.parent.response;
778
				datas = lasso_idwsf2_data_service_get_query_item_results(service);
779
				lasso_assign_list_of_gobjects(query_response->Data, datas);
780
				break;
781
			case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY:
782
				goto_cleanup_with_rc(LASSO_ERROR_UNIMPLEMENTED);
783
				break;
784
			default:
785
				break;
786
		}
787
	}
788
	rc = lasso_idwsf2_profile_build_response_msg(&service->parent);
789
cleanup:
790
	return rc;
791
}
792

  
793
static gint
794
_lasso_idwsf2_data_service_process_query_response(LassoIdWsf2DataService * service,
795
		LassoIdWsf2DstRefQueryResponse *response)
796
{
797
	int rc = 0;
798

  
799
	goto_cleanup_if_fail_with_rc(LASSO_IS_IDWSF2_DSTREF_QUERY_RESPONSE(response),
800
			LASSO_PROFILE_ERROR_INVALID_RESPONSE);
801

  
802
	if (service->private_data) {
803
		lasso_assign_list_of_gobjects(service->private_data->query_datas, response->Data);
804
	}
805
cleanup:
806
	return rc;
807
}
808

  
809
/**
810
 * lasso_idwsf2_data_service_process_response_msg:
811
 * @service: a #LassoIdWsf2DataService object
812
 * @msg: (allow-none): the message content
813
 *
814
 * Process a received SOAP message response.
815
 *
816
 * Return value: 0 if successful, an error code otherwise.
817
 */
818
gint
819
lasso_idwsf2_data_service_process_response_msg(
820
	LassoIdWsf2DataService *service, const char *msg)
821
{
822
	LassoIdWsf2DstRefQueryResponse *query_response;
823
	LassoIdWsf2UtilStatus *status;
824
	int rc = 0;
825

  
826
	lasso_bad_param(IDWSF2_DATA_SERVICE, service);
827

  
828
	lasso_check_good_rc(lasso_idwsf2_profile_process_response_msg(&service->parent, msg));
829

  
830
	status = lasso_idwsf2_data_service_get_response_status(service);
831

  
832
	if (! status || ! status->code) {
833
		goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_STATUS_CODE);
834
	}
835
	if (lasso_strisequal(status->code,LASSO_DST2_STATUS_CODE1_FAILED)) {
836
		goto_cleanup_with_rc(LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS);
837
	}
838
	if (lasso_strisequal(status->code,LASSO_DST2_STATUS_CODE1_PARTIAL)) {
839
		rc = LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE;
840
	}
841
	if (lasso_strisnotequal(status->code,LASSO_DST2_STATUS_CODE1_OK)) {
842
		rc = LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE;
843
	}
844

  
845
	switch (lasso_idwsf2_data_service_get_request_type(service)) {
846
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY:
847
			query_response = (LassoIdWsf2DstRefQueryResponse*)service->parent.parent.response;
848
			lasso_check_good_rc(_lasso_idwsf2_data_service_process_query_response(service, query_response));
849
			break;
850
		case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY:
851
			rc = LASSO_ERROR_UNIMPLEMENTED;
852
			break;
853
		default:
854
			rc = LASSO_ERROR_UNDEFINED;
855
			break;
856
	}
857

  
858
cleanup:
859
	return rc;
860
}
861

  
862
/**
863
 * lasso_idwsf2_data_service_get_response_status:
864
 * @service: a #LassoIdWsf2UtilStatus object
865
 *
866
 * Return the status from the current response.
867
 *
868
 * Return value:(transfer none)(allow-none): a #LassoIdWsf2UtilStatus object, or NULL.
869
 */
870
LassoIdWsf2UtilStatus*
871
lasso_idwsf2_data_service_get_response_status(LassoIdWsf2DataService *service)
872
{
873
	LassoIdWsf2UtilResponse *response;
874
	LassoSoapFault *fault;
875

  
876
	response = (void*)(fault = (void*)service->parent.parent.response);
877
	if (LASSO_IS_IDWSF2_UTIL_RESPONSE(response)) {
878
		return response->Status;
879
	}
880
	if (LASSO_IS_SOAP_FAULT(fault)) {
881
		if (LASSO_IS_SOAP_DETAIL(fault->Detail) && fault->Detail->any
882
				&& LASSO_IS_IDWSF2_UTIL_STATUS(fault->Detail->any->data)) {
883
			return (LassoIdWsf2UtilStatus*)fault->Detail->any->data;
884
		}
885
	}
886
	return NULL;
887
}
888

  
889
/**
890
 * lasso_idwsf2_data_service_get_query_item_result:
891
 * @service: a #LassoIdWsf2DataService object
892
 * @item_id:(allow-none): an item_id or NULL if only one data is present
893
 *
894
 * Return value:(allow-none)(transfer none): a #LassoIdWsf2DstRefData or NULL if none is found.
895
 */
896
LassoIdWsf2DstRefData*
897
lasso_idwsf2_data_service_get_query_item_result(LassoIdWsf2DataService *service,
898
		const char *item_id)
899
{
900
	GList *i;
901

  
902
	if (! LASSO_IS_IDWSF2_DATA_SERVICE(service))
903
		return NULL;
904
	if (! item_id) {
905
		if (g_list_length(service->private_data->query_datas) == 1) {
906
			return (LassoIdWsf2DstRefData*)service->private_data->query_datas->data;
907
		}
908
		return NULL;
909
	}
910
	lasso_foreach(i, service->private_data->query_datas) {
911
		LassoIdWsf2DstRefData *data = (LassoIdWsf2DstRefData*)i->data;
912
		if (lasso_strisequal(data->parent.itemIDRef,item_id)) {
913
			return data;
914
		}
915
	}
916
	return NULL;
917
}
918

  
919
/**
920
 * lasso_idwsf2_data_service_get_query_item_result_content:
921
 * @service: a #LassoIdWsf2DataService object
922
 * @item_id:(allow-none): the identifier of the result asked, if NULL and there is only one respone,
923
 * returns it.
924
 *
925
 * Returns the text content of the query item result identified by @item_id or the only query item
926
 * result if @item_id is NULL.
927
 * <para>If @item_id is NULL and there is multiple results, returns NULL.</para>
928
 *
929
 * Return value:(transfer full): the text content of the query item result.
930
 */
931
char*
932
lasso_idwsf2_data_service_get_query_item_result_content(LassoIdWsf2DataService *service,
933
		const char *item_id)
934
{
935
	LassoIdWsf2DstRefData *data = NULL;
936
	LassoIdWsf2DstRefAppData *app_data = NULL;
937
	GList *i = NULL;
938
	GString *gstr = NULL;
939
	char *result = NULL;
940

  
941
	data = lasso_idwsf2_data_service_get_query_item_result(service, item_id);
942
	if (! data)
943
		return NULL;
944
	app_data = (LassoIdWsf2DstRefAppData*)data;
945
	gstr = g_string_sized_new(128);
946
	lasso_foreach(i, app_data->any) {
947
		xmlNode *node = (xmlNode*)i->data;
948
		xmlChar *content;
949
		content = xmlNodeGetContent(node);
950
		g_string_append(gstr, (char*)content);
951
		xmlFree(content);
952
	}
953
	result = gstr->str;
954
	lasso_release_gstring(gstr, FALSE);
955
	return result;
956
}
957

  
958
/**
959
 * lasso_idwsf2_data_service_get_query_item_results:
960
 * @service: a #LassoIdWsf2DataService object
961
 *
962
 * Return value:(allow-none)(transfer none)(element-type LassoIdWsf2DstRefData): the list of
963
 * #LassoIdWsf2DstRefData or NULL if none is found.
964
 */
965
GList*
966
lasso_idwsf2_data_service_get_query_item_results(LassoIdWsf2DataService *service)
967
{
968

  
969
	if (LASSO_IS_IDWSF2_DATA_SERVICE(service) && service->private_data) {
970
		return service->private_data->query_datas;
971
	}
972
	return NULL;
973
}
974

  
975
static LassoNodeClass *parent_class = NULL;
976

  
977
static void
978
dispose(GObject *object)
979
{
980
	LassoIdWsf2DataService *service = LASSO_IDWSF2_DATA_SERVICE(object);
981
	LassoIdWsf2DataServicePrivate *pdata = service->private_data;
982

  
983
	if (!pdata || pdata->dispose_has_run == TRUE)
984
		return;
985
	pdata->dispose_has_run = TRUE;
986

  
987
	lasso_idwsf2_data_service_clean_private_data(service);
988
	G_OBJECT_CLASS(parent_class)->dispose(object);
989
}
990

  
991
static void
992
finalize(GObject *object)
993
{
994
	LassoIdWsf2DataService *service = LASSO_IDWSF2_DATA_SERVICE(object);
995
	lasso_release(service->private_data);
996
	service->private_data = NULL;
997
	G_OBJECT_CLASS(parent_class)->finalize(object);
998
}
999

  
1000
static void
1001
instance_init(LassoIdWsf2DataService *service)
1002
{
1003
	service->private_data = g_new0(LassoIdWsf2DataServicePrivate, 1);
1004
	service->private_data->namespaces = g_hash_table_new_full(g_str_hash, g_str_equal,
1005
			(GDestroyNotify)g_free, (GDestroyNotify)g_free);
1006
}
1007

  
1008
static void
1009
class_init(LassoIdWsf2DataServiceClass *klass, void *unused G_GNUC_UNUSED)
1010
{
1011
	parent_class = g_type_class_peek_parent(klass);
1012

  
1013
	lasso_node_class_set_nodename(LASSO_NODE_CLASS(klass), "IdWsf2DataService");
1014
	lasso_node_class_set_ns(LASSO_NODE_CLASS(klass), LASSO_LASSO_HREF, LASSO_LASSO_PREFIX);
1015
	G_OBJECT_CLASS(klass)->dispose = dispose;
1016
	G_OBJECT_CLASS(klass)->finalize = finalize;
1017
}
1018

  
1019
GType
1020
lasso_idwsf2_data_service_get_type()
1021
{
1022
	static GType this_type = 0;
1023

  
1024
	if (!this_type) {
1025
		static const GTypeInfo this_info = {
1026
			sizeof(LassoIdWsf2DataServiceClass),
1027
			NULL,
1028
			NULL,
1029
			(GClassInitFunc) class_init,
1030
			NULL,
1031
			NULL,
1032
			sizeof(LassoIdWsf2DataService),
1033
			0,
1034
			(GInstanceInitFunc) instance_init,
1035
			NULL
1036
		};
1037

  
1038
		this_type = g_type_register_static(LASSO_TYPE_IDWSF2_PROFILE,
1039
				"LassoIdWsf2DataService", &this_info, 0);
1040
	}
1041
	return this_type;
1042
}
1043

  
1044

  
1045
/**
1046
 * lasso_idwsf2_data_service_new:
1047
 * @server:(allow-none): a #LassoServer object, for resolving ProviderIDs
1048
 *
1049
 * Create a new #LassoIdWsf2DataService.
1050
 *
1051
 * Return value: a newly created #LassoIdWsf2DataService object
1052
 **/
1053
LassoIdWsf2DataService*
1054
lasso_idwsf2_data_service_new(LassoServer *server)
1055
{
1056
	LassoIdWsf2DataService *service;
1057

  
1058
	service = g_object_new(LASSO_TYPE_IDWSF2_DATA_SERVICE, NULL);
1059
	service->parent.parent.server = lasso_ref(server);
1060

  
1061
	return service;
1062
}
lasso/id-wsf-2.0/data_service.h
1
/* $Id: idwsf2_data_service.h 2736 2007-05-30 17:59:38Z dlaniel $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_DATA_SERVICE_H__
25
#define __LASSO_IDWSF2_DATA_SERVICE_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29

  
30
#endif /* __cplusplus */
31

  
32
#include "profile.h"
33
#include "../xml/xml.h"
34
#include "../xml/id-wsf-2.0/dstref_query_item.h"
35
#include "../xml/id-wsf-2.0/util_status.h"
36
#include "../xml/id-wsf-2.0/dstref_data.h"
37
#include "../xml/ws/wsa_endpoint_reference.h"
38

  
39

  
40
#define LASSO_TYPE_IDWSF2_DATA_SERVICE (lasso_idwsf2_data_service_get_type())
41
#define LASSO_IDWSF2_DATA_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
42
	   LASSO_TYPE_IDWSF2_DATA_SERVICE, LassoIdWsf2DataService))
43
#define LASSO_IDWSF2_DATA_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
44
	   LASSO_TYPE_IDWSF2_DATA_SERVICE, LassoIdWsf2DataServiceClass))
45
#define LASSO_IS_IDWSF2_DATA_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
46
	   LASSO_TYPE_IDWSF2_DATA_SERVICE))
47
#define LASSO_IS_IDWSF2_DATA_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
48
	   LASSO_TYPE_IDWSF2_DATA_SERVICE))
49
#define LASSO_IDWSF2_DATA_SERVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), \
50
	   LASSO_TYPE_IDWSF2_DATA_SERVICE, LassoIdWsf2DataServiceClass))
51

  
52
typedef struct _LassoIdWsf2DataService LassoIdWsf2DataService;
53
typedef struct _LassoIdWsf2DataServiceClass LassoIdWsf2DataServiceClass;
54
typedef struct _LassoIdWsf2DataServicePrivate LassoIdWsf2DataServicePrivate;
55

  
56
struct _LassoIdWsf2DataService {
57
	LassoIdWsf2Profile parent;
58

  
59
	/*< private >*/
60
	LassoIdWsf2DataServicePrivate *private_data;
61
};
62

  
63
struct _LassoIdWsf2DataServiceClass {
64
	LassoIdWsf2ProfileClass parent;
65
};
66

  
67
typedef enum {
68
	LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_UNKNOWN,
69
	LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY,
70
	LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY,
71
	LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_CREATE,
72
	LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_DELETE
73
} LassoIdWsf2DataServiceRequestType;
74

  
75
LASSO_EXPORT GType lasso_idwsf2_data_service_get_type(void);
76

  
77
/* Service initialization */
78
LASSO_EXPORT LassoIdWsf2DataService* lasso_idwsf2_data_service_new(LassoServer *server);
79

  
80
/* Request initialization */
81
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_init_query(LassoIdWsf2DataService *service);
82
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_init_modify(LassoIdWsf2DataService *service);
83
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_init_create(LassoIdWsf2DataService *service);
84
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_init_delete(LassoIdWsf2DataService *service);
85
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_set_service_type(LassoIdWsf2DataService *service,
86
		const char *prefix, const char *service_type);
87
LASSO_EXPORT const char* lasso_idwsf2_data_service_get_service_type(
88
		LassoIdWsf2DataService *service);
89
LASSO_EXPORT const char* lasso_idwsf2_data_service_get_service_type_prefix(
90
		LassoIdWsf2DataService *service);
91

  
92
/* Manipulate request */
93
LASSO_EXPORT LassoIdWsf2DataServiceRequestType lasso_idwsf2_data_service_get_request_type(
94
		LassoIdWsf2DataService *service);
95
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_add_query_item(
96
	LassoIdWsf2DataService *service, const gchar *item_query, const gchar *item_id);
97
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_add_modify_item(LassoIdWsf2DataService *service,
98
		const gchar *item_query, xmlNode *new_data, gboolean overrideAllowed,
99
		const gchar *item_id);
100
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_add_namespace(LassoIdWsf2DataService *data_service,
101
		const char *prefix, const char *href);
102

  
103
/* Produce request */
104
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_build_request_msg(LassoIdWsf2DataService *service,
105
		const char *security_mech_id);
106

  
107
/* Handle request */
108
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_process_request_msg(LassoIdWsf2DataService *service,
109
		const char *msg);
110
LASSO_EXPORT GList *lasso_idwsf2_data_service_get_item_ids(LassoIdWsf2DataService *data_service);
111
LASSO_EXPORT GList *lasso_idwsf2_data_service_get_items(LassoIdWsf2DataService *data_service);
112
LASSO_EXPORT LassoNode* lasso_idwsf2_data_service_get_item(LassoIdWsf2DataService *data_service,
113
		const char *item_id);
114

  
115
/* Reponse initialization */
116
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_validate_request(LassoIdWsf2DataService *service);
117
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_set_status_code(LassoIdWsf2DataService *service,
118
		const char *status_code, const char *status_code2);
119

  
120
/* Manipulate response */
121
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_set_query_item_result(
122
		LassoIdWsf2DataService *data_service, const char *item_id, xmlNode *xml_data,
123
		gboolean add);
124

  
125
/* Produce response */
126
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_build_response_msg(LassoIdWsf2DataService *service);
127

  
128
/* Handle response */
129
LASSO_EXPORT lasso_error_t lasso_idwsf2_data_service_process_response_msg(
130
	LassoIdWsf2DataService *service, const char *msg);
131
LASSO_EXPORT LassoIdWsf2UtilStatus *lasso_idwsf2_data_service_get_response_status(
132
		LassoIdWsf2DataService *service);
133
LASSO_EXPORT LassoIdWsf2DstRefData* lasso_idwsf2_data_service_get_query_item_result(
134
		LassoIdWsf2DataService *service, const char *item_id);
135
LASSO_EXPORT char* lasso_idwsf2_data_service_get_query_item_result_content(
136
		LassoIdWsf2DataService *service, const char *item_id);
137
LASSO_EXPORT GList* lasso_idwsf2_data_service_get_query_item_results(
138
		LassoIdWsf2DataService *service);
139

  
140
#ifdef __cplusplus
141
}
142
#endif /* __cplusplus */
143

  
144
#endif /* __LASSO_IDWSF2_DATA_SERVICE_H__ */
145

  
lasso/id-wsf-2.0/discovery.c
1
/* $Id: discovery.c,v 1.75 2007/01/03 23:35:17 Exp $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
/**
25
 * SECTION:idwsf2_discovery
26
 * @short_description: ID-WSF 2.0 Discovery Service profile
27
 *
28
 * The Discovery service usually runs on the principal identity provider and
29
 * knowns about resources and services related to the principal.  Attribute
30
 * providers can register themselves as offering resources for an user while
31
 * other services can ask where to find a given resource.
32
 */
33

  
34
#include "../xml/private.h"
35
#include <libxml/xpath.h>
36
#include <libxml/xpathInternals.h>
37

  
38
#include <xmlsec/xmltree.h>
39

  
40
#include "../saml-2.0/saml2_helper.h"
41

  
42
#include "../xml/saml_attribute_value.h"
43
#include "../xml/xml_enc.h"
44

  
45
#include "../xml/soap-1.1/soap_fault.h"
46

  
47
#include "../xml/saml-2.0/saml2_assertion.h"
48
#include "../xml/saml-2.0/samlp2_name_id_policy.h"
49

  
50
#include "../xml/id-wsf-2.0/disco_query.h"
51
#include "../xml/id-wsf-2.0/disco_query_response.h"
52
#include "../xml/id-wsf-2.0/disco_svc_md_query.h"
53
#include "../xml/id-wsf-2.0/disco_svc_md_query_response.h"
54
#include "../xml/id-wsf-2.0/disco_svc_md_register.h"
55
#include "../xml/id-wsf-2.0/disco_svc_md_register_response.h"
56
#include "../xml/id-wsf-2.0/disco_svc_md_replace.h"
57
#include "../xml/id-wsf-2.0/disco_svc_md_replace_response.h"
58
#include "../xml/id-wsf-2.0/disco_svc_md_delete.h"
59
#include "../xml/id-wsf-2.0/disco_svc_md_delete_response.h"
60
#include "../xml/id-wsf-2.0/disco_svc_md_association_query.h"
61
#include "../xml/id-wsf-2.0/disco_svc_md_association_query_response.h"
62
#include "../xml/id-wsf-2.0/disco_svc_md_association_add.h"
63
#include "../xml/id-wsf-2.0/disco_svc_md_association_add_response.h"
64
#include "../xml/id-wsf-2.0/disco_svc_md_association_delete.h"
65
#include "../xml/id-wsf-2.0/disco_svc_md_association_delete_response.h"
66
#include "../xml/id-wsf-2.0/disco_requested_service.h"
67
#include "../xml/id-wsf-2.0/disco_abstract.h"
68
#include "../xml/id-wsf-2.0/disco_provider_id.h"
69
#include "../xml/id-wsf-2.0/disco_service_type.h"
70
#include "../xml/id-wsf-2.0/disco_security_context.h"
71
#include "../xml/id-wsf-2.0/disco_service_context.h"
72
#include "../xml/id-wsf-2.0/disco_endpoint_context.h"
73
#include "../xml/id-wsf-2.0/disco_options.h"
74
#include "../xml/id-wsf-2.0/sec_token.h"
75
#include "../xml/id-wsf-2.0/util_status.h"
76
#include "../xml/id-wsf-2.0/sbf_framework.h"
77

  
78
#include "../xml/ws/wsa_endpoint_reference.h"
79

  
80
#include "../id-ff/server.h"
81
#include "../id-ff/provider.h"
82
#include "../id-ff/providerprivate.h"
83

  
84
#include "discovery.h"
85
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
86
#include "soap_binding.h"
87
#include "idwsf2_helper.h"
88
#include "saml2_login.h"
89
#include "../utils.h"
90

  
91
struct _LassoIdWsf2DiscoveryPrivate
92
{
93
	gboolean dispose_has_run;
94
	GList *metadatas; /* of LassoIdWsf2DiscoSvcMetadata* */
95
	GList *requested_services; /* of LassoIdWsf2DiscoRequestedService */
96
	GList *svcmdids; /* of utf8 */
97
};
98

  
99
#define LASSO_IDWSF2_DISCOVERY_ELEMENT_METADATAS "Metadatas"
100
#define LASSO_IDWSF2_DISCOVERY_ELEMENT_REQUESTED_SERVICES "RequestedServices"
101
#define LASSO_IDWSF2_DISCOVERY_ELEMENT_REQUESTED_SERVICES "RequestedServices"
102

  
103

  
104
static int
105
lasso_idwsf2_discovery_add_identity_to_epr(LassoIdWsf2Discovery *discovery,
106
		LassoWsAddrEndpointReference *epr,
107
		const char *provider_id,
108
		const char *security_mechanism)
109
{
110
	LassoIdentity *identity = discovery->parent.parent.identity;
111
	LassoFederation *federation = NULL;
112
	LassoSaml2Assertion *assertion;
113
	LassoProvider *provider = NULL;
114
	GList security_mechanisms = { .data = (char*)security_mechanism, .next = NULL, .prev = NULL };
115

  
116
	if (! LASSO_IS_IDENTITY(identity))
117
		return LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND;
118

  
119
	federation = lasso_identity_get_federation(identity, provider_id);
120
	if (federation == NULL || ! LASSO_IS_SAML2_NAME_ID(federation->local_nameIdentifier))
121
		return LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND;
122
	provider = lasso_server_get_provider(discovery->parent.parent.server, provider_id);
123
	if (! provider) {
124
		return LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND;
125
	}
126

  
127
	assertion =
128
		lasso_server_create_assertion_as_idwsf2_security_token(discovery->parent.parent.server,
129
				LASSO_SAML2_NAME_ID(federation->local_nameIdentifier),
130
				LASSO_DURATION_HOUR, 2 * LASSO_DURATION_DAY, provider ? TRUE :
131
				FALSE, provider);
132

  
133
	if (assertion == NULL ) {
134
		return LASSO_ERROR_UNDEFINED;
135
	}
136

  
137
	return lasso_wsa_endpoint_reference_add_security_token(epr,
138
			(LassoNode*)assertion, &security_mechanisms);
139
}
140

  
141

  
142

  
143
static LassoWsAddrEndpointReference*
144
lasso_idwsf2_discovery_build_epr(LassoIdWsf2Discovery *discovery,
145
	LassoIdWsf2DiscoSvcMetadata *svc_metadata,
146
	LassoIdWsf2DiscoServiceContext *service_context,
147
	LassoIdWsf2DiscoEndpointContext *endpoint_context)
148
{
149
	LassoIdentity *identity;
150
	LassoWsAddrEndpointReference *epr = NULL;
151
	LassoWsAddrMetadata *metadata = NULL;
152
	LassoIdWsf2DiscoAbstract *abstract;
153
	LassoIdWsf2DiscoProviderID *provider_id;
154
	LassoIdWsf2DiscoServiceType *service_type;
155
	LassoProvider *provider = NULL;
156
	GList *i;
157

  
158

  
159
	if (LASSO_IS_IDENTITY(discovery->parent.parent.identity)) {
160
		identity = discovery->parent.parent.identity;
161
	}
162
	epr = lasso_wsa_endpoint_reference_new();
163
	epr->Address = lasso_wsa_attributed_uri_new_with_string(
164
		(gchar*)endpoint_context->Address->data);
165
	metadata = lasso_wsa_metadata_new();
166
	epr->Metadata = metadata;
167
	/* Abstract */
168
	if (svc_metadata->Abstract) {
169
		abstract = lasso_idwsf2_disco_abstract_new_with_string(svc_metadata->Abstract);
170
		lasso_list_add_new_gobject(metadata->any, abstract);
171
	}
172
	/* ProviderID */
173
	if (svc_metadata->ProviderID) {
174
		provider_id = lasso_idwsf2_disco_provider_id_new_with_string(svc_metadata->ProviderID);
175
		provider = lasso_server_get_provider(discovery->parent.parent.server, svc_metadata->ProviderID);
176
		lasso_list_add_new_gobject(metadata->any, provider_id);
177
	}
178
	/* ServiceType */
179
	lasso_foreach(i, service_context->ServiceType)
180
	{
181
		service_type = lasso_idwsf2_disco_service_type_new_with_string(i->data);
182
		lasso_list_add_new_gobject(metadata->any, service_type);
183
	}
184
	/* Framework */
185
	lasso_foreach(i, endpoint_context->Framework)
186
	{
187
		lasso_list_add_gobject(metadata->any, i->data);
188
	}
189
	/* Identity token */
190
	lasso_foreach(i, endpoint_context->SecurityMechID)
191
	{
192
		int rc = lasso_idwsf2_discovery_add_identity_to_epr(discovery,
193
				epr,
194
				svc_metadata->ProviderID,
195
				(char*)i->data);
196
		if (rc != 0) {
197
			message(G_LOG_LEVEL_WARNING,
198
				"%s cannot add identity token to epr: %s", __func__, lasso_strerror(rc));
199
			lasso_release_gobject(epr);
200
			return NULL;
201
		}
202
	}
203
	return epr;
204
}
205

  
206
static gint
207
lasso_idwsf2_discovery_status2rc(LassoIdWsf2UtilStatus *status)
208
{
209
	size_t i = 0;
210
	static struct {
211
		const char *code;
212
		int rc;
213
	} code2rc[] = {
214
		{ LASSO_IDWSF2_DISCOVERY_STATUS_CODE_OK, 0},
215
		{ LASSO_IDWSF2_DISCOVERY_STATUS_CODE_FAILED, LASSO_IDWSF2_DISCOVERY_ERROR_FAILED },
216
		{ LASSO_IDWSF2_DISCOVERY_STATUS_CODE_FORBIDDEN, LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN },
217
		{ LASSO_IDWSF2_DISCOVERY_STATUS_CODE_DUPLICATE, LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE },
218
		{ LASSO_IDWSF2_DISCOVERY_STATUS_CODE_LOGICAL_DUPLICATE,
219
			LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE },
220
		{ LASSO_IDWSF2_DISCOVERY_STATUS_CODE_NO_RESULTS, LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS },
221
		{ LASSO_IDWSF2_DISCOVERY_STATUS_CODE_NOT_FOUND, LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND }
222
	};
223
	int rc = LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE;
224

  
225
	if (! LASSO_IS_IDWSF2_UTIL_STATUS(status) || ! status->code)
226
		return LASSO_PROFILE_ERROR_MISSING_STATUS_CODE;
227

  
228
	for (i = 0; i < G_N_ELEMENTS(code2rc); ++i) {
229
		if (lasso_strisequal(status->code,code2rc[i].code)) {
230
			rc = code2rc[i].rc;
231
		}
232
	}
233
	/* check second level if necessary */
234
	if (status->Status && rc == LASSO_IDWSF2_DISCOVERY_ERROR_FAILED) {
235
		int rc2 = lasso_idwsf2_discovery_status2rc(status->Status->data);
236
		if (rc2 != LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE &&
237
				rc2 != LASSO_PROFILE_ERROR_MISSING_STATUS_CODE)
238
			rc = rc2;
239
	}
240
	return rc;
241
}
242

  
243
#define declare_init_request(name, request_element_type, constructor) \
244
gint \
245
lasso_idwsf2_discovery_init_##name(LassoIdWsf2Discovery *discovery) \
246
{ \
247
	LassoIdWsf2Profile *idwsf2_profile = NULL; \
248
	LassoProfile *profile = NULL; \
249
	request_element_type *request_element = NULL; \
250
	LassoSoapEnvelope *envelope = NULL; \
251
	int rc = 0; \
252
 \
253
	lasso_bad_param(IDWSF2_DISCOVERY, discovery); \
254
 \
255
	lasso_release_list_of_gobjects(discovery->private_data->metadatas) \
256
	lasso_release_list_of_gobjects(discovery->private_data->requested_services) \
257
	idwsf2_profile = &discovery->parent; \
258
	profile = &idwsf2_profile->parent; \
259
	lasso_check_good_rc(lasso_idwsf2_profile_init_request(idwsf2_profile)); \
260
	request_element = constructor(); \
261
	envelope = lasso_idwsf2_profile_get_soap_envelope_request(idwsf2_profile); \
262
	lasso_assign_new_gobject(profile->request, request_element); \
263
	lasso_soap_envelope_add_to_body(envelope, (LassoNode*)request_element); \
264
 \
265
cleanup: \
266
	return rc; \
267
}
268

  
269
/* Metadata requests */
270

  
271
/**
272
 * lasso_idwsf2_discovery_init_query
273
 * @discovery: a #LassoIdWsf2Discovery
274
 *
275
 * Initialise a request for ID-WSF discovery Query to a discovery service.
276
 *
277
 * Return value: 0 on success; or a negative value otherwise.
278
 **/
279
declare_init_request(query, LassoIdWsf2DiscoQuery, lasso_idwsf2_disco_query_new)
280

  
281
/**
282
 * lasso_idwsf2_discovery_init_metadata_register:
283
 * @discovery: a #LassoIdWsf2Discovery object
284
 *
285
 * Initialise a ID-WSF service metadata registration request to a Discovery service.
286
 *
287
 * Return value: 0 on success; an error code otherwise.
288
 **/
289
declare_init_request(metadata_register, LassoIdWsf2DiscoSvcMDRegister,
290
		lasso_idwsf2_disco_svc_md_register_new);
291

  
292
/**
293
 * lasso_idwsf2_discovery_init_metadata_replace:
294
 * @discovery: a #LassoIdWsf2Discovery object
295
 *
296
 * Initialise a ID-WSF service metadata replace request to a Discovery service.
297
 *
298
 * Return value: 0 on success; an error code otherwise.
299
 **/
300
declare_init_request(metadata_replace, LassoIdWsf2DiscoSvcMDReplace,
301
		lasso_idwsf2_disco_svc_md_replace_new);
302

  
303
/**
304
 * lasso_idwsf2_discovery_init_metadata_query:
305
 * @discovery: a #LassoIdWsf2Discovery object
306
 *
307
 * Initialise a ID-WSF service metadata query request to a Discovery service
308
 *
309
 * Return value: 0 on success; an error code otherwise.
310
 **/
311
declare_init_request(metadata_query, LassoIdWsf2DiscoSvcMDQuery,
312
		lasso_idwsf2_disco_svc_md_query_new);
313

  
314
/**
315
 * lasso_idwsf2_discovery_init_metadata_delete:
316
 * @discovery: a #LassoIdWsf2Discovery object
317
 *
318
 * Initialise a ID-WSF service metadata query request to a Discovery service
319
 *
320
 * Return value: 0 on success; an error code otherwise.
321
 **/
322
declare_init_request(metadata_delete, LassoIdWsf2DiscoSvcMDDelete,
323
		lasso_idwsf2_disco_svc_md_delete_new);
324

  
325
/**
326
 * lasso_idwsf2_discovery_init_metadata_association_add:
327
 * @discovery: a #LassoIdWsf2Discovery
328
 * @svcMDID: identifier of the service metadata the user wants to associate with
329
 *
330
 * Initialise a request to associate a user account to a service metadata, allowing
331
 * a WSC to request this service for data related to this user account.
332
 *
333
 * Return value: 0 on success; or a negative value otherwise.
334
 **/
335
declare_init_request(metadata_association_add, LassoIdWsf2DiscoSvcMDAssociationAdd,
336
		lasso_idwsf2_disco_svc_md_association_add_new)
337

  
338
declare_init_request(metadata_association_delete, LassoIdWsf2DiscoSvcMDAssociationDelete,
339
		lasso_idwsf2_disco_svc_md_association_delete_new)
340
declare_init_request(metadata_association_query, LassoIdWsf2DiscoSvcMDAssociationQuery,
341
		lasso_idwsf2_disco_svc_md_association_query_new)
342

  
343

  
344
/**
345
 * lasso_idwsf2_discovery_add_service_metadata:
346
 * @idwsf2_discovery: a #LassoIdWsf2Discovery object
347
 * @service_metadata: a #LassoIdWsf2DiscoSvcMetadata object to add to the register request.
348
 *
349
 * Add a new metadata object to a request.
350
 *
351
 * Return value: 0 if successful, an error code otherwise.
352
 */
353
int
354
lasso_idwsf2_discovery_add_service_metadata(LassoIdWsf2Discovery *discovery,
355
		LassoIdWsf2DiscoSvcMetadata *service_metadata)
356
{
357
	lasso_bad_param(IDWSF2_DISCOVERY, discovery);
358
	lasso_bad_param(IDWSF2_DISCO_SVC_METADATA, service_metadata);
359
	lasso_list_add_gobject(discovery->private_data->metadatas,
360
			service_metadata);
361
	return 0;
362
}
363

  
364
/**
365
 * lasso_idwsf2_discovery_add_simple_service_metadata:
366
 * @idwsf2_discovery: a #LassoIdWsf2Discovery object
367
 * @abstract:(allow-none): a human description of the service
368
 * @provider_id:(allow-none): the provider id of the service to register, if none is given,
369
 * providerId of the current #LassoServer object is used
370
 * @service_types:(element-type utf8)(allow-none): an array of service type URIs
371
 * @options:(element-type LassoIdWsf2DiscoOptions)(allow-none): an array of option string
372
 * @address:(allow-none): the URI of the service endpoint for the default EndpointContext
373
 * @security_mechanisms:(allow-none)(element-type utf8): the security mechanisms supported by the
374
 * service
375
 *
376
 * Add new metadata to the current Metadata Register request.
377
 *
378
 * Return value: 0 if successful, an error code otherwise.
379
 */
380
int
381
lasso_idwsf2_discovery_add_simple_service_metadata(LassoIdWsf2Discovery *idwsf2_discovery,
382
		const char *abstract, const char *provider_id, GList *service_types, GList *options,
383
		const char *address, GList *security_mechanisms)
384
{
385
	LassoIdWsf2DiscoSvcMetadata *service_metadata;
386
	LassoIdWsf2DiscoServiceContext *service_context;
387
	LassoIdWsf2DiscoEndpointContext *endpoint_context;
388
	int rc = 0;
389

  
390
	lasso_bad_param(IDWSF2_DISCOVERY, idwsf2_discovery);
391
	lasso_check_non_empty_string(address);
392
	service_metadata = lasso_idwsf2_disco_svc_metadata_new();
393
	if (abstract) {
394
		lasso_assign_string(service_metadata->Abstract, abstract);
395
	}
396
	if (provider_id) {
397
		lasso_assign_string(service_metadata->ProviderID, provider_id);
398
	}
399
	service_context = lasso_idwsf2_disco_service_context_new();
400
	if (service_types) {
401
		lasso_assign_list_of_strings(service_context->ServiceType, service_types);
402
	}
403
	if (options) {
404
		lasso_assign_list_of_strings(service_context->Options, options);
405
	}
406
	endpoint_context = lasso_idwsf2_disco_endpoint_context_new();
407
	if (address) {
408
		lasso_list_add_string(endpoint_context->Address, address);
409
	}
410
	lasso_list_add_new_gobject(endpoint_context->Framework,
411
			lasso_idwsf2_sbf_framework_new_full("2.0"));
412
	if (security_mechanisms) {
413
		lasso_assign_list_of_strings(endpoint_context->SecurityMechID, security_mechanisms);
414
	}
415

  
416
	lasso_list_add_new_gobject(service_context->EndpointContext, endpoint_context);
417
	lasso_list_add_new_gobject(service_metadata->ServiceContext, service_context);
418

  
419
	rc = lasso_idwsf2_discovery_add_service_metadata(idwsf2_discovery, service_metadata);
420
	lasso_release_gobject(service_metadata);
421
cleanup:
422
	return rc;
423
}
424

  
425
/**
426
 * lasso_idwsf2_discovery_get_metadatas:
427
 * @discovery: a #LassoIdWsf2Discovery object
428
 *
429
 * Return the current list of metadatas in the @discovery object. They can be metadatas just
430
 * received through a #LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REGISTER request or added through
431
 * lasso_idwsf2_discovery_add_service_metadata() or
432
 * lasso_idwsf2_discovery_add_simple_service_metadata().
433
 *
434
 * Return value:(transfer none)(element-type LassoIdWsf2DiscoSvcMetadata): the list of metadatas.
435
 */
436
GList*
437
lasso_idwsf2_discovery_get_metadatas(LassoIdWsf2Discovery *discovery)
438
{
439
	if (! LASSO_IS_IDWSF2_DISCOVERY(discovery) || ! discovery->private_data)
440
		return NULL;
441
	return discovery->private_data->metadatas;
442
}
443

  
444
/**
445
 * lasso_idwsf2_discovery_get_endpoint_references:
446
 * @discovery: a #LassoIdWsf2Discovery object
447
 *
448
 * Return the list of wsa:EndpointReference returned by the last discovery query.
449
 *
450
 * Return value:(transfer none)(element-type LassoWsAddrEndpointReference): a #GList of
451
 * LassoWsAddrEndpointReference objects, or NULL if none is found.
452
 */
453
GList*
454
lasso_idwsf2_discovery_get_endpoint_references(LassoIdWsf2Discovery *discovery)
455
{
456
	LassoProfile *profile;
457
	LassoIdWsf2DiscoQueryResponse *response;
458
	GList *rc = NULL;
459

  
460
	g_return_val_if_fail (LASSO_IS_IDWSF2_DISCOVERY (discovery), NULL);
461
	profile = &discovery->parent.parent;
462

  
463
	lasso_extract_node_or_fail (response, profile->response, IDWSF2_DISCO_QUERY_RESPONSE, NULL);
464
	rc = response->EndpointReference;
465
cleanup:
466
	return rc;
467
}
468

  
469
/**
470
 * lasso_idwsf2_discovery_get_svcmdids:
471
 * @discovery: a #LassoIdWsf2Discovery object
472
 *
473
 * Return the list of SvcMDID, or service metadata ids, returned by the last discovery query.
474
 *
475
 * Return value:(transfer none)(element-type utf8)(allow-none): a list of SvcMDID's.
476
 */
477
GList*
478
lasso_idwsf2_discovery_get_svcmdids(LassoIdWsf2Discovery *discovery)
479
{
480
	if (! LASSO_IS_IDWSF2_DISCOVERY(discovery) || ! discovery->private_data)
481
		return NULL;
482
	return discovery->private_data->svcmdids;
483
}
484

  
485
/**
486
 * lasso_idwsf2_discovery_set_svcmdids:
487
 * @discovery: a #LassoIdWsf2Discovery object
488
 * @svcmdids:(element-type utf8)(allow-none): a list of service metadata IDs
489
 *
490
 * Set the list of SvcMDID, or service metadata ids.
491
 *
492
 */
493
void
494
lasso_idwsf2_discovery_set_svcmdids(LassoIdWsf2Discovery *discovery, GList *svcmdids)
495
{
496
	if (! LASSO_IS_IDWSF2_DISCOVERY(discovery) || ! discovery->private_data)
497
		return;
498
	lasso_assign_list_of_strings(discovery->private_data->svcmdids, svcmdids);
499
}
500

  
501
/**
502
 * lasso_idwsf2_discovery_build_request_msg:
503
 * @discovery: a #LassoIdWsf2Discovery object
504
 * @security_mechanism:(allow-none):the security mech id to use, if NULL a Bearer mechanism is used.
505
 *
506
 * Build the request message using a security mechanism to authenticate the requester and the target
507
 * identity. If none is given Bearer mechanism is used.
508
 *
509
 * Return value: 0 if successful, an error code otherwise.
510
 */
511
gint
512
lasso_idwsf2_discovery_build_request_msg(LassoIdWsf2Discovery *discovery,
513
		const char *security_mechanism)
514
{
515
	GList *content = NULL;
516
	LassoIdWsf2DiscoQuery *query = NULL;
517
	GList **svc_md_ids = NULL;
518
	GList **metadatas = NULL;
519
	gboolean check_svcMDID = FALSE;
520
	int rc = 0;
521

  
522
	lasso_bad_param(IDWSF2_DISCOVERY, discovery);
523
	content =
524
		lasso_soap_envelope_get_body_content(
525
				lasso_idwsf2_profile_get_soap_envelope_request(
526
					&discovery->parent));
527
	switch (lasso_idwsf2_discovery_get_request_type(discovery)) {
528
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_QUERY:
529
			query = (LassoIdWsf2DiscoQuery*)lasso_list_get_first_child(content);
530
			lasso_assign_list_of_gobjects(query->RequestedService,
531
					discovery->private_data->requested_services);
532

  
533
			break;
534
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REGISTER:
535
			metadatas = &((LassoIdWsf2DiscoSvcMDRegister*)lasso_list_get_first_child(content))->SvcMD;
536
			break;
537
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_QUERY:
538
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDQuery*)
539
					lasso_list_get_first_child(content))->SvcMDID;
540
			break;
541
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REPLACE:
542
			check_svcMDID = TRUE;
543
			metadatas = &((LassoIdWsf2DiscoSvcMDReplace*)
544
					lasso_list_get_first_child(content))->SvcMD;
545
			break;
546
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_DELETE:
547
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDDelete*)
548
					lasso_list_get_first_child(content))->SvcMDID;
549
			break;
550
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_ADD:
551
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDAssociationAdd*)
552
						lasso_list_get_first_child(content))->SvcMDID;
553
			break;
554
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_DELETE:
555
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDAssociationDelete*)
556
						lasso_list_get_first_child(content))->SvcMDID;
557
			break;
558
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_QUERY:
559
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDAssociationQuery*)
560
						lasso_list_get_first_child(content))->SvcMDID;
561
			break;
562
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_UNKNOWN:
563
		default:
564
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_REQUEST);
565
			break;
566
	}
567
	if (metadatas) {
568
		if (! check_svcMDID) {
569
			lasso_assign_list_of_gobjects(*metadatas, discovery->private_data->metadatas);
570
		} else {
571
			GList *i;
572
			lasso_foreach(i, discovery->private_data->metadatas) {
573
				LassoIdWsf2DiscoSvcMetadata *metadata = (LassoIdWsf2DiscoSvcMetadata *)i->data;
574
				if (lasso_strisempty(metadata->svcMDID)) {
575
					message(G_LOG_LEVEL_WARNING, "disco:MetadataReplace method called with " \
576
							"non registered metadatas " \
577
							"(svcMDID attribute is missing)");
578
				} else {
579
					lasso_list_add_gobject(*metadatas, metadata);
580
				}
581
			}
582
		}
583
	}
584
	if (svc_md_ids) {
585
		lasso_assign_list_of_strings(*svc_md_ids, discovery->private_data->svcmdids);
586
	}
587
	rc = lasso_idwsf2_profile_build_request_msg(&discovery->parent, security_mechanism);
588
cleanup:
589
	return rc;
590
}
591

  
592
/**
593
 * lasso_idwsf2_discovery_process_request_msg:
594
 * @discovery: a #LassoIdWsf2Discovery object
595
 * @message: a received SOAP message
596
 *
597
 * Parse a Discovery service request.
598
 *
599
 * Return value: 0 if sucessful, an error code otherwise among:
600
 * <itemizedlist>
601
 * <listitem><para>LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if @profile is not a #LassoIdWsf2Profile
602
 * object,</para></listitem>
603
 * <listitem><para>LASSO_PARAM_ERROR_INVALID_VALUE if message is NULL,</para></listitem>
604
 * <listitem><para>LASSO_PROFILE_ERROR_INVALID_MSG if we cannot parse the message,</para></listitem>
605
 * <listitem><para>LASSO_SOAP_ERROR_MISSING_BODY if the message has no body
606
 * content.</para></listitem>
607
 * </itemizedlist>
608
 */
609
int
610
lasso_idwsf2_discovery_process_request_msg(LassoIdWsf2Discovery *discovery, const char *message)
611
{
612
	LassoProfile *profile;
613
	LassoIdWsf2Profile *idwsf2_profile;
614
	GList *content;
615
	GList **svc_md_ids = NULL, **metadatas = NULL, **service_types = NULL;
616
	int rc = 0;
617

  
618
	lasso_bad_param(IDWSF2_DISCOVERY, discovery);
619
	idwsf2_profile = &discovery->parent;
620
	profile = &idwsf2_profile->parent;
621

  
622
	lasso_check_good_rc(lasso_idwsf2_profile_process_request_msg(idwsf2_profile, message));
623

  
624
	content =
625
		lasso_soap_envelope_get_body_content(
626
				lasso_idwsf2_profile_get_soap_envelope_request(
627
					&discovery->parent));
628
	switch (lasso_idwsf2_discovery_get_request_type(discovery)) {
629
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REGISTER:
630
			metadatas = &((LassoIdWsf2DiscoSvcMDRegister*)
631
					lasso_list_get_first_child(content))->SvcMD;
632
			break;
633
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_QUERY:
634
			service_types = &((LassoIdWsf2DiscoQuery*)
635
					lasso_list_get_first_child(content))->RequestedService;
636
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_QUERY:
637
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDQuery*)
638
					lasso_list_get_first_child(content))->SvcMDID;
639
			break;
640
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_DELETE:
641
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDDelete*)
642
					lasso_list_get_first_child(content))->SvcMDID;
643
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_ADD:
644
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDAssociationAdd*)
645
						lasso_list_get_first_child(content))->SvcMDID;
646
			break;
647
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_DELETE:
648
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDAssociationDelete*)
649
						lasso_list_get_first_child(content))->SvcMDID;
650
			break;
651
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_QUERY:
652
			svc_md_ids = &((LassoIdWsf2DiscoSvcMDAssociationQuery*)
653
						lasso_list_get_first_child(content))->SvcMDID;
654
			break;
655
		default:
656
				lasso_check_good_rc(
657
						lasso_idwsf2_profile_init_soap_fault_response(
658
							idwsf2_profile,
659
							LASSO_SOAP_FAULT_CODE_CLIENT,
660
							"Unknown Request Type", NULL));
661
				rc = LASSO_PROFILE_ERROR_INVALID_REQUEST;
662
			break;
663
	}
664
	if (discovery->private_data && svc_md_ids) {
665
		lasso_assign_list_of_strings(discovery->private_data->svcmdids, *svc_md_ids);
666
	}
667
	if (metadatas) {
668
		lasso_assign_list_of_gobjects(discovery->private_data->metadatas, *metadatas);
669
	}
670
	if (service_types) {
671
		lasso_assign_list_of_gobjects(discovery->private_data->requested_services, *service_types);
672
	}
673

  
674
cleanup:
675
	return rc;
676
}
677

  
678

  
679
/**
680
 * lasso_idwsf2_discovery_get_request_type:
681
 * @discovery: a #LassoIdWsf2Discovery object
682
 *
683
 * Return the type of the last parsed request.
684
 *
685
 * Return value: the type of the last parsed request.
686
 */
687
LassoIdWsf2DiscoveryRequestType
688
lasso_idwsf2_discovery_get_request_type(LassoIdWsf2Discovery *discovery)
689
{
690
	if (LASSO_IS_IDWSF2_DISCOVERY(discovery))
691
	{
692
		GType request_type = 0;
693

  
694
		request_type = G_TYPE_FROM_INSTANCE(discovery->parent.parent.request);
695

  
696
#define check_request_type(a, b) \
697
		if (request_type == a) { \
698
			return b ;\
699
		}
700

  
701
		check_request_type(LASSO_TYPE_IDWSF2_DISCO_QUERY,
702
				LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_QUERY);
703
		check_request_type(LASSO_TYPE_IDWSF2_DISCO_SVC_MD_QUERY,
704
				LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_QUERY);
705
		check_request_type(LASSO_TYPE_IDWSF2_DISCO_SVC_MD_REGISTER,
706
				LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REGISTER);
707
		check_request_type(LASSO_TYPE_IDWSF2_DISCO_SVC_MD_REPLACE,
708
				LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REPLACE);
709
		check_request_type(LASSO_TYPE_IDWSF2_DISCO_SVC_MD_DELETE,
710
				LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_DELETE);
711
		check_request_type(LASSO_TYPE_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD,
712
				LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_ADD);
713
		check_request_type(LASSO_TYPE_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE,
714
				LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_DELETE);
715
		check_request_type(LASSO_TYPE_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY,
716
				LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_QUERY);
717
	}
718
#undef check_request_type
719
	return LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_UNKNOWN;
720

  
721
}
722

  
723
/**
724
 * lasso_idwsf2_discovery_fail_request:
725
 * @discovery: a #LassoIdWsf2Discovery
726
 * @status_code: a status code string
727
 * @status_code2:(allow-none): a second-level status code
728
 *
729
 * Fail the last request with the given status code.
730
 *
731
 * Return value: 0 on success; or a negative value otherwise.
732
 */
733
gint
734
lasso_idwsf2_discovery_fail_request(LassoIdWsf2Discovery *discovery, const char *status_code,
735
		const char *status_code2)
736
{
737
	LassoIdWsf2DiscoSvcMDAssociationAddResponse *md_association_add_response;
738
	LassoIdWsf2DiscoSvcMDAssociationDeleteResponse *md_association_delete_response;
739
	LassoIdWsf2DiscoSvcMDAssociationQueryResponse *md_association_query_response;
740
	LassoIdWsf2DiscoSvcMDRegisterResponse *md_register_response;
741
	LassoIdWsf2DiscoSvcMDQueryResponse *md_query_response;
742
	LassoIdWsf2DiscoSvcMDDeleteResponse *md_delete_response;
743
	LassoIdWsf2DiscoSvcMDReplaceResponse *md_replace_response;
744
	LassoIdWsf2DiscoQueryResponse *query_response;
745
	int rc = 0;
746
	LassoIdWsf2UtilStatus **status = NULL;
747
	LassoNode *response = NULL;
748

  
749
	lasso_bad_param(IDWSF2_DISCOVERY, discovery);
750

  
751
	lasso_check_good_rc(lasso_idwsf2_profile_init_response(&discovery->parent));
752
	switch (lasso_idwsf2_discovery_get_request_type(discovery)) {
753
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_QUERY:
754
			query_response = lasso_idwsf2_disco_query_response_new();
755
			response = (LassoNode*)query_response;
756
			status = &query_response->Status;
757
			break;
758

  
759
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REGISTER:
760
			md_register_response = lasso_idwsf2_disco_svc_md_register_response_new();
761
			response = (LassoNode*)md_register_response;
762
			status = &md_register_response->Status;
763
			break;
764
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_QUERY:
765
			md_query_response = lasso_idwsf2_disco_svc_md_query_response_new();
766
			response = (LassoNode*)md_query_response;
767
			status = &md_query_response->Status;
768
			break;
769
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REPLACE:
770
			md_replace_response = lasso_idwsf2_disco_svc_md_replace_response_new();
771
			response = (LassoNode*)md_replace_response;
772
			status = &md_replace_response->Status;
773
			break;
774
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_DELETE:
775
			md_delete_response = lasso_idwsf2_disco_svc_md_delete_response_new();
776
			response = (LassoNode*)md_delete_response;
777
			status = &md_delete_response->Status;
778
			break;
779
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_ADD:
780
			md_association_add_response =
781
				lasso_idwsf2_disco_svc_md_association_add_response_new();
782
			response = (LassoNode*)md_association_add_response;
783
			status = &md_association_add_response->Status;
784
			break;
785
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_DELETE:
786
			md_association_delete_response =
787
				lasso_idwsf2_disco_svc_md_association_delete_response_new();
788
			response = (LassoNode*)md_association_delete_response;
789
			status = &md_association_delete_response->Status;
790
			break;
791
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_QUERY:
792
			md_association_query_response =
793
				lasso_idwsf2_disco_svc_md_association_query_response_new();
794
			response = (LassoNode*)md_association_query_response;
795
			status = &md_association_query_response->Status;
796
			break;
797
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_UNKNOWN:
798
		default:
799
			response = (LassoNode*)lasso_soap_fault_new_full(
800
					LASSO_SOAP_FAULT_CODE_CLIENT, "Invalid request");
801
			break;
802
	}
803
	if (response) {
804
		LassoSoapEnvelope *envelope =
805
			lasso_idwsf2_profile_get_soap_envelope_response(&discovery->parent);
806
		lasso_assign_new_gobject(discovery->parent.parent.response, response);
807
		lasso_soap_envelope_add_to_body(envelope, response);
808
	}
809
	if (status) {
810
		lasso_assign_new_gobject(*status,
811
				lasso_idwsf2_util_status_new_with_code(status_code, status_code2));
812
	}
813

  
814
cleanup:
815
	return rc;
816
}
817

  
818
static gboolean
819
_string_list_intersect(GList *a, GList *b)
820
{
821
	GList *i, *j;
822

  
823
	if (a == NULL) {
824
		return TRUE;
825
	}
826
	lasso_foreach(i, a)
827
	{
828
		lasso_foreach(j, b)
829
			if (lasso_strisequal(i->data,j->data)) {
830
				return TRUE;
831
			}
832
	}
833
	return FALSE;
834
}
835

  
836
static gboolean
837
_string_list_contains(GList *a, const char *str)
838
{
839
	GList *i;
840

  
841
	if (a == NULL)
842
		return TRUE;
843
	lasso_foreach(i, a)
844
		if (lasso_strisequal(i->data,str)) {
845
			return TRUE;
846
		}
847
	return FALSE;
848
}
849

  
850
static gboolean
851
_string_list_contains_list(GList *a, GList *b)
852
{
853
	GList *i;
854
	/* empty = all */
855
	if (a == NULL)
856
		return TRUE;
857
	lasso_foreach(i, b)
858
		if (! _string_list_contains(a, i->data))
859
			return FALSE;
860
	return TRUE;
861
}
862

  
863
void
864
lasso_idwsf2_discovery_match_request_service_and_metadata2(
865
		LassoIdWsf2Discovery *discovery,
866
		LassoIdWsf2DiscoRequestedService *requested_service,
867
		LassoIdWsf2DiscoSvcMetadata *metadata,
868
		LassoIdWsf2DiscoServiceContext *service_context,
869
		LassoIdWsf2DiscoEndpointContext *endpoint_context,
870
		GList **eprs)
871
{
872
	GList *i;
873
	gboolean result = TRUE;
874
	gboolean option_result = TRUE;
875
	LassoIdWsf2DiscoOptions *options = NULL;
876
	GList *service_options = NULL;
877

  
878

  
879
	result = result &&
880
		_string_list_intersect(requested_service->ServiceType, service_context->ServiceType);
881
	if (result) {
882
		result = result && _string_list_contains(requested_service->ProviderID, metadata->ProviderID);
883
	}
884
	/* Accumulate options */
885
	if (result) {
886
		lasso_foreach(i, service_context->Options)
887
		{
888
			options = (LassoIdWsf2DiscoOptions*)i->data;
889
			service_options = g_list_concat(service_options,
890
					g_list_copy(options->Option));
891
		}
892
		lasso_foreach(i, requested_service->Options)
893
		{
894
			option_result = FALSE;
895
			if (_string_list_contains_list(service_options,
896
						((LassoIdWsf2DiscoOptions*)i->data)->Option))
897
			{
898
				option_result = TRUE;
899
				break;
900
			}
901
		}
902
		lasso_release_list(service_options);
903
		result = result && option_result;
904
	}
905
	if (result) {
906
		result = result &&
907
			_string_list_intersect(requested_service->SecurityMechID, endpoint_context->SecurityMechID);
908
	}
909
	if (result) {
910
		if (requested_service->Framework) {
911
			result = result &&
912
				_string_list_intersect(requested_service->Framework, endpoint_context->Framework);
913
		} else {
914
			/* FIXME: should be the value of the query SOAP header sbf:Framework */
915
			GList *k;
916
			gboolean has20 = FALSE;
917
			lasso_foreach (k, endpoint_context->Framework) {
918
				LassoIdWsf2SbfFramework *framework = k->data;
919
				if (LASSO_IS_IDWSF2_SBF_FRAMEWORK(framework) && lasso_strisequal(framework->version,"2.0"))
920
					has20 = TRUE;
921
			}
922
			result = result && has20;
923
		}
924
	}
925
	if (result) {
926
		result = result && _string_list_intersect(endpoint_context->Action, requested_service->Action);
927
	}
928

  
929
	if (result) {
930
		lasso_list_add_new_gobject(*eprs,
931
				lasso_idwsf2_discovery_build_epr(
932
					discovery,
933
					metadata,
934
					service_context,
935
					endpoint_context));
936
	}
937

  
938
}
939

  
940
void
941
lasso_idwsf2_discovery_match_request_service_and_metadata(
942
		LassoIdWsf2Discovery *discovery,
943
		LassoIdWsf2DiscoRequestedService *requested_service,
944
		LassoIdWsf2DiscoSvcMetadata *metadata,
945
		GList **eprs)
946
{
947
	GList *i, *j;
948

  
949
	lasso_foreach(i, metadata->ServiceContext)
950
		lasso_foreach(j, ((LassoIdWsf2DiscoServiceContext*)i->data)->EndpointContext)
951

  
952
			lasso_idwsf2_discovery_match_request_service_and_metadata2(
953
					discovery,
954
					requested_service,
955
					metadata,
956
					(LassoIdWsf2DiscoServiceContext*)i->data,
957
					(LassoIdWsf2DiscoEndpointContext*)j->data, eprs);
958

  
959
}
960

  
961
static gint
962
lasso_idwsf2_discovery_validate_request_query(LassoIdWsf2Discovery *discovery)
963
{
964
	LassoIdWsf2DiscoQuery *query;
965
	LassoIdWsf2DiscoQueryResponse *query_response;
966
	GList *eprs = NULL;
967
	int rc = 0;
968

  
969
	/* Build EPRs */
970
	query = (LassoIdWsf2DiscoQuery*)discovery->parent.parent.request;
971
	lasso_foreach_full_begin(LassoIdWsf2DiscoRequestedService*, requested_service, i,
972
			query->RequestedService)
973
		lasso_foreach_full_begin(LassoIdWsf2DiscoSvcMetadata*, metadata, j,
974
				discovery->private_data->metadatas)
975
			lasso_idwsf2_discovery_match_request_service_and_metadata(discovery, requested_service,
976
					metadata, &eprs);
977
		lasso_foreach_full_end()
978
	lasso_foreach_full_end()
979

  
980
	if (eprs) {
981
		query_response = lasso_idwsf2_disco_query_response_new();
982
		query_response->Status = lasso_idwsf2_util_status_new_with_code(
983
				LASSO_IDWSF2_DISCOVERY_STATUS_CODE_OK, NULL);
984
		query_response->EndpointReference = eprs;
985
		lasso_check_good_rc(lasso_idwsf2_profile_init_response(&discovery->parent));
986
		lasso_soap_envelope_add_to_body(
987
				lasso_idwsf2_profile_get_soap_envelope_response(&discovery->parent),
988
				(LassoNode*)query_response);
989
		discovery->parent.parent.response = &query_response->parent;
990
	} else {
991
		return lasso_idwsf2_discovery_fail_request(discovery,
992
				LASSO_IDWSF2_DISCOVERY_STATUS_CODE_NO_RESULTS, NULL);
993
	}
994
cleanup:
995
	return rc;
996
}
997

  
998
/**
999
 * lasso_idwsf2_discovery_validate_md_register:
1000
 * @discovery: a #LassoIdWsf2Discovery
1001
 *
1002
 * Process received metadata register request.
1003
 * If successful, register the service metadata into the discovery service.
1004
 *
1005
 * Return value: 0 on success; or a negative value otherwise.
1006
 **/
1007
static gint
1008
lasso_idwsf2_discovery_validate_md_register(LassoIdWsf2Discovery *discovery)
1009
{
1010
	LassoIdWsf2Profile *profile = NULL;
1011
	LassoIdWsf2DiscoSvcMDRegisterResponse *response = NULL;
1012
	LassoSoapEnvelope *envelope = NULL;
1013
	LassoIdWsf2DiscoSvcMDRegister *request = NULL;
1014
	GList *SvcMD = NULL;
1015
	GList *SvcMDs = NULL;
1016
	int rc = 0;
1017

  
1018
	profile = LASSO_IDWSF2_PROFILE(discovery);
1019
	lasso_release_list_of_gobjects(discovery->private_data->metadatas);
1020
	request = (LassoIdWsf2DiscoSvcMDRegister*)profile->parent.request;
1021

  
1022
	lasso_release_list_of_gobjects(discovery->private_data->metadatas);
1023
	/* Allocate SvcMDIDs and add the metadatas */
1024
	for (SvcMD = request->SvcMD; SvcMD != NULL; SvcMD = g_list_next(SvcMD)) {
1025
		if (LASSO_IS_IDWSF2_DISCO_SVC_METADATA(SvcMD->data)) {
1026
			lasso_list_add_gobject(discovery->private_data->metadatas, SvcMD->data);
1027
			lasso_assign_new_string(
1028
					LASSO_IDWSF2_DISCO_SVC_METADATA(
1029
						SvcMD->data)->svcMDID,
1030
					lasso_build_unique_id(32));
1031
		}
1032
	}
1033

  
1034
	response = lasso_idwsf2_disco_svc_md_register_response_new();
1035
	response->Status =
1036
		lasso_idwsf2_util_status_new_with_code(LASSO_IDWSF2_DISCOVERY_STATUS_CODE_OK, NULL);
1037
	for (SvcMDs = discovery->private_data->metadatas; SvcMDs != NULL; SvcMDs = g_list_next(SvcMDs)) {
1038
		lasso_list_add_string(response->SvcMDID,
1039
				LASSO_IDWSF2_DISCO_SVC_METADATA(SvcMDs->data)->svcMDID);
1040
	}
1041

  
1042
	lasso_check_good_rc(lasso_idwsf2_profile_init_response(&discovery->parent));
1043
	envelope = lasso_idwsf2_profile_get_soap_envelope_response(profile);
1044
	lasso_soap_envelope_add_to_body(envelope, &response->parent);
1045
	lasso_assign_gobject(profile->parent.response, response);
1046
cleanup:
1047
	lasso_release_gobject(response);
1048
	return rc;
1049
}
1050

  
1051
/**
1052
 * lasso_idwsf2_discovery_validate_request:
1053
 * @discovery: a #LassoIdWsf2Discovery object
1054
 *
1055
 * Accept the discovery request, and produce the response.
1056
 *
1057
 * Return value: 0 on success; or a negative value otherwise.
1058
 */
1059
gint
1060
lasso_idwsf2_discovery_validate_request(LassoIdWsf2Discovery *discovery)
1061
{
1062
	LassoIdWsf2DiscoSvcMDAssociationAddResponse *md_association_add_response;
1063
	LassoIdWsf2DiscoSvcMDAssociationDeleteResponse *md_association_delete_response;
1064
	LassoIdWsf2DiscoSvcMDAssociationQueryResponse *md_association_query_response;
1065
	LassoIdWsf2DiscoSvcMDQueryResponse *md_query_response;
1066
	LassoIdWsf2DiscoSvcMDQuery *md_query;
1067
	LassoIdWsf2DiscoSvcMDDeleteResponse *md_delete_response;
1068
	LassoIdWsf2DiscoSvcMDReplaceResponse *md_replace_response;
1069
	LassoNode *response = NULL;
1070
	int rc = 0;
1071
	GList *i;
1072
	LassoIdWsf2UtilStatus **status = NULL;
1073

  
1074
	lasso_bad_param(IDWSF2_DISCOVERY, discovery);
1075
	switch (lasso_idwsf2_discovery_get_request_type(discovery)) {
1076
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_QUERY:
1077
			lasso_check_good_rc(lasso_idwsf2_discovery_validate_request_query(discovery));
1078
			break;
1079
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REGISTER:
1080
			lasso_check_good_rc(lasso_idwsf2_discovery_validate_md_register(discovery));
1081
			break;
1082
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_QUERY:
1083
			md_query_response = lasso_idwsf2_disco_svc_md_query_response_new();
1084
			md_query = (LassoIdWsf2DiscoSvcMDQuery*)discovery->parent.parent.request;
1085
			response = (LassoNode*)md_query_response;
1086
			if (md_query->SvcMDID) {
1087
				lasso_foreach(i, discovery->private_data->metadatas) {
1088
					LassoIdWsf2DiscoSvcMetadata *metadata = i->data;
1089
					if (LASSO_IS_IDWSF2_DISCO_SVC_METADATA(metadata)
1090
						&& _string_list_contains(md_query->SvcMDID, metadata->svcMDID)) {
1091
						lasso_list_add_gobject(md_query_response->SvcMD, i->data);
1092
					}
1093
				}
1094
			} else {
1095
				lasso_assign_list_of_gobjects(md_query_response->SvcMD,
1096
						discovery->private_data->metadatas);
1097
			}
1098
			status = &md_query_response->Status;
1099
			break;
1100
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REPLACE:
1101
			md_replace_response = lasso_idwsf2_disco_svc_md_replace_response_new();
1102
			response = (LassoNode*)md_replace_response;
1103
			status = &md_replace_response->Status;
1104
			break;
1105
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_DELETE:
1106
			md_delete_response = lasso_idwsf2_disco_svc_md_delete_response_new();
1107
			response = (LassoNode*)md_delete_response;
1108
			status = &md_delete_response->Status;
1109
			break;
1110
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_ADD:
1111
			md_association_add_response =
1112
				lasso_idwsf2_disco_svc_md_association_add_response_new();
1113
			response = (LassoNode*)md_association_add_response;
1114
			status = &md_association_add_response->Status;
1115
			break;
1116
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_DELETE:
1117
			md_association_delete_response =
1118
				lasso_idwsf2_disco_svc_md_association_delete_response_new();
1119
			response = (LassoNode*)md_association_delete_response;
1120
			status = &md_association_delete_response->Status;
1121
			break;
1122
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_QUERY:
1123
			md_association_query_response =
1124
				lasso_idwsf2_disco_svc_md_association_query_response_new();
1125
			response = (LassoNode*)md_association_query_response;
1126
			lasso_foreach(i, discovery->private_data->svcmdids) {
1127
				lasso_list_add_string(md_association_query_response->SvcMDID,
1128
						i->data);
1129
			}
1130
			status = &md_association_query_response->Status;
1131
			break;
1132
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_UNKNOWN:
1133
		default:
1134
			lasso_idwsf2_discovery_fail_request(discovery, NULL, NULL);
1135
			rc = LASSO_PROFILE_ERROR_INVALID_REQUEST;
1136
			break;
1137
	}
1138
	if (response) {
1139
		LassoSoapEnvelope *envelope =
1140
			lasso_idwsf2_profile_get_soap_envelope_response(&discovery->parent);
1141
		lasso_assign_new_gobject(discovery->parent.parent.response, response);
1142
		lasso_soap_envelope_add_to_body(envelope, response);
1143
	}
1144

  
1145
	if (status) {
1146
		lasso_assign_new_gobject(*status,
1147
				lasso_idwsf2_util_status_new_with_code(
1148
					LASSO_IDWSF2_DISCOVERY_STATUS_CODE_OK, NULL));
1149
	}
1150

  
1151
cleanup:
1152
	return rc;
1153
}
1154

  
1155
static gint
1156
lasso_idwsf2_discovery_process_metadata_register_response_msg(LassoIdWsf2Discovery *discovery)
1157
{
1158
	LassoIdWsf2Profile *profile;
1159
	LassoIdWsf2DiscoSvcMDRegisterResponse *response;
1160
	LassoIdWsf2DiscoSvcMDRegister *request;
1161
	GList *i, *j;
1162
	int rc = 0;
1163

  
1164
	profile  = &discovery->parent;
1165
	lasso_extract_node_or_fail(request, profile->parent.request, IDWSF2_DISCO_SVC_MD_REGISTER,
1166
			LASSO_PROFILE_ERROR_MISSING_REQUEST);
1167

  
1168
	response = (LassoIdWsf2DiscoSvcMDRegisterResponse*)profile->parent.response;
1169

  
1170
	goto_cleanup_if_fail_with_rc(
1171
			LASSO_IS_IDWSF2_DISCO_SVC_MD_REGISTER_RESPONSE(response),
1172
			LASSO_PROFILE_ERROR_INVALID_RESPONSE);
1173
	lasso_check_good_rc(lasso_idwsf2_discovery_status2rc(response->Status));
1174
	goto_cleanup_if_fail_with_rc(g_list_length(response->SvcMDID) ==
1175
			g_list_length(request->SvcMD), LASSO_PROFILE_ERROR_INVALID_RESPONSE);
1176
	/* Check IDs */
1177
	i = response->SvcMDID;
1178
	lasso_foreach(i, response->SvcMDID) {
1179
		if (i->data == NULL || ((char*)i->data)[0] == '\0') {
1180
			rc = LASSO_PROFILE_ERROR_INVALID_RESPONSE;
1181
			goto cleanup;
1182
		}
1183
	}
1184

  
1185
	/* Assign IDs to metadatas */
1186
	i = response->SvcMDID;
1187
	j = request->SvcMD;
1188
	while (i && j) {
1189
		lasso_assign_string(((LassoIdWsf2DiscoSvcMetadata*)j->data)->svcMDID,
1190
				i->data);
1191
		i = i->next;
1192
		j = j->next;
1193
	}
1194
	if (discovery->private_data && discovery->private_data->metadatas != request->SvcMD) {
1195
		lasso_assign_list_of_gobjects(discovery->private_data->metadatas, request->SvcMD);
1196
	}
1197
cleanup:
1198
	return rc;
1199
}
1200

  
1201

  
1202
/**
1203
 * lasso_idwsf2_discovery_add_requested_service:
1204
 * @discovery: a #LassoIdWsf2Discovery
1205
 * @service_types:(element-type utf8)(allow-none): the service type (or data profile) requested
1206
 * @provider_ids:(element-type utf8)(allow-none): the providers ids to select
1207
 * @options:(element-type utf8)(allow-none): the options to select
1208
 * @security_mechanisms:(element-type utf8)(allow-none): the security mechanisms to select
1209
 * @frameworks:(element-type utf8)(allow-none): the ID-WSF framework version to select
1210
 * @actions:(element-type utf8)(allow-none): the actions to select
1211
 * @result_type:(allow-none)(default LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_NONE): how to filter
1212
 * the generated EPRs
1213
 * @req_id:(allow-none): an eventual ID to put on the request, that can be matched with the
1214
 * generated EndpointReferences
1215
 *
1216
 * Add a new request to find some specific services associated to the current principal at the
1217
 * discovery service.
1218
 *
1219
 * Return value: 0 on success; or a negative value otherwise.
1220
 **/
1221
gint
1222
lasso_idwsf2_discovery_add_requested_service(LassoIdWsf2Discovery *discovery,
1223
	GList *service_types, GList *provider_ids, GList *options, GList *security_mechanisms,
1224
	GList *frameworks, GList *actions, LassoIdWsf2DiscoveryQueryResultType result_type,
1225
	const char *req_id)
1226
{
1227
	LassoIdWsf2DiscoRequestedService *service;
1228

  
1229
	lasso_bad_param(IDWSF2_DISCOVERY, discovery);
1230
	const char *result_type_s = NULL;
1231

  
1232

  
1233
	service = lasso_idwsf2_disco_requested_service_new();
1234
	lasso_assign_list_of_strings(service->ServiceType, service_types);
1235
	lasso_assign_list_of_strings(service->ProviderID, provider_ids);
1236
	lasso_assign_list_of_strings(service->Framework, frameworks);
1237
	lasso_assign_list_of_strings(service->Action, actions);
1238
	lasso_assign_list_of_strings(service->SecurityMechID, security_mechanisms);
1239
	lasso_assign_list_of_gobjects(service->Options, options);
1240
	switch (result_type) {
1241
		case LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_BEST:
1242
			result_type_s = LASSO_IDWSF2_DISCOVERY_RESULT_TYPE_BEST;
1243
			break;
1244
		case LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_ALL:
1245
			result_type_s = LASSO_IDWSF2_DISCOVERY_RESULT_TYPE_ALL;
1246
			break;
1247
		case LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_ONLY_ONE:
1248
			result_type_s = LASSO_IDWSF2_DISCOVERY_RESULT_TYPE_ONLY_ONE;
1249
			break;
1250
		default:
1251
			break;
1252
	}
1253
	lasso_assign_string(service->resultsType, result_type_s);
1254
	lasso_assign_string(service->reqID, req_id);
1255

  
1256
	lasso_list_add_new_gobject(discovery->private_data->requested_services, service);
1257
	return 0;
1258
}
1259

  
1260
/**
1261
 * lasso_idwsf2_discovery_process_response_msg:
1262
 * @discovery: a #LassoIdWsf2Discovery object
1263
 * @msg: a string containing the response messages
1264
 *
1265
 * Return value: 0 if successful, an error code otherwise.
1266
 */
1267
gint
1268
lasso_idwsf2_discovery_process_response_msg(LassoIdWsf2Discovery *discovery,
1269
		const char *msg)
1270
{
1271
	LassoIdWsf2DiscoSvcMDAssociationAddResponse *md_association_add_response;
1272
	LassoIdWsf2DiscoSvcMDAssociationDeleteResponse *md_association_delete_response;
1273
	LassoIdWsf2DiscoSvcMDAssociationQueryResponse *md_association_query_response;
1274
	LassoIdWsf2DiscoSvcMDQueryResponse *md_query_response;
1275
	LassoIdWsf2DiscoSvcMDDeleteResponse *md_delete_response;
1276
	LassoIdWsf2DiscoSvcMDReplaceResponse *md_replace_response;
1277
	LassoIdWsf2DiscoQueryResponse *query_response;
1278
	LassoProfile *profile;
1279
	LassoNode *response;
1280
	int rc = 0;
1281

  
1282
	lasso_bad_param(IDWSF2_DISCOVERY, discovery);
1283
	profile = &discovery->parent.parent;
1284

  
1285
	lasso_check_good_rc(lasso_idwsf2_profile_process_response_msg(&discovery->parent, msg));
1286
	response = profile->response;
1287

  
1288
	switch (lasso_idwsf2_discovery_get_request_type(discovery)) {
1289
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_QUERY:
1290
			if (! LASSO_IS_IDWSF2_DISCO_QUERY_RESPONSE(response))
1291
				goto bad_response;
1292
			query_response = (LassoIdWsf2DiscoQueryResponse*)response;
1293
			rc = lasso_idwsf2_discovery_status2rc(query_response->Status);
1294
			break;
1295
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REGISTER:
1296
			rc = lasso_idwsf2_discovery_process_metadata_register_response_msg(
1297
					discovery);
1298
			break;
1299
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_QUERY:
1300
			if (! LASSO_IDWSF2_DISCO_SVC_MD_QUERY_RESPONSE(response))
1301
				goto bad_response;
1302
			md_query_response = (LassoIdWsf2DiscoSvcMDQueryResponse*)response;
1303
			lasso_check_good_rc(lasso_idwsf2_discovery_status2rc(
1304
						md_query_response->Status));
1305
			lasso_assign_list_of_gobjects(discovery->private_data->metadatas,
1306
					md_query_response->SvcMD);
1307
			break;
1308
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REPLACE:
1309
			if (! LASSO_IDWSF2_DISCO_SVC_MD_REPLACE_RESPONSE(response))
1310
				goto bad_response;
1311
			md_replace_response = (LassoIdWsf2DiscoSvcMDReplaceResponse*)response;
1312
			lasso_check_good_rc(lasso_idwsf2_discovery_status2rc(
1313
						md_replace_response->Status));
1314
			break;
1315
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_DELETE:
1316
			if (! LASSO_IDWSF2_DISCO_SVC_MD_DELETE_RESPONSE(response))
1317
				goto bad_response;
1318
			md_delete_response = (LassoIdWsf2DiscoSvcMDDeleteResponse*)response;
1319
			lasso_check_good_rc(lasso_idwsf2_discovery_status2rc(
1320
						md_delete_response->Status));
1321
			break;
1322
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_ADD:
1323
			if (! LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE(response))
1324
				goto bad_response;
1325
			md_association_add_response =
1326
				(LassoIdWsf2DiscoSvcMDAssociationAddResponse*)response;
1327
			lasso_check_good_rc(lasso_idwsf2_discovery_status2rc(
1328
						md_association_add_response->Status));
1329
			break;
1330
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_DELETE:
1331
			if (! LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_DELETE_RESPONSE(response))
1332
				goto bad_response;
1333
			md_association_delete_response =
1334
				(LassoIdWsf2DiscoSvcMDAssociationDeleteResponse*)response;
1335
			lasso_check_good_rc(lasso_idwsf2_discovery_status2rc(
1336
						md_association_delete_response->Status));
1337
			break;
1338
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_QUERY:
1339
			if (! LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_QUERY_RESPONSE(response))
1340
				goto bad_response;
1341
			md_association_query_response =
1342
				(LassoIdWsf2DiscoSvcMDAssociationQueryResponse*)response;
1343
			lasso_check_good_rc(lasso_idwsf2_discovery_status2rc(
1344
						md_association_query_response->Status));
1345
			lasso_assign_list_of_strings(discovery->private_data->svcmdids,
1346
					md_association_query_response->SvcMDID);
1347
			break;
1348
		case LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_UNKNOWN:
1349
		default:
1350
			rc = LASSO_PROFILE_ERROR_INVALID_REQUEST;
1351
			break;
1352
	}
1353
cleanup:
1354
	return rc;
1355
bad_response:
1356
	return LASSO_PROFILE_ERROR_INVALID_RESPONSE;
1357
}
1358

  
1359
static LassoNodeClass *parent_class = NULL;
1360

  
1361
static void
1362
dispose(GObject *object)
1363
{
1364
	LassoIdWsf2Discovery *discovery = LASSO_IDWSF2_DISCOVERY(object);
1365
	if (discovery->private_data->dispose_has_run == TRUE)
1366
		return;
1367
	discovery->private_data->dispose_has_run = TRUE;
1368
	G_OBJECT_CLASS(parent_class)->dispose(object);
1369
}
1370

  
1371
static void
1372
finalize(GObject *object)
1373
{
1374
	LassoIdWsf2Discovery *discovery = LASSO_IDWSF2_DISCOVERY(object);
1375
	lasso_release(discovery->private_data);
1376
	discovery->private_data = NULL;
1377
	G_OBJECT_CLASS(parent_class)->finalize(object);
1378
}
1379

  
1380
static void
1381
instance_init(LassoIdWsf2Discovery *discovery)
1382
{
1383
	discovery->private_data = g_new0(LassoIdWsf2DiscoveryPrivate, 1);
1384
	discovery->private_data->dispose_has_run = FALSE;
1385
}
1386

  
1387
static xmlNode*
1388
get_xmlNode(LassoNode *node, gboolean lasso_dump)
1389
{
1390
	xmlNode *xmlnode;
1391
	LassoIdWsf2Discovery *discovery = (LassoIdWsf2Discovery*)node;
1392

  
1393
	if (! LASSO_IS_IDWSF2_PROFILE(node))
1394
		return NULL;
1395

  
1396
	xmlnode = parent_class->get_xmlNode(node, lasso_dump);
1397

  
1398
	if (xmlnode && discovery->private_data) {
1399
		LassoIdWsf2DiscoveryPrivate *pdata = discovery->private_data;
1400
		if (pdata->metadatas) {
1401
			xmlNode *metadatas;
1402
			GList *i;
1403
			metadatas = xmlNewChild(xmlnode, NULL, BAD_CAST LASSO_IDWSF2_DISCOVERY_ELEMENT_METADATAS, NULL);
1404
			lasso_foreach(i, pdata->metadatas) {
1405
				xmlAddChild(metadatas, lasso_node_get_xmlNode(i->data, lasso_dump));
1406
			}
1407
		}
1408
		if (pdata->requested_services) {
1409
			xmlNode *requested_services;
1410
			GList *i;
1411
			requested_services = xmlNewChild(xmlnode, NULL, BAD_CAST
1412
					LASSO_IDWSF2_DISCOVERY_ELEMENT_REQUESTED_SERVICES, NULL);
1413
			lasso_foreach(i, pdata->requested_services) {
1414
				xmlAddChild(requested_services, lasso_node_get_xmlNode(i->data, lasso_dump));
1415
			}
1416
		}
1417
	}
1418

  
1419
	return xmlnode;
1420
}
1421

  
1422
static int
1423
init_from_xml(LassoNode *node, xmlNode *xmlnode)
1424
{
1425
	LassoIdWsf2Discovery *discovery = (LassoIdWsf2Discovery*)node;
1426
	xmlNode *metadatas_node, *requested_services_node;
1427
	LassoIdWsf2DiscoveryPrivate *pdata;
1428

  
1429
	if (! LASSO_IS_IDWSF2_DISCOVERY(discovery))
1430
		return LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ;
1431

  
1432
	parent_class->init_from_xml(node, xmlnode);
1433

  
1434
	if (xmlnode == NULL)
1435
		return LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED;
1436

  
1437
	metadatas_node = xmlSecFindChild(xmlnode,
1438
			BAD_CAST LASSO_IDWSF2_DISCOVERY_ELEMENT_METADATAS,
1439
			BAD_CAST LASSO_LASSO_HREF);
1440
	requested_services_node = xmlSecFindChild(xmlnode,
1441
			BAD_CAST LASSO_IDWSF2_DISCOVERY_ELEMENT_REQUESTED_SERVICES,
1442
			BAD_CAST LASSO_LASSO_HREF);
1443

  
1444
	if (! discovery->private_data) {
1445
		discovery->private_data = g_new0(LassoIdWsf2DiscoveryPrivate, 1);
1446
	}
1447
	pdata = discovery->private_data;
1448

  
1449
	if (metadatas_node) {
1450
		xmlNode *it;
1451
		for (it = xmlSecGetNextElementNode(metadatas_node->children);
1452
				it != NULL; 
1453
				it = xmlSecGetNextElementNode(it->next)) {
1454
			LassoIdWsf2DiscoSvcMetadata *metadata;
1455
			metadata = (LassoIdWsf2DiscoSvcMetadata*)lasso_node_new_from_xmlNode(it);
1456
			if (! LASSO_IS_IDWSF2_DISCO_SVC_METADATA(metadata)) {
1457
				lasso_release_gobject(metadata);
1458
				goto error;
1459
			}
1460
			lasso_list_add_new_gobject(pdata->metadatas, metadata);
1461
		}
1462
	}
1463
	if (requested_services_node) {
1464
		xmlNode *it;
1465
		for (it = xmlSecGetNextElementNode(requested_services_node->children);
1466
				it != NULL; 
1467
				it = xmlSecGetNextElementNode(it->next)) {
1468
			LassoIdWsf2DiscoRequestedService *metadata;
1469
			metadata = (LassoIdWsf2DiscoRequestedService*)lasso_node_new_from_xmlNode(it);
1470
			if (! LASSO_IS_IDWSF2_DISCO_REQUESTED_SERVICE(metadata)) {
1471
				lasso_release_gobject(metadata);
1472
				goto error;
1473
			}
1474
			lasso_list_add_new_gobject(pdata->requested_services, metadata);
1475
		}
1476
	}
1477

  
1478
	return 0;
1479
error:
1480
	return LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED;
1481
}
1482

  
1483
static void
1484
class_init(LassoIdWsf2DiscoveryClass *klass, void *unused G_GNUC_UNUSED)
1485
{
1486
	parent_class = g_type_class_peek_parent(klass);
1487
	lasso_node_class_set_nodename(LASSO_NODE_CLASS(klass), "IdWsf2Discovery");
1488
	lasso_node_class_set_ns(LASSO_NODE_CLASS(klass), LASSO_LASSO_HREF, LASSO_LASSO_PREFIX);
1489
	G_OBJECT_CLASS(klass)->dispose = dispose;
1490
	G_OBJECT_CLASS(klass)->finalize = finalize;
1491
	klass->parent.parent.parent.get_xmlNode = get_xmlNode;
1492
	klass->parent.parent.parent.init_from_xml = init_from_xml;
1493

  
1494
}
1495

  
1496
GType
1497
lasso_idwsf2_discovery_get_type()
1498
{
1499
	static GType this_type = 0;
1500

  
1501
	if (!this_type) {
1502
		static const GTypeInfo this_info = {
1503
			sizeof(LassoIdWsf2DiscoveryClass),
1504
			NULL,
1505
			NULL,
1506
			(GClassInitFunc) class_init,
1507
			NULL,
1508
			NULL,
1509
			sizeof(LassoIdWsf2Discovery),
1510
			0,
1511
			(GInstanceInitFunc) instance_init,
1512
			NULL
1513
		};
1514

  
1515
		this_type = g_type_register_static(LASSO_TYPE_IDWSF2_PROFILE,
1516
				"LassoIdWsf2Discovery", &this_info, 0);
1517
	}
1518
	return this_type;
1519
}
1520

  
1521
/**
1522
 * lasso_idwsf2_discovery_new:
1523
 * @server:(allow-none):a #LassoServer object, for resolving ProviderID names
1524
 *
1525
 * Create a new #LassoIdWsf2Discovery.
1526
 *
1527
 * Return value: a newly created #LassoIdWsf2Discovery object; or NULL if an error occured.
1528
 **/
1529
LassoIdWsf2Discovery*
1530
lasso_idwsf2_discovery_new(LassoServer *server)
1531
{
1532
	LassoIdWsf2Discovery *discovery = NULL;
1533

  
1534
	discovery = g_object_new(LASSO_TYPE_IDWSF2_DISCOVERY, NULL);
1535
	discovery->parent.parent.server = lasso_ref(server);
1536

  
1537
	return discovery;
1538
}
lasso/id-wsf-2.0/discovery.h
1
/* $Id: discovery.h,v 1.30 2006/02/21 09:51:49 Exp $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_DISCOVERY_H__
25
#define __LASSO_IDWSF2_DISCOVERY_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29

  
30
#endif /* __cplusplus */
31

  
32
#include "profile.h"
33
#include "data_service.h"
34

  
35
#include "../xml/id-wsf-2.0/disco_query.h"
36
#include "../xml/id-wsf-2.0/disco_query_response.h"
37
#include "../xml/id-wsf-2.0/disco_svc_metadata.h"
38

  
39
#define LASSO_TYPE_IDWSF2_DISCOVERY (lasso_idwsf2_discovery_get_type())
40
#define LASSO_IDWSF2_DISCOVERY(obj) \
41
	(G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_IDWSF2_DISCOVERY, LassoIdWsf2Discovery))
42
#define LASSO_IDWSF2_DISCOVERY_CLASS(klass) \
43
	(G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_IDWSF2_DISCOVERY, LassoIdWsf2DiscoveryClass))
44
#define LASSO_IS_IDWSF2_DISCOVERY(obj) \
45
	(G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_IDWSF2_DISCOVERY))
46
#define LASSO_IS_IDWSF2_DISCOVERY_CLASS(klass) \
47
	(G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_IDWSF2_DISCOVERY))
48
#define LASSO_IDWSF2_DISCOVERY_GET_CLASS(o) \
49
	(G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_IDWSF2_DISCOVERY, LassoIdWsf2DiscoveryClass))
50

  
51
typedef struct _LassoIdWsf2Discovery LassoIdWsf2Discovery;
52
typedef struct _LassoIdWsf2DiscoveryClass LassoIdWsf2DiscoveryClass;
53
typedef struct _LassoIdWsf2DiscoveryPrivate LassoIdWsf2DiscoveryPrivate;
54

  
55
struct _LassoIdWsf2Discovery {
56
	LassoIdWsf2Profile parent;
57

  
58
	/*< private >*/
59
	LassoIdWsf2DiscoveryPrivate *private_data;
60
};
61

  
62
struct _LassoIdWsf2DiscoveryClass {
63
	LassoIdWsf2ProfileClass parent;
64
};
65

  
66
LASSO_EXPORT GType lasso_idwsf2_discovery_get_type(void);
67

  
68
LASSO_EXPORT LassoIdWsf2Discovery* lasso_idwsf2_discovery_new(LassoServer *server);
69

  
70
/**
71
 * LassoIdWsf2DiscoveryRequestType:
72
 * @LASSO_IDWSF2_DISCOVERY_METADATA_REGISTER_REQUEST:
73
 * @LASSO_IDWSF2_DISCOVERY_METADATA_ASSOCIATION_REQUEST:
74
 * @LASSO_IDWSF2_DISCOVERY_METADATA_DISSOCIATION_REQUEST:
75
 * @LASSO_IDWSF2_DISCOVERY_QUERY:
76
 */
77
typedef enum {
78
	LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_UNKNOWN,
79
	LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_QUERY,
80
	LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_QUERY,
81
	LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REGISTER,
82
	LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_REPLACE,
83
	LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_DELETE,
84
	LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_ADD,
85
	LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_DELETE,
86
	LASSO_IDWSF2_DISCOVERY_REQUEST_TYPE_MD_ASSOCIATION_QUERY,
87
} LassoIdWsf2DiscoveryRequestType;
88

  
89
/**
90
 * LassoIdWsf2DiscoveryQueryResultType:
91
 * @LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_BEST:
92
 * @LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_ALL:
93
 * @LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_ONLY_ONE:
94
 */
95
typedef enum {
96
 LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_NONE,
97
 LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_BEST,
98
 LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_ALL,
99
 LASSO_IDWSF2_DISCOVERY_QUERY_RESULT_TYPE_ONLY_ONE
100
} LassoIdWsf2DiscoveryQueryResultType;
101

  
102
/* Request initialization */
103
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_init_query(LassoIdWsf2Discovery *discovery);
104
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_init_metadata_query(LassoIdWsf2Discovery *discovery);
105
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_init_metadata_register(LassoIdWsf2Discovery *discovery);
106
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_init_metadata_replace(LassoIdWsf2Discovery *discovery);
107
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_init_metadata_delete(LassoIdWsf2Discovery *discovery);
108
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_init_metadata_association_add(
109
		LassoIdWsf2Discovery *discovery);
110
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_init_metadata_association_delete(
111
		LassoIdWsf2Discovery *discovery);
112
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_init_metadata_association_query(
113
		LassoIdWsf2Discovery *discovery);
114

  
115
/* Add metadatas to operate on, to make request, but also to make responses. */
116
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_add_service_metadata(
117
		LassoIdWsf2Discovery *idwsf2_discovery, LassoIdWsf2DiscoSvcMetadata *service_metadata);
118
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_add_simple_service_metadata(
119
		LassoIdWsf2Discovery *idwsf2_discovery, const char *abstract,
120
		const char *provider_id, GList *service_types, GList *options, const char *address,
121
		GList *security_mechanisms);
122
LASSO_EXPORT GList* lasso_idwsf2_discovery_get_metadatas(LassoIdWsf2Discovery *discovery);
123
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_add_requested_service(LassoIdWsf2Discovery *discovery,
124
		GList *service_types, GList *provider_ids, GList *options, GList *security_mechanisms,
125
		GList *frameworks, GList *actions, LassoIdWsf2DiscoveryQueryResultType result_type,
126
		const char *req_id);
127

  
128
/* Build the request message */
129
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_build_request_msg(LassoIdWsf2Discovery *discovery,
130
		const char *security_mechanism);
131

  
132
/* Handle a request */
133
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_process_request_msg(LassoIdWsf2Discovery *discovery,
134
		const char *message);
135
LASSO_EXPORT LassoIdWsf2DiscoveryRequestType lasso_idwsf2_discovery_get_request_type(LassoIdWsf2Discovery *discovery);
136
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_validate_request(LassoIdWsf2Discovery *discovery);
137
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_fail_request(LassoIdWsf2Discovery *discovery,
138
		const char *status_code, const char *status_code2);
139

  
140
/* Process the response */
141
LASSO_EXPORT lasso_error_t lasso_idwsf2_discovery_process_response_msg(LassoIdWsf2Discovery *discovery,
142
		const char *msg);
143
LASSO_EXPORT GList* lasso_idwsf2_discovery_get_endpoint_references(LassoIdWsf2Discovery *discovery);
144
LASSO_EXPORT GList* lasso_idwsf2_discovery_get_svcmdids(LassoIdWsf2Discovery *discovery);
145
LASSO_EXPORT void lasso_idwsf2_discovery_set_svcmdids(LassoIdWsf2Discovery *discovery, GList *svcmdids);
146

  
147

  
148
#ifdef __cplusplus
149
}
150
#endif /* __cplusplus */
151

  
152
#endif /* __LASSO_IDWSF2_DISCOVERY_H__ */
153

  
lasso/id-wsf-2.0/id_wsf_2.h
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_ID_WSF_2_H__
25
#define __LASSO_IDWSF2_ID_WSF_2_H__
26

  
27
#include "session.h"
28
#include "identity.h"
29
#include "discovery.h"
30
#include "data_service.h"
31
#include "server.h"
32

  
33

  
34
#endif /* __LASSO_IDWSF2_ID_WSF_2_H__ */
lasso/id-wsf-2.0/identity.c
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#include "identity.h"
25
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
26
#include "../utils.h"
27
#include "../id-ff/identity.h"
28
#include "../id-ff/identityprivate.h"
29

  
30
gint
31
lasso_identity_add_svc_md_id(LassoIdentity *identity, gchar *svcMDID)
32
{
33
	g_return_val_if_fail(LASSO_IS_IDENTITY(identity), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
34
	g_return_val_if_fail(svcMDID != NULL, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
35

  
36
	lasso_list_add_string(identity->private_data->svcMDID, svcMDID);
37
	identity->is_dirty = TRUE;
38

  
39
	return 0;
40
}
41

  
42
/**
43
 * lasso_identity_get_svc_md_ids:
44
 * @identity: a #LassoIdentity object
45
 *
46
 * Return value:(element-type string): a list of all collected svcMDIDs
47
 */
48
GList*
49
lasso_identity_get_svc_md_ids(LassoIdentity *identity)
50
{
51
	g_return_val_if_fail(LASSO_IS_IDENTITY(identity), NULL);
52

  
53
	return identity->private_data->svcMDID;
54
}
lasso/id-wsf-2.0/identity.h
1
/* $Id: identity.h 2633 2005-09-05 10:00:07Z dlaniel $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_IDENTITY_H__
25
#define __LASSO_IDWSF2_IDENTITY_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29
#endif /* __cplusplus */
30

  
31
#include "../id-ff/identity.h"
32
#include "../export.h"
33
#include <glib.h>
34

  
35
LASSO_EXPORT lasso_error_t lasso_identity_add_svc_md_id(LassoIdentity *identity, gchar *svcMDID);
36

  
37
LASSO_EXPORT GList* lasso_identity_get_svc_md_ids(LassoIdentity *identity);
38

  
39
#ifdef __cplusplus
40
}
41
#endif /* __cplusplus */
42

  
43
#endif /* __LASSO_IDWSF2_IDENTITY_H__ */
44

  
lasso/id-wsf-2.0/idwsf2_helper.c
1
/* $Id: idwsf2_data_service.c 3101 2007-05-30 11:40:10Z dlaniel $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#include "idwsf2_helper.h"
25
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
26
#include "../xml/id-wsf-2.0/disco_abstract.h"
27
#include "../xml/id-wsf-2.0/disco_service_type.h"
28
#include "../xml/id-wsf-2.0/disco_provider_id.h"
29
#include "../xml/id-wsf-2.0/sec_token.h"
30
#include "../xml/id-wsf-2.0/sbf_framework.h"
31
#include "../xml/misc_text_node.h"
32
#include "../utils.h"
33

  
34
/**
35
 * SECTION: idwsf2-helper
36
 *
37
 * Methods to help manipulate EPR elements
38
 */
39

  
40
/**
41
 * lasso_wsa_endpoint_reference_get_idwsf2_service_type:
42
 *
43
 * Return the disco:ServiceType metadata element content
44
 *
45
 * Return value: (transfer none): the content of the first disco:ServiceType metadata, or NULL if
46
 * none is found.
47
 */
48
const char*
49
lasso_wsa_endpoint_reference_get_idwsf2_service_type(const LassoWsAddrEndpointReference *epr)
50
{
51
	LassoIdWsf2DiscoServiceType *disco2_service_type;
52

  
53
	if (! LASSO_IS_WSA_ENDPOINT_REFERENCE (epr) || epr->Metadata == NULL)
54
		return NULL;
55
	disco2_service_type = lasso_extract_gobject_from_list (LassoIdWsf2DiscoServiceType,
56
			LASSO_TYPE_IDWSF2_DISCO_SERVICE_TYPE, epr->Metadata->any);
57
	if (disco2_service_type) {
58
		return disco2_service_type->content;
59
	}
60
	return NULL;
61
}
62

  
63
/**
64
 * lasso_wsa_endpoint_reference_get_idwsf2_provider_id
65
 * @epr: a #LassoWsAddrEndpointReference object
66
 *
67
 * Return the provider ID from the the metadata element of the EPR.
68
 *
69
 * Return value: an entityID identifier or NULL if none is found, or the element is empty.
70
 */
71
const char*
72
lasso_wsa_endpoint_reference_get_idwsf2_provider_id(const LassoWsAddrEndpointReference *epr)
73
{
74
	LassoIdWsf2DiscoProviderID *disco2_provider_id;
75

  
76
	if (! LASSO_IS_WSA_ENDPOINT_REFERENCE (epr) || epr->Metadata == NULL)
77
		return NULL;
78

  
79
	/* Get the service type from the EPR */
80
	disco2_provider_id = lasso_extract_gobject_from_list (LassoIdWsf2DiscoProviderID,
81
			LASSO_TYPE_IDWSF2_DISCO_PROVIDER_ID, epr->Metadata->any);
82

  
83
	if (disco2_provider_id) {
84
		return disco2_provider_id->content;
85
	}
86

  
87
	return NULL;
88
}
89

  
90
/**
91
 * lasso_wsa_endpoint_reference_get_idwsf2_security_context_for_security_mechanism:
92
 * @epr: a #LassoWsAddrEndpointReference object
93
 * @security_mech_predicate: (allow-none): a predicate to test for security mechanism
94
 * @security_mech_id: (allow-none): a security mechanism identifier
95
 * @create: allow to create the element if none if found, @security_mech_id is mandatory when create
96
 * is TRUE.
97
 *
98
 * Return value: (transfer none): a #LassoIdWsf2DiscoSecurityContext, or NULL if none was found and
99
 * created is FALSE.
100
 */
101
LassoIdWsf2DiscoSecurityContext*
102
lasso_wsa_endpoint_reference_get_idwsf2_security_context_for_security_mechanism(
103
		const LassoWsAddrEndpointReference *epr,
104
		gboolean (*sech_mech_predicate)(const char *),
105
		const char *security_mech_id,
106
		gboolean create)
107
{
108
	LassoIdWsf2DiscoSecurityContext *created = NULL;
109
	LassoMiscTextNode *new_security_mech_id_declaration;
110

  
111
	if (! LASSO_IS_WSA_ENDPOINT_REFERENCE (epr) || epr->Metadata == NULL)
112
		return NULL;
113

  
114
	lasso_foreach_full_begin(LassoIdWsf2DiscoSecurityContext*, context, it1, epr->Metadata->any);
115
	if (LASSO_IS_IDWSF2_DISCO_SECURITY_CONTEXT (context)) {
116
		lasso_foreach_full_begin(char*, textnode, it2, context->SecurityMechID);
117
			if (lasso_strisequal(textnode,security_mech_id) || sech_mech_predicate(textnode)) {
118
				return context;
119
			}
120
		lasso_foreach_full_end()
121
	}
122
	lasso_foreach_full_end();
123

  
124
	if (create && security_mech_id) {
125
		created = lasso_idwsf2_disco_security_context_new();
126
		new_security_mech_id_declaration =
127
			lasso_misc_text_node_new_with_string(security_mech_id);
128
		new_security_mech_id_declaration->name = "SecurityMechID";
129
		new_security_mech_id_declaration->ns_href = LASSO_IDWSF2_DISCOVERY_HREF;
130
		new_security_mech_id_declaration->ns_prefix = LASSO_IDWSF2_DISCOVERY_PREFIX;
131
		lasso_list_add_new_gobject (created->SecurityMechID,
132
				new_security_mech_id_declaration);
133
		lasso_list_add_new_gobject (epr->Metadata->any, created);
134
	}
135
	if (create && ! security_mech_id) {
136
		message(G_LOG_LEVEL_WARNING, "cannot create a LassoIdWsf2DiscoSecurityContext withou a security_mech_id");
137
	}
138

  
139
	return created;
140
}
141

  
142
/**
143
 * lasso_wsa_endpoint_reference_get_token_by_usage:
144
 * @epr: a #LassoWsAddrEndpointReference object
145
 * @security_mech_predicate: (allow-none): a predicate to test for security mechanism
146
 * @security_mech_id: (allow-none): a security mechanism identifier
147
 * @usage: the usage to make of the token
148
 *
149
 * Try to find a token for the given usage and security mechanism, the security can be chosen by
150
 * name or by a predicate.
151
 *
152
 * Return value: a #LassoNode object or a subclass, representing the token.
153
 */
154
static LassoNode*
155
lasso_wsa_endpoint_reference_get_token_by_usage(
156
		const LassoWsAddrEndpointReference *epr,
157
		gboolean (*sec_mech_predicate)(const char *),
158
		const char *security_mech_id, const char* usage)
159
{
160
	LassoIdWsf2DiscoSecurityContext *security_context;
161

  
162
	security_context =
163
		lasso_wsa_endpoint_reference_get_idwsf2_security_context_for_security_mechanism(
164
			epr, sec_mech_predicate, security_mech_id, TRUE);
165
	lasso_foreach_full_begin (LassoIdWsf2SecToken*, token, iter, security_context->Token);
166
	if (LASSO_IS_IDWSF2_SEC_TOKEN (token)) {
167
		if (usage && lasso_strisequal(token->usage,usage)) {
168
			if (LASSO_IS_NODE(token->any)) {
169
				return (LassoNode*)token->any;
170
			} else if (token->ref) {
171
				message(G_LOG_LEVEL_WARNING, "sec:Token ref attribute is not supported");
172
				return NULL;
173
			}
174
		}
175

  
176
	}
177
	lasso_foreach_full_end();
178

  
179
	return NULL;
180
}
181

  
182
/**
183
 * lasso_wsa_endpoint_reference_get_security_token:
184
 * @epr: a #LassoWsAddrEndpointReference object
185
 * @sech_mech_predicate:(allow-none): a boolean function to select the security mechanism for which
186
 * we want the security token
187
 * @security_mech_id:(allow-none): an optional specific security mechanism identifier to select the
188
 * security token.
189
 *
190
 * Return the first security token found in the metadata of the @epr object which qualify with
191
 * respect to the predicate or the given security mechanism identifier. It is an error to pass both
192
 * of @sech_mech_predicate and @security_mech_id as NULL.
193
 *
194
 * Return value:(transfer none): a #LassoNode object or NULL if the query cannot be satisfied.
195
 */
196
LassoNode*
197
lasso_wsa_endpoint_reference_get_security_token (const LassoWsAddrEndpointReference *epr,
198
		gboolean (*sech_mech_predicate)(const char *), const char *security_mech_id)
199
{
200
	return lasso_wsa_endpoint_reference_get_token_by_usage (epr, sech_mech_predicate,
201
			security_mech_id, LASSO_IDWSF2_SEC_TOKEN_USAGE_SECURITY_TOKEN);
202
}
203

  
204
/**
205
 * lasso_wsa_endpoint_reference_get_target_identity_token:
206
 * @epr: a #LassoWsAddrEndpointReference object
207
 * @sech_mech_predicate:(allow-none): a boolean function to select the security mechanism for which
208
 * we want the security token
209
 * @security_mech_id:(allow-none): an optional specific security mechanism identifier to select the
210
 * security token.
211
 *
212
 * Return the first target identity token found in the metadata of the @epr object which qualify
213
 * with respect to the predicate or the given security mechanism identifier. It is an error to pass
214
 * both of @sech_mech_predicate and @security_mech_id as NULL.
215
 *
216
 * Return value:(transfer none): a #LassoNode object or NULL if the query cannot be satisfied.
217
 */
218
LassoNode*
219
lasso_wsa_endpoint_reference_get_target_identity_token(const LassoWsAddrEndpointReference *epr,
220
		gboolean (*sech_mech_predicate)(const char *), const char *security_mech_id)
221
{
222
	return lasso_wsa_endpoint_reference_get_token_by_usage (epr, sech_mech_predicate,
223
			security_mech_id, LASSO_IDWSF2_SEC_TOKEN_USAGE_TARGET_IDENTITY);
224
}
225

  
226
/**
227
 * lasso_wsa_endpoint_reference_new_for_idwsf2_service:
228
 * @address: the URL of the SOAP endpoint where the service is anchored
229
 * @service_type: an URI identifying the ID-WSF 2.0 service type
230
 * @provider_id: an URI identifying the SAML 2.0 service provider hosting the service, this should
231
 * help in finding key material for security mechanisms.
232
 * @abstract: a human description of the service.
233
 *
234
 * Create and populate a new #LassoWsAddrEndpointReference object.
235
 *
236
 * Return value: a newly created #LassoWsAddrEndpointReference.
237
 */
238
LassoWsAddrEndpointReference*
239
lasso_wsa_endpoint_reference_new_for_idwsf2_service(const char *address,
240
		const char *service_type, const char *provider_id, const char *abstract)
241
{
242
	LassoWsAddrEndpointReference *epr = NULL;
243
	LassoWsAddrMetadata *metadata = NULL;
244

  
245
	/* Check parameters */
246
	if (address == NULL || service_type == NULL || provider_id == NULL || abstract == NULL)
247
		return NULL;
248

  
249
	/* Build EndpointReference */
250
	epr = lasso_wsa_endpoint_reference_new();
251

  
252
	/* Address */
253
	epr->Address = lasso_wsa_attributed_uri_new_with_string(address);
254

  
255
	/* Metadatas */
256
	metadata = lasso_wsa_metadata_new();
257
	epr->Metadata = metadata;
258

  
259
	/* Abstract */
260
	lasso_list_add_new_gobject(metadata->any,
261
			lasso_idwsf2_disco_abstract_new_with_string(abstract));
262

  
263
	/* ProviderID */
264
	lasso_list_add_new_gobject(metadata->any,
265
			lasso_idwsf2_disco_provider_id_new_with_string(provider_id));
266

  
267
	/* ServiceType */
268
	lasso_list_add_new_gobject(metadata->any,
269
			lasso_idwsf2_disco_service_type_new_with_string(service_type));
270

  
271
	/* Framework */
272
	lasso_list_add_new_gobject(metadata->any,
273
			lasso_idwsf2_sbf_framework_new_full("2.0"));
274

  
275
	return epr;
276
}
277

  
278
/**
279
 * lasso_wsa_endpoint_reference_add_security_token:
280
 * @epr: a #LassoWsAddrEndpointReference object
281
 * @security_token: a security token as a #LassoNode object
282
 * @security_mechanisms:(element-type utf8): a list of security mechanism
283
 * for whom the token is made
284
 *
285
 * Add a new security context declaration for the given security mechanisms identifiers and populate
286
 * it with a security token.
287
 *
288
 * Return value: 0 if successfull, an error code otherwise.
289
 */
290
int
291
lasso_wsa_endpoint_reference_add_security_token(LassoWsAddrEndpointReference *epr,
292
		LassoNode *security_token, GList *security_mechanisms)
293
{
294
	LassoIdWsf2SecToken *sec_token = NULL;
295
	LassoWsAddrMetadata *metadata = NULL;
296
	LassoIdWsf2DiscoSecurityContext *security_context = NULL;
297
	int rc = 0;
298

  
299
	lasso_bad_param(WSA_ENDPOINT_REFERENCE, epr);
300
	lasso_bad_param(NODE, security_token);
301

  
302
	lasso_extract_node_or_fail(metadata, epr->Metadata, WSA_METADATA, LASSO_PARAM_ERROR_INVALID_VALUE);
303

  
304
	sec_token = lasso_idwsf2_sec_token_new();
305
	lasso_assign_gobject(sec_token->any, security_token);
306
	lasso_assign_string(sec_token->usage, LASSO_IDWSF2_SEC_TOKEN_USAGE_SECURITY_TOKEN);
307

  
308
	security_context = lasso_idwsf2_disco_security_context_new();
309
	lasso_assign_list_of_strings(security_context->SecurityMechID,
310
			security_mechanisms);
311
	lasso_list_add_new_gobject(security_context->Token, sec_token);
312
	lasso_list_add_new_gobject(metadata->any, security_context);
313
cleanup:
314
	return rc;
315
}
316

  
317
static GHashTable *_mapping = NULL;
318

  
319
static GHashTable *_get_mapping() {
320
	if (_mapping == NULL) {
321
		_mapping = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify) g_free, NULL);
322
	}
323
	return _mapping;
324
}
325

  
326

  
327
/**
328
 * lasso_wsa_endpoint_reference_associate_service_to_type:
329
 * @service_type_uri: a service type to associate
330
 * @g_type: the type of the profile object handling this service type
331
 *
332
 * Associate a profile type to a service type.
333
 *
334
 * Return value: 0 if successful, an error code otherwise.
335
 */
336
int
337
lasso_wsa_endpoint_reference_associate_service_to_type(
338
		const char *service_type_uri, GType g_type)
339
{
340
	int rc = 0;
341

  
342
	lasso_check_non_empty_string(service_type_uri);
343
	if (! g_type_is_a(g_type, LASSO_TYPE_IDWSF2_PROFILE)) {
344
		return LASSO_PARAM_ERROR_INVALID_VALUE;
345
	}
346
	g_hash_table_insert(_get_mapping(),
347
			g_strdup(service_type_uri), (gpointer)g_type);
348
cleanup:
349
	return rc;
350
}
351

  
352
/**
353
 * lasso_wsa_endpoint_reference_get_service:
354
 * @epr: a #LassoWsAddrEndpointReference object
355
 *
356
 * Get a profile object able to communicate with the service represented by this EPR.
357
 *
358
 * Return object: a newly created #LassoIdWsf2Profile instance.
359
 */
360
LassoIdWsf2Profile *
361
lasso_wsa_endpoint_reference_get_service(
362
		LassoWsAddrEndpointReference *epr)
363
{
364
	GType type;
365
	const char *service_type_uri;
366

  
367
	if (! LASSO_IS_WSA_ENDPOINT_REFERENCE(epr))
368
		return NULL;
369

  
370
	service_type_uri = lasso_wsa_endpoint_reference_get_idwsf2_service_type(epr);
371
	type = (GType)g_hash_table_lookup(_get_mapping(), service_type_uri);
372
	if (type) {
373
		LassoIdWsf2Profile *profile;
374

  
375
		profile = (LassoIdWsf2Profile*)g_object_new(type, NULL);
376
		lasso_idwsf2_profile_set_epr(profile, epr);
377

  
378
		return profile;
379
	}
380
	return NULL;
381
}
lasso/id-wsf-2.0/idwsf2_helper.h
1
/* $Id: wsf_profile.h,v 1.13 2006/11/14 17:07:30 Exp $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_HELPER_H__
25
#define __LASSO_IDWSF2_HELPER_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29
#endif /* __cplusplus */
30

  
31
#include "../xml/ws/wsa_endpoint_reference.h"
32
#include "../xml/id-wsf-2.0/disco_security_context.h"
33
#include "profile.h"
34

  
35

  
36
const char* lasso_wsa_endpoint_reference_get_idwsf2_service_type(
37
		const LassoWsAddrEndpointReference *epr);
38

  
39
const char* lasso_wsa_endpoint_reference_get_idwsf2_provider_id(
40
		const LassoWsAddrEndpointReference *epr);
41

  
42
LassoIdWsf2DiscoSecurityContext*
43
	lasso_wsa_endpoint_reference_get_idwsf2_security_context_for_security_mechanism(
44
			const LassoWsAddrEndpointReference *epr,
45
			gboolean (*sech_mech_predicate)(const char *),
46
			const char *security_mech_id,
47
			gboolean create);
48

  
49
LassoNode* lasso_wsa_endpoint_reference_get_security_token (const LassoWsAddrEndpointReference *epr,
50
		gboolean (*sech_mech_predicate)(const char *), const char *security_mech_id);
51

  
52
LASSO_EXPORT LassoNode* lasso_wsa_endpoint_reference_get_target_identity_token(
53
		const LassoWsAddrEndpointReference *epr,
54
		gboolean (*sech_mech_predicate)(const char *), const char *security_mech_id);
55

  
56
LASSO_EXPORT LassoWsAddrEndpointReference* lasso_wsa_endpoint_reference_new_for_idwsf2_service(
57
		const char *address, const char *service_ype, const char *provider_id,
58
		const char *abstract);
59

  
60
LASSO_EXPORT lasso_error_t lasso_wsa_endpoint_reference_add_security_token(LassoWsAddrEndpointReference *epr,
61
		LassoNode *security_token, GList *security_mechanisms);
62

  
63
LASSO_EXPORT LassoIdWsf2Profile *lasso_wsa_endpoint_reference_get_service(
64
		LassoWsAddrEndpointReference *epr);
65

  
66
LASSO_EXPORT lasso_error_t lasso_wsa_endpoint_reference_associate_service_to_type(
67
		const char *service_type_uri, GType g_type);
68

  
69
#ifdef __cplusplus
70
}
71
#endif /* __cplusplus */
72

  
73
#endif /* __LASSO_IDWSF2_HELPER_H__ */
74

  
lasso/id-wsf-2.0/private.h
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_ID_WSF_20_PRIVATE_H__
25
#define __LASSO_ID_WSF_20_PRIVATE_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29
#endif /* __cplusplus */
30

  
31
extern gboolean lasso_flag_follow_id_wsf_stupid_semantic;
32

  
33
#ifdef __cplusplus
34
}
35
#endif /* __cplusplus */
36

  
37
#endif /* __LASSO_ID_WSF_20_PRIVATE_H__ */
lasso/id-wsf-2.0/profile.c
1
/* $Id: wsf_profile.c,v 1.45 2007/01/05 16:11:02 Exp $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#include <stdio.h>
25
#include "../xml/private.h"
26
#include <libxml/xpath.h>
27
#include <libxml/xpathInternals.h>
28

  
29
#include <xmlsec/xmltree.h>
30
#include <xmlsec/xmldsig.h>
31
#include <xmlsec/templates.h>
32
#include <xmlsec/crypto.h>
33

  
34
#include "../id-ff/server.h"
35
#include "../id-ff/serverprivate.h"
36
#include "../id-ff/providerprivate.h"
37

  
38
#include "../saml-2.0/profileprivate.h"
39

  
40
#include "profile.h"
41
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
42
#include "../xml/idwsf_strings.h"
43
#include "session.h"
44

  
45
#include "../xml/soap-1.1/soap_fault.h"
46
#include "../xml/soap_binding_correlation.h"
47
#include "../xml/soap_binding_provider.h"
48
#include "../xml/soap_binding_processing_context.h"
49
#include "../xml/xml_enc.h"
50
#include "../xml/id-wsf-2.0/sb2_sender.h"
51
#include "../xml/id-wsf-2.0/sb2_redirect_request.h"
52
#include "../xml/id-wsf-2.0/util_status.h"
53

  
54
#include "../xml/ws/wsse_security_header.h"
55

  
56
#include "../xml/saml-2.0/saml2_assertion.h"
57
#include "../xml/misc_text_node.h"
58
#include "../utils.h"
59
#include "idwsf2_helper.h"
60
#include "soap_binding.h"
61
#include "../id-wsf/wsf_utils.h"
62
#include "../saml-2.0/saml2_helper.h"
63

  
64
#define LASSO_IDWSF2_PROFILE_ELEMENT_EPR "Epr"
65
#define LASSO_IDWSF2_PROFILE_ELEMENT_REQUEST "SoapEnvelopeRequest"
66
#define LASSO_IDWSF2_PROFILE_ELEMENT_RESPONSE "SoapEnvelopeResponse"
67

  
68
/**
69
 * LassoIdWsf2ProfilePrivate:
70
 * @epr: the #LassoWsAddrEndpointReference object representing the targetd service
71
 * @soap_envelope_request: the #LassoSoapEnvelope object for the request message
72
 * @soap_envelope_response: the #LassoSoapEnvelope object for the response
73
 */
74
struct _LassoIdWsf2ProfilePrivate {
75
	LassoWsAddrEndpointReference *epr;
76
	LassoSoapEnvelope *soap_envelope_request;
77
	LassoSoapEnvelope *soap_envelope_response;
78
};
79

  
80
#define private_accessors(type, name) \
81
static type \
82
_get_##name(LassoIdWsf2Profile *idwsf2_profile)\
83
{ \
84
	if (idwsf2_profile && idwsf2_profile->private_data) \
85
	{ \
86
		return idwsf2_profile->private_data->name; \
87
	} \
88
	return 0; \
89
} \
90
static void \
91
_set_##name(LassoIdWsf2Profile *idwsf2_profile, \
92
		type what) \
93
{ \
94
	if (idwsf2_profile && idwsf2_profile->private_data) \
95
	{ \
96
		lasso_assign_gobject(idwsf2_profile->private_data->name, what); \
97
	} \
98
}
99

  
100
private_accessors(LassoWsAddrEndpointReference*,epr)
101
private_accessors(LassoSoapEnvelope*,soap_envelope_request)
102
private_accessors(LassoSoapEnvelope*,soap_envelope_response)
103

  
104

  
105
static void
106
_add_fault_for_rc(LassoIdWsf2Profile *profile, int rc)
107
{
108
	LassoSoapFault *fault;
109
	char *code;
110

  
111
	if (rc) {
112
		code = g_strdup_printf("LASSO_ERROR_%i", rc);
113
		fault = lasso_soap_fault_new_full(code, lasso_strerror(rc));
114
		lasso_release(code);
115
		lasso_release_list_of_gobjects(_get_soap_envelope_response(profile)->Header->Other);
116
		lasso_soap_envelope_add_to_body(_get_soap_envelope_response(profile), (LassoNode*)fault);
117
	}
118
}
119

  
120
/**
121
 * lasso_idwsf2_profile_build_soap_envelope:
122
 * @refToMessageId: (allow-none): the string ID of the request
123
 * @providerId: (allow-none): the providerID of the sender
124
 *
125
 * Build a new SOAP envelope, for transmitting an ID-WSF request of response. If the message is a
126
 * response, refer to the request whose ID is @refToMessageId.
127
 *
128
 * Return value: a new #LassoSoapEnvelope if successful, NULL otherwise.
129
 */
130
static LassoSoapEnvelope*
131
lasso_idwsf2_profile_build_soap_envelope(const char *refToMessageId, const char *providerID)
132
{
133
	LassoSoapEnvelope *envelope;
134
	LassoSoapHeader *header;
135
	LassoSoapBody *body;
136
	LassoIdWsf2Sb2Sender *sender;
137
	LassoWsAddrAttributedURI *message_id;
138

  
139
	/* Body */
140
	body = lasso_soap_body_new();
141
	body->Id = lasso_build_unique_id(32);
142
	envelope = lasso_soap_envelope_new(body);
143

  
144
	/* Header */
145
	header = lasso_soap_header_new();
146
	envelope->Header = header;
147

  
148
	if (providerID) {
149
		/* Sender */
150
		sender = lasso_idwsf2_sb2_sender_new();
151
		lasso_assign_string(sender->providerID, providerID);
152
		lasso_list_add_gobject(header->Other, sender);
153
	}
154

  
155
	message_id = lasso_soap_envelope_get_message_id(envelope, TRUE);
156
	message_id->content = lasso_build_unique_id(32);
157

  
158
	if (refToMessageId) {
159
		LassoWsAddrAttributedURI *relates_to;
160
		relates_to = lasso_wsa_attributed_uri_new_with_string(refToMessageId);
161
		lasso_node_set_custom_nodename((LassoNode*)relates_to, "RelatesTo");
162
		lasso_list_add_gobject(header->Other, relates_to);
163
	}
164

  
165
	return envelope;
166
}
167

  
168
/**
169
 * lasso_idwsf2_profile_init_request:
170
 * @profile: a #LassoIdWsf2Profile object
171
 *
172
 * Initialize a new SOAP ID-WSF 2.0 request. Clear the existing request if one is currently set.
173
 *
174
 * Return value: 0 if successful, an error code otherwise.
175
 */
176
gint
177
lasso_idwsf2_profile_init_request(LassoIdWsf2Profile *idwsf2_profile)
178
{
179
	LassoSoapEnvelope *envelope = NULL;
180
	LassoProfile *profile = NULL;
181
	LassoWsAddrEndpointReference *epr;
182
	const char *provider_id = NULL;
183
	int rc = 0;
184

  
185
	lasso_bad_param(IDWSF2_PROFILE, idwsf2_profile);
186
	profile = &idwsf2_profile->parent;
187
	epr = lasso_idwsf2_profile_get_epr(idwsf2_profile);
188

  
189
	if (epr) {
190
		LassoIdWsf2DiscoSecurityContext *security_context;
191

  
192
		security_context =
193
			lasso_wsa_endpoint_reference_get_idwsf2_security_context_for_security_mechanism(
194
				epr, lasso_security_mech_id_is_bearer_authentication, NULL, FALSE);
195
		if (! security_context) {
196
			return LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM;
197
		}
198
	}
199

  
200
	if (LASSO_IS_SERVER(profile->server)) {
201
		provider_id = profile->server->parent.ProviderID;
202
	}
203
	envelope = lasso_idwsf2_profile_build_soap_envelope(NULL, provider_id);
204
	_set_soap_envelope_request(idwsf2_profile, envelope);
205
	lasso_release_gobject(profile->request);
206

  
207
	lasso_release_gobject(envelope);
208
	return rc;
209
}
210

  
211
/**
212
 * lasso_idwsf2_profile_init_response:
213
 * @profile: a #LassoIdWsf2Profile object
214
 *
215
 * Initialize a new SOAP ID-WSF 2.0 response. Clear the existing response if one is currently set.
216
 *
217
 * Return value: 0 if successful, an error code otherwise.
218
 */
219
gint
220
lasso_idwsf2_profile_init_response(LassoIdWsf2Profile *profile)
221
{
222
	char *provider_id = NULL;
223
	LassoSoapEnvelope *soap_envelope;
224
	int rc = 0;
225
	LassoWsAddrAttributedURI *request_message_id;
226
	char *request_message_id_content = NULL;
227

  
228
	lasso_bad_param(IDWSF2_PROFILE, profile);
229

  
230
	if (LASSO_IS_SERVER(profile->parent.server)) {
231
		provider_id = profile->parent.server->parent.ProviderID;
232
	}
233
	request_message_id = lasso_soap_envelope_get_message_id(
234
			lasso_idwsf2_profile_get_soap_envelope_request(profile), FALSE);
235
	if (request_message_id) {
236
		request_message_id_content = request_message_id->content;
237
	}
238
	soap_envelope = lasso_idwsf2_profile_build_soap_envelope(request_message_id_content, provider_id);
239
	_set_soap_envelope_response(profile, soap_envelope);
240
	lasso_release_gobject(profile->parent.response);
241

  
242
	return rc;
243
}
244

  
245
/**
246
 * lasso_idwsf2_profile_build_request_msg:
247
 * @profile: a #LassoIdWsf2Profile object
248
 *
249
 * Serialize and sign, if needed, the SOAP request message, put the result in
250
 * <programlisting>LASSO_PROFILE(profile)->msg_body</programlisting>.
251
 *
252
 * FIXME: really do sign messages.
253
 *
254
 * Return value: 0 if successful, LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED.
255
 */
256
gint
257
lasso_idwsf2_profile_build_request_msg(LassoIdWsf2Profile *profile, const char *security_mech_id)
258
{
259
	LassoWsAddrEndpointReference *epr;
260
	LassoSoapEnvelope *envelope;
261
	int rc = 0;
262

  
263
	lasso_bad_param(IDWSF2_PROFILE, profile);
264
	epr = lasso_idwsf2_profile_get_epr(profile);
265
	envelope = _get_soap_envelope_request(profile);
266

  
267
	/* Handle SOAP Binding and WS-Security, when given an EPR */
268
	if (LASSO_IS_WSA_ENDPOINT_REFERENCE(epr)) {
269
		if (epr->Address != NULL) {
270
			lasso_assign_string(profile->parent.msg_url, epr->Address->content);
271
		}
272

  
273
		/* Default try bearer */
274
		if (security_mech_id == NULL || lasso_security_mech_id_is_bearer_authentication(
275
					security_mech_id)) {
276
			LassoNode *security_token;
277

  
278
			security_token = lasso_wsa_endpoint_reference_get_security_token(epr,
279
					lasso_security_mech_id_is_bearer_authentication, NULL);
280
			if (security_token) {
281
				xmlNode *real_thing;
282

  
283
				real_thing = lasso_node_get_original_xmlnode(security_token);
284
				if (! real_thing) {
285
					message(G_LOG_LEVEL_CRITICAL, "Cannot put the unaltered security token in the header");
286
					goto_cleanup_with_rc(LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED);
287
				} else {
288
					LassoMiscTextNode *misc;
289

  
290
					misc = lasso_misc_text_node_new_with_xml_node(real_thing);
291
					lasso_soap_envelope_add_security_token (envelope, (LassoNode*)misc);
292
					lasso_release_gobject(misc);
293
				}
294
			} else {
295
				message(G_LOG_LEVEL_WARNING, "No security mechanism specified, " \
296
						"failed to find security token for Bearer mechanism");
297
			}
298
			if (lasso_wsa_endpoint_reference_get_target_identity_token(epr,
299
					lasso_security_mech_id_is_bearer_authentication, NULL) != NULL) {
300
				message(G_LOG_LEVEL_CRITICAL, "TargetIdentity token are not supported");
301
			}
302
		} else {
303
			message(G_LOG_LEVEL_CRITICAL, "Only Bearer security mechanism is supported by ID-WSF 2.0 module of Lasso");
304
		}
305
	}
306

  
307
	LASSO_PROFILE(profile)->msg_body = lasso_node_export_to_xml(
308
			LASSO_NODE(_get_soap_envelope_request(profile)));
309

  
310
	if (! LASSO_PROFILE(profile)->msg_body)
311
		return LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED;
312

  
313
cleanup:
314
	return rc;
315
}
316

  
317
/**
318
 * lasso_idwsf2_profile_process_request_msg:
319
 * @wsf2_profile: a #LassoIdWsf2Profile object
320
 * @message: a received SOAP message
321
 *
322
 * Parse a SOAP request message and initialize the SOAP Envelope for the response.
323
 *
324
 * Return value: 0 if successful, an error code otherwise among:
325
 * <itemizedlist>
326
 * <listitem><para>LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if @profile is not a #LassoIdWsf2Profile
327
 * object,</para></listitem>
328
 * <listitem><para>LASSO_PARAM_ERROR_INVALID_VALUE if message is NULL,</para></listitem>
329
 * <listitem><para>LASSO_PROFILE_ERROR_INVALID_MSG if we cannot parse the message,</para></listitem>
330
 * <listitem><para>LASSO_SOAP_ERROR_MISSING_BODY if the message has no body
331
 * content.</para></listitem>
332
 * </itemizedlist>
333
 */
334
gint
335
lasso_idwsf2_profile_process_request_msg(LassoIdWsf2Profile *wsf2_profile, const gchar *message)
336
{
337
	LassoProfile *profile = NULL;
338
	LassoSoapEnvelope *envelope = NULL;
339
	LassoWsAddrAttributedURI *message_id;
340
	char *message_id_content = NULL;
341
	char *provider_id;
342
	int rc = 0;
343

  
344
	lasso_bad_param(IDWSF2_PROFILE, wsf2_profile);
345
	lasso_check_non_empty_string(message);
346

  
347
	/* Clean some fields */
348
	lasso_release_gobject(wsf2_profile->parent.nameIdentifier);
349
	lasso_release_string(wsf2_profile->parent.remote_providerID);
350
	lasso_release_string(wsf2_profile->parent.msg_body);
351
	lasso_release_gobject(wsf2_profile->private_data->soap_envelope_response);
352
	lasso_release_gobject(wsf2_profile->parent.response);
353

  
354
	/* Get soap request */
355
	profile = LASSO_PROFILE(wsf2_profile);
356
	
357
	lasso_assign_new_gobject(wsf2_profile->private_data->soap_envelope_request,
358
			lasso_soap_envelope_new_from_message(message));
359
	if (! LASSO_IS_SOAP_ENVELOPE(_get_soap_envelope_request(wsf2_profile))) {
360
		return LASSO_PROFILE_ERROR_INVALID_MSG;
361
	}
362
	envelope = _get_soap_envelope_request(wsf2_profile);
363
	if (envelope != NULL && envelope->Body != NULL && envelope->Body->any != NULL &&
364
			LASSO_IS_NODE(envelope->Body->any->data)) {
365
		lasso_assign_gobject(profile->request, envelope->Body->any->data);
366
	} else {
367
		rc = LASSO_SOAP_ERROR_MISSING_BODY;
368
	}
369

  
370
	/* Initialize soap response */
371
	message_id = lasso_soap_envelope_get_message_id(
372
			_get_soap_envelope_request(wsf2_profile), FALSE);
373
	if (message_id) {
374
		message_id_content = message_id->content;
375
	}
376
	if (LASSO_IS_SERVER(profile->server)) {
377
		provider_id = profile->server->parent.ProviderID;
378
		lasso_assign_new_gobject(wsf2_profile->private_data->soap_envelope_response,
379
				lasso_idwsf2_profile_build_soap_envelope(message_id_content, provider_id));
380
	}
381
	_add_fault_for_rc(wsf2_profile, rc);
382

  
383
cleanup:
384
	return rc;
385
}
386

  
387
/**
388
 * lasso_idwsf2_profile_check_security_mechanism:
389
 * @profile: a #LassoIdWsf2Profile object
390
 * @security_mech_id:(allow-none): the security mechanism to enforce, if none is provided Bearer is
391
 * assumed.
392
 *
393
 * Check ID-WSF 2.0 Security Mechanism upon the received request. It is mandatory that a
394
 * #LassoServer is setted for the @profile object.
395
 *
396
 * Return value: 0 if the request passed the check, an error code otherwise.
397
 */
398
gint
399
lasso_idwsf2_profile_check_security_mechanism(LassoIdWsf2Profile *profile,
400
		const char *security_mech_id)
401
{
402
	LassoSoapEnvelope *envelope = NULL;
403
	int rc = LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED;
404

  
405
	if (! LASSO_IS_SERVER(profile->parent.server))
406
		return LASSO_PROFILE_ERROR_MISSING_SERVER;
407

  
408
	lasso_bad_param(IDWSF2_PROFILE, profile);
409
	envelope = _get_soap_envelope_request(profile);
410
	/* Verify security mechanism */
411
	if (security_mech_id == NULL ||
412
			lasso_security_mech_id_is_bearer_authentication(security_mech_id) || lasso_security_mech_id_is_saml_authentication(security_mech_id)) {
413
		LassoSaml2Assertion *assertion;
414
		LassoProvider *issuer;
415
		const char *sender_id = NULL, *local_service_id = NULL;
416
		const char *name_qualifier = NULL, *sp_name_qualifier = NULL;
417
		LassoSaml2AssertionValidationState validation_state;
418
		LassoProviderRole role;
419

  
420
		assertion = lasso_soap_envelope_get_saml2_security_token (envelope);
421
		if (assertion == NULL)
422
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_ASSERTION);
423
		validation_state = lasso_saml2_assertion_validate_conditions(assertion, NULL);
424
		if (validation_state != LASSO_SAML2_ASSERTION_VALID)
425
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS);
426
		issuer = lasso_saml2_assertion_get_issuer_provider(assertion, profile->parent.server);
427
		if (! issuer)
428
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_UNKNOWN_ISSUER);
429
		if (issuer == &profile->parent.server->parent || issuer->role == 0) {
430
			role = issuer->private_data->roles;
431
		} else {
432
			role = issuer->role;
433
		}
434
		if ((role & LASSO_PROVIDER_ROLE_IDP) == 0)
435
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP);
436
		lasso_check_good_rc(lasso_provider_verify_single_node_signature(issuer,
437
					(LassoNode*)assertion, "ID"));
438
		lasso_check_good_rc(lasso_saml2_assertion_decrypt_subject(assertion,
439
					profile->parent.server));
440
		if (assertion && assertion->Subject && assertion->Subject->NameID) {
441
			name_qualifier = assertion->Subject->NameID->NameQualifier;
442
			sp_name_qualifier = assertion->Subject->NameID->SPNameQualifier;
443
		}
444
		if (! name_qualifier || lasso_strisnotequal(name_qualifier,issuer->ProviderID))
445
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_ASSERTION);
446
		/* There is two cases for the NameID of the security assertion:
447
		 * - we are the IdP and the Wsp, so the NameQualifier is us and the SPNameQualifier is the
448
		 *   Sender
449
		 * - we are a simple Wsp, so the NameQualifier is an IdP we know and the
450
		 *   SPNameQualifier is us.
451
		 */
452
		if (! profile->parent.server)
453
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_SERVER);
454
		local_service_id = profile->parent.server->parent.ProviderID;
455
		sender_id = lasso_soap_envelope_sb2_get_provider_id(envelope);
456
		if (! sender_id)
457
			goto_cleanup_with_rc(LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID);
458
		if (local_service_id && lasso_strisequal(local_service_id,name_qualifier) &&
459
				sp_name_qualifier && lasso_strisequal(sp_name_qualifier,sender_id)) {
460
			/* Ok. */
461
		} else if (sp_name_qualifier && lasso_strisequal(sp_name_qualifier,local_service_id)) {
462
			/* Ok. */
463
		} else {
464
			goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_ASSERTION);
465
		}
466
	}
467

  
468
	if (security_mech_id != NULL && ! lasso_security_mech_id_is_bearer_authentication(security_mech_id)) {
469
		message(G_LOG_LEVEL_WARNING, "Only Bearer mechanism is supported!");
470
		goto_cleanup_with_rc(LASSO_ERROR_UNIMPLEMENTED);
471
	}
472
	rc = 0;
473
cleanup:
474
	_add_fault_for_rc(profile, rc);
475
	return rc;
476
}
477

  
478
/**
479
 * lasso_idwsf2_profile_init_soap_fault_response:
480
 * @profile: a #LassoIdWsf2Profile object
481
 * @faultcode: a SOAP fault code, see #LASSO_SOAP_FAULT_CLIENT, #LASSO_SOAP_FAULT_SERVER.
482
 * @faultstring:(allow-none): a human description of the error
483
 * @details:(allow-none)(element-type LassoNode): complementary data describing the error, you can use
484
 * #LassoIdWsf2UtilStatus.
485
 *
486
 * Initialize a new SOAP 1.1 fault.
487
 *
488
 * Return value: 0 if successful, an error code otherwise.
489
 */
490
gint
491
lasso_idwsf2_profile_init_soap_fault_response(LassoIdWsf2Profile *profile, const char *faultcode,
492
		const char *faultstring, GList *details)
493
{
494
	int rc = 0;
495
	LassoSoapEnvelope *envelope;
496

  
497
	lasso_check_good_rc(lasso_idwsf2_profile_init_response(profile));
498
	lasso_check_good_rc(lasso_profile_set_soap_fault_response(&profile->parent, faultcode,
499
				faultstring, details));
500
	envelope = lasso_idwsf2_profile_get_soap_envelope_response(profile);
501
	if (envelope) {
502
		lasso_list_add_gobject(envelope->Body->any, profile->parent.response);
503
	}
504
cleanup:
505
	return rc;
506
}
507

  
508
/**
509
 * lasso_idwsf2_profile_redirect_user_for_interaction:
510
 * @profile: a #LassoIdWsf2Profile object
511
 * @redirect_url: an URL where the user must be redirected
512
 *
513
 * Create a SOAP fault containing a RedirectRequest element, with a redirectURL property set to
514
 * @redirect_url concatenated with the parameter "transactionID" set to the messageID of the
515
 * response message.
516
 *
517
 * Return value: 0 if successful, an error code otherwise.
518
 */
519
gint
520
lasso_idwsf2_profile_redirect_user_for_interaction(
521
	LassoIdWsf2Profile *profile, const gchar *redirect_url, gboolean for_data)
522
{
523
	LassoSoapFault *fault = NULL;
524
	char *url = NULL;
525
	LassoIdWsf2Sb2RedirectRequest *redirect_request = NULL;
526
	LassoIdWsf2Sb2UserInteractionHint hint;
527
	LassoIdWsf2Sb2UserInteractionHeader *user_interaction_header;
528
	LassoSoapEnvelope *soap_envelope_request;
529
	LassoWsAddrAttributedURI *messageID;
530
	int rc = 0;
531

  
532
	lasso_bad_param(IDWSF2_PROFILE, profile);
533
	lasso_check_non_empty_string(redirect_url);
534

  
535
	soap_envelope_request = lasso_idwsf2_profile_get_soap_envelope_request(profile);
536
	if (! soap_envelope_request) {
537
		return LASSO_PROFILE_ERROR_MISSING_REQUEST;
538
	}
539
	hint = lasso_soap_envelope_get_sb2_user_interaction_hint(soap_envelope_request);
540
	switch (hint) {
541
		case LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_DO_NOT_INTERACT:
542
			goto_cleanup_with_rc(LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED);
543
		case LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_DO_NOT_INTERACT_FOR_DATA:
544
			if (for_data) {
545
				goto_cleanup_with_rc(LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA);
546
			}
547
		default:
548
			break;
549
	}
550
	user_interaction_header =
551
		lasso_soap_envelope_get_sb2_user_interaction_header(soap_envelope_request, FALSE);
552
	if (user_interaction_header == FALSE) {
553
		goto_cleanup_with_rc(LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER);
554
	}
555

  
556
	messageID = lasso_soap_envelope_get_message_id(_get_soap_envelope_response(profile), FALSE);
557
	if (! messageID || ! messageID->content) {
558
		goto_cleanup_with_rc(
559
				LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID);
560
	}
561
	if (strchr(redirect_url, '?')) {
562
		url = g_strconcat(redirect_url, "&transactionID=", messageID->content, NULL);
563
	} else {
564
		url = g_strconcat(redirect_url, "?transactionID=", messageID->content, NULL);
565
	}
566
	redirect_request = lasso_idwsf2_sb2_redirect_request_new_full(url);
567
	lasso_release(url);
568
	lasso_check_good_rc(lasso_idwsf2_profile_init_soap_fault_response(profile,
569
				LASSO_SOAP_FAULT_CODE_SERVER, "Server Error", &(GList){ .data =
570
				redirect_request, .next = NULL, .prev = NULL } ));
571

  
572
cleanup:
573
	if (rc) {
574
		LassoIdWsf2UtilStatus *status;
575
		const char *status_code = NULL;
576
		fault = (LassoSoapFault*)profile->parent.response;
577
		lasso_assign_string(fault->faultcode, LASSO_SOAP_FAULT_CODE_SERVER);
578
		switch (rc) {
579
			case LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED:
580
				status_code = LASSO_IDWSF2_SB2_STATUS_CODE_SERVER_INTERACTION_REQUIRED;
581
				break;
582
			case LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA:
583
				status_code = LASSO_IDWSF2_SB2_STATUS_CODE_SERVER_INTERACTION_REQUIRED;
584
				break;
585
			case LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER:
586
				status_code = "RedirectRequestNeeded";
587
				break;
588
			default:
589
				status_code = "UnknownInteraction error";
590
				break;
591
		}
592
		if (status_code) {
593
			status = lasso_idwsf2_util_status_new_with_code(status_code, NULL);
594
			lasso_idwsf2_profile_init_soap_fault_response(profile,
595
					LASSO_SOAP_FAULT_CODE_SERVER, NULL, 
596
					&(GList){ .data = status, .next = NULL, .prev = NULL});
597
		} else {
598
			lasso_idwsf2_profile_init_soap_fault_response(profile,
599
					LASSO_SOAP_FAULT_CODE_SERVER, NULL, NULL);
600
		}
601

  
602
	}
603
	lasso_release_gobject(redirect_request);
604
	return rc;
605
}
606
/**
607
 * lasso_idwsf2_profile_build_response_msg:
608
 * @idwsf2_profile: a #LassoIdWsf2Profile object
609
 *
610
 * Serialize and sign the SOAP, if needed, the response message, put the result in
611
 * <programlisting>LASSO_PROFILE(profile)->msg_body</programlisting>.
612
 *
613
 * Return value: 0 if successful, LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED otherwise.
614
 */
615
gint
616
lasso_idwsf2_profile_build_response_msg(LassoIdWsf2Profile *idwsf2_profile)
617
{
618
	LassoSoapEnvelope *envelope;
619

  
620
	lasso_bad_param(IDWSF2_PROFILE, idwsf2_profile);
621

  
622
	envelope = lasso_idwsf2_profile_get_soap_envelope_response(idwsf2_profile);
623
	if (envelope == NULL) {
624
		return LASSO_PROFILE_ERROR_MISSING_RESPONSE;
625
	}
626
	idwsf2_profile->parent.msg_body = lasso_node_export_to_xml((LassoNode*)envelope);
627

  
628
	if (! LASSO_PROFILE(idwsf2_profile)->msg_body) {
629
		return LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED;
630
	}
631
	return 0;
632
}
633

  
634
/**
635
 * lasso_idwsf2_profile_process_response_msg:
636
 * @profile: a #LassoIdWsf2Profile object
637
 * @message: a string containing a response message
638
 *
639
 * Parse a response received by SOAP. Place the parsed message in the #LassoIdWsf2Profile structure
640
 * in the @soap_envelope_response field and the content of the body in the @response field.
641
 *
642
 * Return value: 0 if successful, one of those error codes if the call fails:
643
 * <itemizedlist>
644
 * <listitem><para>LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if first parameter is not
645
 * a #LassoIdWsf2Profile object,</para></listitem>
646
 * <listitem><para>LASSO_PARAM_ERROR_INVALID_VALUE if message is NULL,</para></listitem>
647
 * <listitem><para>LASSO_SOAP_ERROR_MISSING_BODY if no body element is found,</para></listitem>
648
 * <listitem><para>LASSO_PROFILE_ERROR_MISSING_RESPONSE if the body element is
649
 * empty.</para></listitem>
650
 * </itemizedlist>
651
 */
652
gint
653
lasso_idwsf2_profile_process_response_msg(LassoIdWsf2Profile *profile, const gchar *message)
654
{
655
	LassoSoapEnvelope *envelope = NULL;
656
	int rc = 0;
657

  
658
	lasso_bad_param(IDWSF2_PROFILE, profile);
659
	lasso_check_non_empty_string(message);
660

  
661
	envelope = lasso_soap_envelope_new_from_message(message);
662
	_set_soap_envelope_response(profile, envelope);
663

  
664
	goto_cleanup_if_fail_with_rc (envelope != NULL,
665
			LASSO_PROFILE_ERROR_INVALID_RESPONSE);
666
	goto_cleanup_if_fail_with_rc (envelope->Body != NULL,
667
			LASSO_SOAP_ERROR_MISSING_BODY);
668
	goto_cleanup_if_fail_with_rc (envelope->Body->any != NULL &&
669
			LASSO_IS_NODE(envelope->Body->any->data),
670
			LASSO_PROFILE_ERROR_MISSING_RESPONSE);
671

  
672
	lasso_assign_gobject(profile->parent.response,
673
			envelope->Body->any->data);
674

  
675
	if (LASSO_IS_SOAP_FAULT(profile->parent.response)) {
676
		LassoSoapFault *fault = (LassoSoapFault*)profile->parent.response;
677
		if (LASSO_IS_SOAP_DETAIL(fault->Detail)) {
678
			LassoIdWsf2Sb2RedirectRequest *redirect_request;
679
			redirect_request =
680
				lasso_extract_gobject_from_list(
681
						LassoIdWsf2Sb2RedirectRequest,
682
						LASSO_TYPE_IDWSF2_SB2_REDIRECT_REQUEST,
683
						fault->Detail->any);
684
			if (redirect_request) {
685
				lasso_assign_string(profile->parent.msg_url, redirect_request->redirectURL);
686
				return LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST;
687
			}
688
			return LASSO_WSF_PROFILE_ERROR_SOAP_FAULT;
689

  
690
		}
691
	}
692

  
693
cleanup:
694
	return rc;
695
}
696

  
697
/**
698
 * lasso_idwsf2_profile_get_soap_envelope_request:
699
 * @idwsf2_profile: a #LassoIdWsf2Profile object
700
 *
701
 * Return the last parsed SOAP request object.
702
 *
703
 * Return value:(transfer none): a #LassoSoapEnvelope object or NULL if no request as ever been
704
 * parsed with this object. You must free this object.
705
 */
706
LassoSoapEnvelope*
707
lasso_idwsf2_profile_get_soap_envelope_request(LassoIdWsf2Profile *idwsf2_profile)
708
{
709
	return _get_soap_envelope_request(idwsf2_profile);
710

  
711
}
712

  
713
/**
714
 * lasso_idwsf2_profile_get_soap_envelope_response:
715
 * @idwsf2_profile: a #LassoIdWsf2Profile object
716
 *
717
 * Return the last parsed SOAP response object.
718
 *
719
 * Return value:(transfer none): a #LassoSoapEnvelope object or NULL if no response as ever been
720
 * parsed with this objects. You must free this object.
721
 */
722
LassoSoapEnvelope*
723
lasso_idwsf2_profile_get_soap_envelope_response(LassoIdWsf2Profile *idwsf2_profile)
724
{
725
	return _get_soap_envelope_response(idwsf2_profile);
726

  
727
}
728

  
729
/**
730
 * lasso_idwsf2_profile_get_name_identifier:
731
 * @idwsf2_profile: a #LassoIdWsf2Profile object
732
 *
733
 * Return the NameIdentifier found in a WS-Security authentication token, when Bearer or SAML
734
 * security mechanism is used. This method does not validate any security conditions on the
735
 * assertion.
736
 *
737
 * Return value:(transfer full)(allow-none): a #LassoNode object or NULL.
738
 */
739
LassoNode *
740
lasso_idwsf2_profile_get_name_identifier(LassoIdWsf2Profile *idwsf2_profile)
741
{
742
	LassoSaml2Assertion *assertion = NULL;
743
	LassoSaml2NameID *nameID = NULL;
744
	LassoIdWsf2Sb2TargetIdentity *target_identity = NULL;
745
	LassoSaml2EncryptedElement *encryptedID = NULL;
746

  
747
	if (! LASSO_IS_IDWSF2_PROFILE(idwsf2_profile))
748
		return NULL;
749

  
750
	/** Already extracted, return it */
751
	if (idwsf2_profile->parent.nameIdentifier != NULL)
752
		goto cleanup;
753

  
754
	/* Try to get a SAML2 assertion */
755
	assertion = lasso_soap_envelope_get_saml2_security_token
756
		(lasso_idwsf2_profile_get_soap_envelope_request(idwsf2_profile));
757
	if (assertion && assertion->Subject) {
758

  
759
		if (lasso_saml2_assertion_decrypt_subject(assertion,
760
					idwsf2_profile->parent.server) != 0) {
761
			goto cleanup;
762
		}
763

  
764
		lasso_assign_gobject (nameID, assertion->Subject->NameID);
765
	}
766
	/* We found nothing */
767
	if (!nameID && !encryptedID) {
768
		GList *it;
769
		/* Go look at the target identity */
770
		target_identity = lasso_soap_envelope_sb2_get_target_identity_header (
771
				lasso_idwsf2_profile_get_soap_envelope_request (idwsf2_profile));
772
		if (target_identity) {
773
			lasso_foreach (it, target_identity->any)
774
			{
775
				if (LASSO_IS_SAML2_NAME_ID(it->data)) {
776
					lasso_assign_gobject (nameID, it->data);
777
					break;
778
				}
779
				if (LASSO_IS_SAML2_ENCRYPTED_ELEMENT(it->data)) {
780
					lasso_assign_gobject (encryptedID, it->data);
781
					break;
782
				}
783
			}
784
		}
785
	}
786

  
787
	if (!nameID && encryptedID) {
788
		/* We need a server object to check for audience and decrypt encrypted NameIDs */
789
		if (! LASSO_IS_SERVER(idwsf2_profile->parent.server)) {
790
			goto cleanup;
791
		}
792
		if (lasso_saml20_profile_process_name_identifier_decryption(&idwsf2_profile->parent, &nameID,
793
					&encryptedID) != 0) {
794
			message(G_LOG_LEVEL_WARNING, "process_name_identifier_decryption failed "\
795
					"when retrieving name identifier for ID-WSF profile");
796
		}
797
	}
798

  
799
cleanup:
800
	lasso_release_gobject (assertion);
801
	lasso_release_gobject (encryptedID);
802
	lasso_assign_gobject (idwsf2_profile->parent.nameIdentifier, nameID);
803
	return (LassoNode*)nameID;
804
}
805

  
806
/**
807
 * lasso_idwsf2_profile_get_epr:
808
 * @idwsf2_profile: a #LassoIdWsf2Profile object
809
 * @epr: a #LassoWsAddrEndpointReference object
810
 *
811
 * Set the EPR for the service targeted by the profile object.
812
 *
813
 */
814
void
815
lasso_idwsf2_profile_set_epr(LassoIdWsf2Profile *idwsf2_profile,
816
		LassoWsAddrEndpointReference *epr)
817
{
818
	if (! LASSO_IS_IDWSF2_PROFILE(idwsf2_profile) || ! LASSO_IS_WSA_ENDPOINT_REFERENCE(epr) ||
819
			! idwsf2_profile->private_data)
820
		return;
821
	_set_epr(idwsf2_profile, epr);
822
}
823

  
824
/**
825
 * lasso_idwsf2_profile_get_epr:
826
 * @idwsf2_profile: a #LassoIdWsf2Profile object
827
 *
828
 * Return the EPR used by this profile.
829
 *
830
 * Return value:(transfer none): a #LassoWsAddrEndpointReference object, or NULL if none is set.
831
 */
832
LassoWsAddrEndpointReference*
833
lasso_idwsf2_profile_get_epr(LassoIdWsf2Profile *idwsf2_profile)
834
{
835
	if (! LASSO_IS_IDWSF2_PROFILE(idwsf2_profile) || ! idwsf2_profile->private_data)
836
		return NULL;
837
	return _get_epr(idwsf2_profile);
838
}
839

  
840

  
841
static LassoNodeClass *parent_class = NULL;
842

  
843
static void
844
dispose(GObject *object)
845
{
846
	LassoIdWsf2Profile *profile = LASSO_IDWSF2_PROFILE(object);
847

  
848
	if (profile->private_data) {
849
		lasso_release_gobject(profile->private_data->soap_envelope_request);
850
		lasso_release_gobject(profile->private_data->soap_envelope_response);
851
	}
852
	lasso_release(profile->private_data);
853

  
854
	G_OBJECT_CLASS(parent_class)->dispose(object);
855
}
856

  
857
static void
858
instance_init(LassoIdWsf2Profile *discovery)
859
{
860
	discovery->private_data = g_new0(LassoIdWsf2ProfilePrivate, 1);
861
}
862

  
863
static xmlNode*
864
get_xmlNode(LassoNode *node, gboolean lasso_dump)
865
{
866
	xmlNode *xmlnode;
867
	LassoProfile *profile = LASSO_PROFILE(node);
868
	LassoIdWsf2Profile *wsf2_profile = (LassoIdWsf2Profile*)profile;
869

  
870
	if (! LASSO_IS_IDWSF2_PROFILE(profile))
871
		return NULL;
872

  
873
	xmlnode = parent_class->get_xmlNode(node, lasso_dump);
874

  
875
	if (xmlnode && wsf2_profile->private_data) {
876
		LassoIdWsf2ProfilePrivate *pdata = wsf2_profile->private_data;
877
		if (pdata->epr) {
878
			xmlNode *epr;
879
			epr = xmlNewChild(xmlnode, NULL, BAD_CAST LASSO_IDWSF2_PROFILE_ELEMENT_EPR,
880
					NULL);
881
			xmlAddChild(epr, lasso_node_get_xmlNode((LassoNode*) pdata->epr,
882
						lasso_dump));
883
		}
884
		if (pdata->soap_envelope_request) {
885
			xmlNode *request;
886
			request = xmlNewChild(xmlnode, NULL, BAD_CAST
887
					LASSO_IDWSF2_PROFILE_ELEMENT_REQUEST, NULL);
888
			xmlAddChild(request,
889
					lasso_node_get_xmlNode(
890
						(LassoNode*)pdata->soap_envelope_request,
891
						lasso_dump));
892
		}
893
		if (pdata->soap_envelope_response) {
894
			xmlNode *response;
895
			response = xmlNewChild(xmlnode, NULL, BAD_CAST
896
					LASSO_IDWSF2_PROFILE_ELEMENT_RESPONSE, NULL);
897
			xmlAddChild(response, lasso_node_get_xmlNode((LassoNode*)
898
						pdata->soap_envelope_response, lasso_dump));
899
		}
900
	}
901

  
902
	return xmlnode;
903
}
904

  
905
static int
906
init_from_xml(LassoNode *node, xmlNode *xmlnode)
907
{
908
	LassoIdWsf2Profile *wsf2_profile = (LassoIdWsf2Profile*)node;
909
	xmlNode *epr_node, *request_node, *response_node;
910
	LassoWsAddrEndpointReference *epr = NULL;
911
	LassoSoapEnvelope *request = NULL, *response = NULL;
912

  
913
	if (! LASSO_IS_IDWSF2_PROFILE(wsf2_profile))
914
		return LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ;
915

  
916
	parent_class->init_from_xml(node, xmlnode);
917

  
918
	if (xmlnode == NULL)
919
		return LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED;
920

  
921
	if (! wsf2_profile->private_data) {
922
		wsf2_profile->private_data = g_new0(LassoIdWsf2ProfilePrivate, 1);
923
	}
924
	epr_node = xmlSecFindChild(xmlnode, BAD_CAST LASSO_IDWSF2_PROFILE_ELEMENT_EPR, BAD_CAST
925
			LASSO_LASSO_HREF);
926
	request_node = xmlSecFindChild(xmlnode, BAD_CAST LASSO_IDWSF2_PROFILE_ELEMENT_REQUEST,
927
			BAD_CAST LASSO_LASSO_HREF);
928
	response_node = xmlSecFindChild(xmlnode, BAD_CAST LASSO_IDWSF2_PROFILE_ELEMENT_RESPONSE,
929
			BAD_CAST LASSO_LASSO_HREF);
930

  
931
	if (epr_node) {
932
		epr_node = xmlSecFindChild(epr_node, BAD_CAST "EndpointReference", BAD_CAST
933
				LASSO_WSA_HREF);
934
	}
935
	if (request_node) {
936
		request_node = xmlSecFindChild(request_node, BAD_CAST "Envelope", BAD_CAST
937
				LASSO_SOAP_ENV_HREF);
938
	}
939
	if (response_node) {
940
		response_node = xmlSecFindChild(response_node, BAD_CAST "Envelope", BAD_CAST
941
				LASSO_SOAP_ENV_HREF);
942
	}
943

  
944
	if (epr_node) {
945
		epr = (LassoWsAddrEndpointReference*)lasso_node_new_from_xmlNode(epr_node);
946
		if (! LASSO_IS_WSA_ENDPOINT_REFERENCE(epr)) {
947
			lasso_release_gobject(epr);
948
		}
949
	}
950
	if (request_node) {
951
		request = (LassoSoapEnvelope*)lasso_node_new_from_xmlNode(request_node);
952
		if (! LASSO_IS_SOAP_ENVELOPE(request)) {
953
			lasso_release_gobject(request);
954
		}
955
	}
956
	if (response_node) {
957
		response = (LassoSoapEnvelope*)lasso_node_new_from_xmlNode(response_node);
958
		if (! LASSO_IS_SOAP_ENVELOPE(response)) {
959
			lasso_release_gobject(response);
960
		}
961
	}
962

  
963
	lasso_assign_new_gobject(wsf2_profile->private_data->epr, epr);
964
	lasso_assign_new_gobject(wsf2_profile->private_data->soap_envelope_request, request);
965
	lasso_assign_new_gobject(wsf2_profile->private_data->soap_envelope_response, response);
966

  
967
	return 0;
968
}
969

  
970
static void
971
class_init(LassoIdWsf2ProfileClass *klass, void *unused G_GNUC_UNUSED)
972
{
973
	parent_class = g_type_class_peek_parent(klass);
974

  
975
	G_OBJECT_CLASS(klass)->dispose = dispose;
976
	klass->parent.parent.get_xmlNode = get_xmlNode;
977
	klass->parent.parent.init_from_xml = init_from_xml;
978
}
979

  
980
GType
981
lasso_idwsf2_profile_get_type()
982
{
983
	static GType this_type = 0;
984

  
985
	if (!this_type) {
986
		static const GTypeInfo this_info = {
987
			sizeof(LassoIdWsf2ProfileClass),
988
			NULL,
989
			NULL,
990
			(GClassInitFunc) class_init,
991
			NULL,
992
			NULL,
993
			sizeof(LassoIdWsf2Profile),
994
			0,
995
			(GInstanceInitFunc) instance_init,
996
			NULL
997
		};
998

  
999
		this_type = g_type_register_static(LASSO_TYPE_PROFILE,
1000
				"LassoIdWsf2Profile", &this_info, 0);
1001
	}
1002
	return this_type;
1003
}
1004

  
lasso/id-wsf-2.0/profile.h
1
/* $Id: wsf_profile.h,v 1.13 2006/11/14 17:07:30 Exp $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_PROFILE_H__
25
#define __LASSO_IDWSF2_PROFILE_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29
#endif /* __cplusplus */
30

  
31
#include "../id-ff/profile.h"
32
#include "../xml/soap-1.1/soap_envelope.h"
33
#include "../xml/ws/wsa_endpoint_reference.h"
34

  
35
#define LASSO_TYPE_IDWSF2_PROFILE (lasso_idwsf2_profile_get_type())
36
#define LASSO_IDWSF2_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
37
	   LASSO_TYPE_IDWSF2_PROFILE, LassoIdWsf2Profile))
38
#define LASSO_IDWSF2_PROFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
39
	   LASSO_TYPE_IDWSF2_PROFILE, LassoIdWsf2ProfileClass))
40
#define LASSO_IS_IDWSF2_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
41
	   LASSO_TYPE_IDWSF2_PROFILE))
42
#define LASSO_IS_IDWSF2_PROFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
43
	   LASSO_TYPE_IDWSF2_PROFILE))
44
#define LASSO_IDWSF2_PROFILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), \
45
	   LASSO_TYPE_IDWSF2_PROFILE, LassoIdWsf2ProfileClass))
46

  
47

  
48
typedef struct _LassoIdWsf2Profile LassoIdWsf2Profile;
49
typedef struct _LassoIdWsf2ProfileClass LassoIdWsf2ProfileClass;
50
typedef struct _LassoIdWsf2ProfilePrivate LassoIdWsf2ProfilePrivate;
51

  
52
struct _LassoIdWsf2Profile {
53
	LassoProfile parent;
54

  
55
	/*< private >*/
56
	LassoIdWsf2ProfilePrivate *private_data;
57
};
58

  
59
struct _LassoIdWsf2ProfileClass {
60
	LassoProfileClass parent;
61
};
62

  
63
LASSO_EXPORT GType lasso_idwsf2_profile_get_type(void);
64

  
65
/* Initialize profile */
66
LASSO_EXPORT void lasso_idwsf2_profile_set_epr(LassoIdWsf2Profile *idwsf2_profile,
67
		LassoWsAddrEndpointReference *epr);
68
LASSO_EXPORT LassoWsAddrEndpointReference* lasso_idwsf2_profile_get_epr(
69
		LassoIdWsf2Profile *idwsf2_profile);
70

  
71
/* Initialize requests */
72
LASSO_EXPORT lasso_error_t lasso_idwsf2_profile_init_request(LassoIdWsf2Profile *profile);
73

  
74
/* Build request message */
75
LASSO_EXPORT lasso_error_t lasso_idwsf2_profile_build_request_msg(LassoIdWsf2Profile *profile,
76
		const char *security_mech_id);
77

  
78
/* Handle request */
79
LASSO_EXPORT lasso_error_t lasso_idwsf2_profile_process_request_msg(LassoIdWsf2Profile *profile,
80
		const char *msg);
81
LASSO_EXPORT lasso_error_t lasso_idwsf2_profile_check_security_mechanism(LassoIdWsf2Profile *profile,
82
		const char *security_mech_id);
83
LASSO_EXPORT LassoSoapEnvelope* lasso_idwsf2_profile_get_soap_envelope_request(
84
		LassoIdWsf2Profile *idwsf2_profile);
85
LASSO_EXPORT LassoNode *lasso_idwsf2_profile_get_name_identifier(
86
		LassoIdWsf2Profile *idwsf2_profile);
87

  
88
/* Initialize response */
89
LASSO_EXPORT lasso_error_t lasso_idwsf2_profile_init_response(LassoIdWsf2Profile *profile);
90
LASSO_EXPORT lasso_error_t lasso_idwsf2_profile_init_soap_fault_response(LassoIdWsf2Profile *profile,
91
		const char *faultcode, const char *faultstring,
92
		GList *details);
93
LASSO_EXPORT lasso_error_t lasso_idwsf2_profile_redirect_user_for_interaction(LassoIdWsf2Profile *profile,
94
		const gchar *redirect_url, gboolean for_data);
95

  
96
/* Build response message */
97
LASSO_EXPORT lasso_error_t lasso_idwsf2_profile_build_response_msg(LassoIdWsf2Profile *profile);
98

  
99
/* Handle response */
100
LASSO_EXPORT lasso_error_t lasso_idwsf2_profile_process_response_msg(LassoIdWsf2Profile *profile,
101
		const char *msg);
102
LASSO_EXPORT LassoSoapEnvelope* lasso_idwsf2_profile_get_soap_envelope_response(
103
		LassoIdWsf2Profile *idwsf2_profile);
104

  
105
#ifdef __cplusplus
106
}
107
#endif /* __cplusplus */
108

  
109
#endif /* __LASSO_IDWSF2_PROFILE_H__ */
110

  
lasso/id-wsf-2.0/saml2_login.c
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#include "saml2_login.h"
25
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
26
#include "identity.h"
27
#include "server.h"
28
#include "session.h"
29
#include "../id-ff/login.h"
30
#include "../saml-2.0/saml2_helper.h"
31
#include "../saml-2.0/provider.h"
32
#include "../xml/saml-2.0/saml2_assertion.h"
33
#include "../xml/ws/wsa_endpoint_reference.h"
34
#include "../xml/id-wsf-2.0/disco_abstract.h"
35
#include "../xml/id-wsf-2.0/disco_provider_id.h"
36
#include "../xml/id-wsf-2.0/disco_service_type.h"
37
#include "../xml/id-wsf-2.0/disco_service_context.h"
38
#include "../xml/id-wsf-2.0/disco_security_context.h"
39
#include "../xml/id-wsf-2.0/sec_token.h"
40
#include "../xml/id-wsf-2.0/sbf_framework.h"
41
#include "../id-wsf/wsf_utils.h"
42
#include "../xml/saml-2.0/saml2_attribute.h"
43
#include "../xml/saml-2.0/saml2_attribute_statement.h"
44
#include "../xml/saml-2.0/saml2_attribute_value.h"
45
#include "../xml/saml-2.0/samlp2_response.h"
46
#include "idwsf2_helper.h"
47
#include "../xml/private.h"
48

  
49

  
50
/**
51
 * lasso_server_create_assertion_as_idwsf2_security_token:
52
 * @server: a #LassoServer object
53
 * @name_id: a #LassoSaml2NameID object
54
 * @tolerance: tolerance around the normal duration which is accepted
55
 * @duration: life duration for this assertion in seconds
56
 * @cipher: whether to cipher the NameID
57
 * @audience:(allow-none)(optional): if @cipher is true, the provider for which to encrypt the NameID
58
 *
59
 * Create a new assertion usable as a security token in an ID-WSF 2.0 EndpointReference. See
60
 * lasso_saml2_assertion_set_basic_conditions() for detail about @tolerance and @duration.
61
 *
62
 * Return value:(transfer full)(allow-none): a newly allocated #LassoSaml2Assertion object, or NULL.
63
 */
64
LassoSaml2Assertion*
65
lasso_server_create_assertion_as_idwsf2_security_token(LassoServer *server,
66
		LassoSaml2NameID *name_id,
67
		int tolerance,
68
		int duration,
69
		gboolean cipher,
70
		LassoProvider *audience)
71
{
72
	LassoSaml2Assertion *assertion;
73
	int rc = 0;
74

  
75
	if (! LASSO_IS_SERVER(server))
76
		return NULL;
77
	if (! LASSO_IS_SAML2_NAME_ID(name_id))
78
		return NULL;
79
	if (cipher && ! LASSO_IS_PROVIDER(audience))
80
		return NULL;
81

  
82
	assertion = (LassoSaml2Assertion*)lasso_saml2_assertion_new();
83
	assertion->ID = lasso_build_unique_id(32);
84
	assertion->Issuer = (LassoSaml2NameID*)lasso_saml2_name_id_new_with_string(server->parent.ProviderID);
85
	assertion->Subject = (LassoSaml2Subject*)lasso_saml2_subject_new();
86
	if (cipher) {
87
		LassoSaml2EncryptedElement *encrypted_id =
88
			lasso_provider_saml2_node_encrypt(audience, (LassoNode*)name_id);
89
		if (! encrypted_id) {
90
			lasso_release_gobject(assertion);
91
			goto cleanup;
92
		}
93
		lasso_assign_new_gobject(assertion->Subject->EncryptedID, encrypted_id);
94
	} else {
95
		lasso_assign_new_gobject(assertion->Subject->NameID, name_id);
96
	}
97
	lasso_saml2_assertion_set_basic_conditions(assertion,
98
			tolerance, duration, FALSE);
99
	rc = lasso_server_saml2_assertion_setup_signature(server, assertion);
100
	if (rc != 0) {
101
		lasso_release_gobject(assertion);
102
	}
103
cleanup:
104
	return assertion;
105
}
106

  
107

  
108

  
109

  
110
/**
111
 * lasso_login_idwsf2_add_discovery_bootstrap_epr:
112
 * @login: a #LassoLogin object
113
 * @url: the Disco service address
114
 * @abstract: the Disco service description
115
 * @security_mechanisms:(allow-none)(element-type utf8): the list of supported security mechanisms
116
 * @tolerance:(default -1): see lasso_saml2_assertion_set_basic_conditions().
117
 * @duration:(default 0): see lasso_saml2_assertion_set_basic_conditions().
118
 *
119
 * Add the needed bootstrap attribute to the #LassoSaml2Assertion currently container in the
120
 * #LassoLogin object. This function should be called after lasso_login_build_assertion() by an IdP
121
 * also having the Discovery service role.
122
 *
123
 * The default @tolerance and @duration are respectively ten minutes and two days.
124
 *
125
 * Return value: 0 if successfull, otherwise #LASSO_PROFILE_ERROR_MISSING_ASSERTION if no assertion is present
126
 * in the #LassoLogin object, #LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin
127
 * object.
128
 */
129
int
130
lasso_login_idwsf2_add_discovery_bootstrap_epr(LassoLogin *login, const char *url,
131
		const char *abstract, GList *security_mechanisms, int tolerance, int duration)
132
{
133
	LassoWsAddrEndpointReference *epr = NULL;
134
	LassoWsAddrMetadata *metadata = NULL;
135
	LassoSaml2AttributeStatement *attributeStatement = NULL;
136
	LassoSaml2Attribute *attribute = NULL;
137
	LassoSaml2AttributeValue *attributeValue = NULL;
138
	LassoIdWsf2DiscoSecurityContext *security_context = NULL;
139
	LassoIdWsf2SecToken *sec_token = NULL;
140
	LassoSaml2Assertion *assertion_identity_token = NULL;
141
	LassoSaml2Assertion *assertion = NULL;
142
	LassoServer *server = NULL;
143
	LassoSaml2NameID *name_id = NULL;
144
	int rc = 0;
145

  
146
	lasso_bad_param(LOGIN, login);
147
	lasso_null_param(url);
148
	lasso_null_param(abstract);
149

  
150
	/* Check for the presence of an assertion */
151
	assertion = (LassoSaml2Assertion*) lasso_login_get_assertion (login);
152
	if (! LASSO_IS_SAML2_ASSERTION (assertion)) {
153
		lasso_release_gobject(assertion);
154
		return LASSO_PROFILE_ERROR_MISSING_ASSERTION;
155
	}
156
	lasso_extract_node_or_fail(server, login->parent.server, SERVER,
157
			LASSO_PROFILE_ERROR_MISSING_SERVER);
158
	/* Warn if the assertion is not a fresh one, we should not modify received assertion */
159
	if (lasso_node_get_original_xmlnode((LassoNode*)assertion) != NULL) {
160
		message(G_LOG_LEVEL_WARNING, "%s should only be called after lasso_login_build_assertion", __func__);
161
	}
162

  
163

  
164
	/* Build EndpointReference */
165
	epr = lasso_wsa_endpoint_reference_new_for_idwsf2_service(
166
			url, LASSO_IDWSF2_DISCOVERY_HREF, server->parent.ProviderID, abstract);
167

  
168
	/* Security/Identity token */
169
	if (duration <= 0) {
170
		duration = 2 * LASSO_DURATION_DAY;
171
	}
172
	if (tolerance < 0) {
173
		tolerance = 10*LASSO_DURATION_MINUTE;
174
	}
175
	/* If the NameID is encrypted try to get to he unencrypted one */
176
	if (assertion->Subject->NameID) {
177
		name_id = assertion->Subject->NameID;
178
	} else if (assertion->Subject->EncryptedID &&
179
			LASSO_IS_SAML2_NAME_ID(assertion->Subject->EncryptedID->original_data)) {
180
		name_id = (LassoSaml2NameID*)assertion->Subject->EncryptedID->original_data;
181
	}
182
	goto_cleanup_if_fail_with_rc (name_id, LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER);
183
	assertion_identity_token = lasso_server_create_assertion_as_idwsf2_security_token(server,
184
			name_id, tolerance, duration, TRUE, &server->parent);
185

  
186
	/* Add the assertion to the EPR */
187
	rc = lasso_wsa_endpoint_reference_add_security_token(epr,
188
			(LassoNode*)assertion_identity_token, security_mechanisms);
189
	goto_cleanup_if_fail(rc == 0);
190

  
191
	/* Add the EPR to the assertion as a SAML attribute */
192
	rc = lasso_saml2_assertion_add_attribute_with_node(assertion,
193
		LASSO_SAML2_ATTRIBUTE_NAME_EPR, LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI, (LassoNode*)epr);
194
	
195

  
196
cleanup:
197
	lasso_release_gobject(assertion);
198
	lasso_release_gobject(epr);
199
	lasso_release_gobject(metadata);
200
	lasso_release_gobject(attributeStatement);
201
	lasso_release_gobject(attribute);
202
	lasso_release_gobject(attributeValue);
203
	lasso_release_gobject(security_context);
204
	lasso_release_gobject(sec_token);
205
	lasso_release_gobject(assertion_identity_token);
206
	return rc;
207
}
208

  
209
/**
210
 * lasso_saml2_assertion_idwsf2_get_discovery_bootstrap_epr:
211
 * @assertion: a #LassoSaml2Assertion object
212
 *
213
 * Extract the Discovery bootstrap EPR from @assertion.
214
 *
215
 * Return value:(transfer none): a #LassoWsAddrEndpointReference or NULL if no bootstrap EPR is found.
216
 */
217
LassoWsAddrEndpointReference*
218
lasso_saml2_assertion_idwsf2_get_discovery_bootstrap_epr(LassoSaml2Assertion *assertion)
219
{
220
	LassoSaml2AttributeStatement *attribute_statement = NULL;
221
	LassoSaml2Attribute *attribute = NULL;
222
	LassoSaml2AttributeValue *attribute_value = NULL;
223
	GList *i = NULL, *j = NULL, *k = NULL;
224
	LassoWsAddrEndpointReference *rc = NULL;
225

  
226
	if (! LASSO_IS_SAML2_ASSERTION (assertion)) {
227
		return NULL;
228
	}
229

  
230
	lasso_foreach (i, assertion->AttributeStatement)
231
	{
232
		if (! LASSO_IS_SAML2_ATTRIBUTE_STATEMENT (i->data))
233
			continue;
234

  
235
		attribute_statement = LASSO_SAML2_ATTRIBUTE_STATEMENT(i->data);
236

  
237
		lasso_foreach (j, attribute_statement->Attribute)
238
		{
239
			if (! LASSO_IS_SAML2_ATTRIBUTE(j->data))
240
				continue;
241

  
242
			attribute = LASSO_SAML2_ATTRIBUTE(j->data);
243
			if (lasso_strisnotequal(attribute->Name,LASSO_SAML2_ATTRIBUTE_NAME_EPR))
244
				continue;
245
			/* There should only one attribute value, and the EPR should be the first
246
			 * contained node */
247
			if (! attribute->AttributeValue)
248
				continue;
249

  
250
			if (! LASSO_IS_SAML2_ATTRIBUTE_VALUE (attribute->AttributeValue->data))
251
				continue;
252
			attribute_value = (LassoSaml2AttributeValue*)attribute->AttributeValue->data;
253
			lasso_foreach (k, attribute_value->any) {
254
				if (! k->data) {
255
					message(G_LOG_LEVEL_CRITICAL, "found a NULL in attribute_value->any");
256
					break; /* NULL here ? bad... */
257
				}
258
				if (! LASSO_IS_WSA_ENDPOINT_REFERENCE (k->data))
259
					continue;
260
				rc = (LassoWsAddrEndpointReference*)g_object_ref(k->data);
261
				goto cleanup;
262
			}
263
		}
264
	}
265

  
266
cleanup:
267
	return rc;
268

  
269
}
270

  
271
/**
272
 * lasso_login_idwsf2_get_discovery_bootstrap_epr:
273
 * @login: a #LassoLogin object
274
 *
275
 * Extract the Discovery boostrap EPR from the attribute named #LASSO_SAML2_ATTRIBUTE_NAME_EPR.
276
 *
277
 * Return value:(transfer none): a caller owned #LassoWsAddrEndpointReference object, or NULL if none can be found.
278
 */
279
LassoWsAddrEndpointReference *
280
lasso_login_idwsf2_get_discovery_bootstrap_epr(LassoLogin *login)
281
{
282
	LassoProfile *profile = NULL;
283
	LassoSaml2Assertion *assertion = NULL;
284
	LassoWsAddrEndpointReference *rc = NULL;
285

  
286
	g_return_val_if_fail (LASSO_IS_LOGIN (login), NULL);
287
	profile = &login->parent;
288
	assertion = (LassoSaml2Assertion*)lasso_login_get_assertion(login);
289
	rc = lasso_saml2_assertion_idwsf2_get_discovery_bootstrap_epr(assertion);
290
	lasso_release_gobject(assertion);
291

  
292
	return rc;
293
}
lasso/id-wsf-2.0/saml2_login.h
1
/* $Id: server.h 2945 2006-11-19 20:07:46Z dlaniel $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_SAML2_LOGIN_PRIVATE_H__
25
#define __LASSO_IDWSF2_SAML2_LOGIN_PRIVATE_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29
#endif /* __cplusplus */
30

  
31
#include "../id-ff/login.h"
32
#include "../id-ff/provider.h"
33
#include "../xml/saml-2.0/saml2_assertion.h"
34
#include "../xml/saml-2.0/saml2_name_id.h"
35
#include "../xml/ws/wsa_endpoint_reference.h"
36

  
37
LASSO_EXPORT lasso_error_t lasso_login_idwsf2_add_discovery_bootstrap_epr(LassoLogin *login, const char *url,
38
		const char *abstract, GList *security_mechanisms, int tolerance, int duration);
39
 
40
LASSO_EXPORT LassoWsAddrEndpointReference *lasso_login_idwsf2_get_discovery_bootstrap_epr(
41
		LassoLogin *login);
42

  
43
LASSO_EXPORT LassoWsAddrEndpointReference*
44
	lasso_saml2_assertion_idwsf2_get_discovery_bootstrap_epr(LassoSaml2Assertion *assertion);
45

  
46
LASSO_EXPORT LassoSaml2Assertion* lasso_server_create_assertion_as_idwsf2_security_token(
47
		LassoServer *server, LassoSaml2NameID *name_id, int tolerance, int duration,
48
		gboolean cipher, LassoProvider *audience);
49

  
50
#ifdef __cplusplus
51
}
52
#endif /* __cplusplus */
53

  
54
#endif /* __LASSO_IDWSF2_SAML2_LOGIN_PRIVATE_H__ */
lasso/id-wsf-2.0/server.c
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#include "server.h"
25
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
26
#include "../id-ff/server.h"
27
#include "../id-ff/serverprivate.h"
28
#include "../xml/id-wsf-2.0/disco_svc_metadata.h"
29
#include "../xml/id-wsf-2.0/disco_service_context.h"
30
#include <libxml/tree.h>
31

  
32
gint
33
lasso_server_add_svc_metadata(LassoServer *server, LassoIdWsf2DiscoSvcMetadata *metadata)
34
{
35

  
36
	g_return_val_if_fail(LASSO_IS_SERVER(server), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
37
	g_return_val_if_fail(LASSO_IS_IDWSF2_DISCO_SVC_METADATA(metadata),
38
			LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
39

  
40
	server->private_data->svc_metadatas = g_list_append(
41
		server->private_data->svc_metadatas, g_object_ref(metadata));
42

  
43
	return 0;
44
}
45

  
46

  
47
/**
48
 * lasso_server_get_svc_metadatas:
49
 * @server: a #LassoServer object
50
 *
51
 * Return value:(element-type LassoIdWsf2DiscoSvcMetadata)(transfer none): a list of #LassoIdWsf2DiscoSvcMetadata
52
 */
53
const GList *
54
lasso_server_get_svc_metadatas(LassoServer *server)
55
{
56
	g_return_val_if_fail(LASSO_IS_SERVER(server), NULL);
57

  
58
	return server->private_data->svc_metadatas;
59
}
60

  
61

  
62
/**
63
 * lasso_server_get_svc_metadatas_with_id_and_type:
64
 * @server: a #LassoServer object
65
 * @svcMDIDs:(allow-none): a list of service metadata IDs
66
 * @service_type:(allow-none): a service type identifier
67
 *
68
 * Return value:(element-type LassoIdWsf2DiscoSvcMetadata)(transfer full): a list of #LassoIdWsf2DiscoSvcMetadata
69
 */
70
GList *
71
lasso_server_get_svc_metadatas_with_id_and_type(LassoServer *server, GList *svcMDIDs,
72
	const gchar *service_type)
73
{
74
	gchar *svcMDID;
75
	LassoIdWsf2DiscoSvcMetadata *md;
76
	GList *result = NULL;
77
	GList *i;
78
	GList *j;
79

  
80
	g_return_val_if_fail(LASSO_IS_SERVER(server), NULL);
81
	g_return_val_if_fail(service_type != NULL, NULL);
82

  
83
	for (i = g_list_first(server->private_data->svc_metadatas); i != NULL; i = g_list_next(i)) {
84
		md = LASSO_IDWSF2_DISCO_SVC_METADATA(i->data);
85
		/* FIXME: this assumes there is one and only one service
86
		 * context, and service type, this should be fixed to iterate
87
		 * properly on the GList */
88
		if (md->ServiceContext == NULL || strcmp((char*)(LASSO_IDWSF2_DISCO_SERVICE_CONTEXT(
89
				md->ServiceContext->data)->ServiceType)->data, service_type) != 0) {
90
			continue;
91
		}
92
		if (svcMDIDs == NULL) {
93
			/* If no svcMDID is given, return all the metadatas with given */
94
			/* service type */
95
			result = g_list_append(result, g_object_ref(md));
96
		} else {
97
			for (j = g_list_first(svcMDIDs); j != NULL; j = g_list_next(j)) {
98
				svcMDID = (gchar *)(j->data);
99
				if (strcmp(svcMDID, md->svcMDID) == 0) {
100
					result = g_list_append(result, g_object_ref(md));
101
				}
102
			}
103
		}
104
	}
105

  
106
	return result;
107
}
108

  
109
void
110
lasso_server_init_id_wsf20_svcmds(LassoServer *server, xmlNode *t)
111
{
112
	xmlNode *t2 = t->children;
113

  
114
	if (strcmp((char*)t->name, "SvcMDs") == 0) {
115
		while (t2) {
116
			LassoIdWsf2DiscoSvcMetadata *svcMD;
117
			if (t2->type != XML_ELEMENT_NODE) {
118
				t2 = t2->next;
119
				continue;
120
			}
121
			svcMD = lasso_idwsf2_disco_svc_metadata_new();
122
			LASSO_NODE_GET_CLASS(svcMD)->init_from_xml(LASSO_NODE(svcMD), t2);
123
			server->private_data->svc_metadatas = g_list_append(
124
				server->private_data->svc_metadatas, svcMD);
125
			t2 = t2->next;
126
		}
127
	}
128
}
129

  
130
static void
131
add_childnode_from_list(LassoNode *value, xmlNode *xmlnode)
132
{
133
	xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE));
134
}
135

  
136
void
137
lasso_server_dump_id_wsf20_svcmds(LassoServer *server, xmlNode *xmlnode)
138
{
139
	/* Service Metadatas (SvcMD) */
140
	if (server->private_data->svc_metadatas != NULL) {
141
		xmlNode *t;
142
		t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)"SvcMDs", NULL);
143
		g_list_foreach(server->private_data->svc_metadatas,
144
				(GFunc)add_childnode_from_list, t);
145
	}
146
}
lasso/id-wsf-2.0/server.h
1
/* $Id: server.h 2945 2006-11-19 20:07:46Z dlaniel $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_SERVER_H__
25
#define __LASSO_IDWSF2_SERVER_H__
26

  
27
#include "../utils.h"
28

  
29
#ifdef __cplusplus
30
extern "C" {
31
#endif /* __cplusplus */
32

  
33
#include "../id-ff/server.h"
34
#include "../xml/id-wsf-2.0/disco_svc_metadata.h"
35

  
36
LASSO_EXPORT lasso_error_t lasso_server_add_svc_metadata(LassoServer *server,
37
	LassoIdWsf2DiscoSvcMetadata *metadata);
38

  
39
LASSO_EXPORT const GList *lasso_server_get_svc_metadatas(LassoServer *server);
40

  
41
LASSO_EXPORT GList *lasso_server_get_svc_metadatas_with_id_and_type(LassoServer *server,
42
	GList *svcMDIDs, const gchar *service_type);
43

  
44
void lasso_server_init_id_wsf20_services(LassoServer *server, xmlNode *t);
45

  
46
#ifdef __cplusplus
47
}
48
#endif /* __cplusplus */
49

  
50
#endif /* __LASSO_IDWSF2_SERVER_H__ */
51

  
lasso/id-wsf-2.0/serverprivate.h
1
/* $Id: server.h 2945 2006-11-19 20:07:46Z dlaniel $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_SERVERPRIVATE_H__
25
#define __LASSO_IDWSF2_SERVERPRIVATE_H__
26

  
27
#include "../utils.h"
28

  
29
#ifdef __cplusplus
30
extern "C" {
31
#endif /* __cplusplus */
32

  
33
#include "../id-ff/server.h"
34
#include <libxml/tree.h>
35

  
36
void lasso_server_init_id_wsf20_svcmds(LassoServer *server, xmlNode *t);
37

  
38
void lasso_server_dump_id_wsf20_svcmds(LassoServer *server, xmlNode *xmlnode);
39

  
40
#ifdef __cplusplus
41
}
42
#endif /* __cplusplus */
43

  
44
#endif /* __LASSO_IDWSF2_SERVERPRIVATE_H__ */
lasso/id-wsf-2.0/session.c
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
/**
25
 * SECTION:idwsf2-session-extension
26
 */
27
#include "session.h"
28
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
29
#include "../utils.h"
30
#include "../id-ff/session.h"
31
#include "../id-ff/sessionprivate.h"
32
#include "../xml/misc_text_node.h"
33
#include "../xml/ws/wsa_endpoint_reference.h"
34
#include "../xml/saml-2.0/saml2_assertion.h"
35
#include "../xml/id-wsf-2.0/disco_svc_metadata.h"
36
#include "../xml/id-wsf-2.0/disco_service_type.h"
37
#include "../xml/id-wsf-2.0/disco_security_context.h"
38
#include "../xml/id-wsf-2.0/sec_token.h"
39

  
40

  
41
typedef struct _DumpContext {
42
	xmlNode *parent;
43
} DumpContext;
44

  
45
/**
46
 * lasso_session_add_endpoint_reference:
47
 * @session: a #LassoSession object
48
 * @epr: a #LassoWsAddrEndpointReference object
49
 *
50
 * Add an endpoint reference to a session object.
51
 *
52
 * Return value: 0 if successfull, an error code otherwise.
53
 */
54
gint
55
lasso_session_add_endpoint_reference(LassoSession *session, LassoWsAddrEndpointReference *epr)
56
{
57
	GList *i;
58

  
59
	g_return_val_if_fail(LASSO_IS_SESSION(session), LASSO_PARAM_ERROR_INVALID_VALUE);
60
	g_return_val_if_fail(LASSO_IS_WSA_ENDPOINT_REFERENCE(epr), LASSO_PARAM_ERROR_INVALID_VALUE);
61

  
62
	for (i = g_list_first(epr->Metadata->any); i != NULL; i = g_list_next(i)) {
63
		if (LASSO_IS_IDWSF2_DISCO_SERVICE_TYPE(i->data)) {
64
			g_hash_table_insert(session->private_data->eprs,
65
				g_strdup(LASSO_IDWSF2_DISCO_SERVICE_TYPE(i->data)->content),
66
				g_object_ref(epr));
67
			session->is_dirty = TRUE;
68
			break;
69
		}
70
	}
71

  
72
	return 0;
73
}
74

  
75
/**
76
 * lasso_session_get_endpoint_reference:
77
 * @session: a #LassoSession object
78
 * @service_type: a string giving the service type.
79
 *
80
 * Return an endpoint reference for the given service type.
81
 *
82
 * Return value: a caller owned #LassoWsAddrEndpointReference object for the given service type if
83
 * one is found, NULL otherwise.
84
 */
85
LassoWsAddrEndpointReference*
86
lasso_session_get_endpoint_reference(LassoSession *session, const gchar *service_type)
87
{
88
	LassoWsAddrEndpointReference* epr;
89

  
90
	if (! LASSO_IS_SESSION(session) || service_type == NULL)
91
		return NULL;
92

  
93
	epr = g_hash_table_lookup(session->private_data->eprs, service_type);
94
	if (LASSO_IS_WSA_ENDPOINT_REFERENCE(epr)) {
95
		return (LassoWsAddrEndpointReference*)g_object_ref(epr);
96
	} else {
97
		return NULL;
98
	}
99
}
100

  
101
/**
102
 * lasso_session_get_assertion_identity_token:
103
 * @session: a #LassoSession object
104
 * @service_type: a char* string describing the targeted service
105
 *
106
 * Return a security token to contact a specified service.
107
 *
108
 * Return value: (allow-none): a #LassoAssertion object or NULL
109
 */
110
LassoSaml2Assertion*
111
lasso_session_get_assertion_identity_token(LassoSession *session, const gchar *service_type)
112
{
113
	LassoWsAddrEndpointReference* epr;
114
	GList *metadata_item;
115
	GList *i;
116
	LassoIdWsf2DiscoSecurityContext *security_context;
117
	LassoIdWsf2SecToken *sec_token;
118
	LassoSaml2Assertion *assertion = NULL;
119

  
120
	if (LASSO_IS_SESSION(session) == FALSE) {
121
		return NULL;
122
	}
123

  
124
	epr = lasso_session_get_endpoint_reference(session, service_type);
125
	if (epr == NULL || epr->Metadata == NULL) {
126
		return NULL;
127
	}
128

  
129
	metadata_item = epr->Metadata->any;
130
	for (i = g_list_first(metadata_item); i != NULL; i = g_list_next(i)) {
131
		if (LASSO_IS_IDWSF2_DISCO_SECURITY_CONTEXT(i->data)) {
132
			security_context = LASSO_IDWSF2_DISCO_SECURITY_CONTEXT(i->data);
133
			if (security_context->Token != NULL) {
134
				sec_token = security_context->Token->data;
135
				if (LASSO_IS_SAML2_ASSERTION(sec_token->any)) {
136
					lasso_assign_gobject(assertion, sec_token->any);
137
					break;
138
				}
139
			}
140
		}
141
	}
142

  
143
	return assertion;
144
}
145

  
146
void
147
lasso_session_id_wsf2_init_eprs(LassoSession *session, xmlNode *t)
148
{
149
	xmlNode *t2;
150

  
151
	/* Endpoint References */
152
	if (strcmp((char*)t->name, "EndpointReferences") == 0) {
153
		t2 = t->children;
154
		while (t2) {
155
			LassoWsAddrEndpointReference *epr;
156
			if (t2->type != XML_ELEMENT_NODE) {
157
				t2 = t2->next;
158
				continue;
159
			}
160
			epr = LASSO_WSA_ENDPOINT_REFERENCE(
161
					lasso_wsa_endpoint_reference_new());
162
			LASSO_NODE_GET_CLASS(epr)->init_from_xml(LASSO_NODE(epr), t2);
163
			lasso_session_add_endpoint_reference(session, epr);
164
			g_object_unref(epr);
165
			t2 = t2->next;
166
		}
167
	}
168
}
169

  
170
static void
171
add_childnode_from_hashtable(G_GNUC_UNUSED gchar *key, LassoNode *value, DumpContext *context)
172
{
173
	xmlNode *xmlnode;
174

  
175
	xmlnode = context->parent;
176
	xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE));
177
}
178

  
179
void
180
lasso_session_id_wsf2_dump_eprs(LassoSession *session, xmlNode *xmlnode) {
181
	xmlNode *t;
182
	DumpContext context;
183

  
184
	/* Endpoint References */
185
	if (session->private_data->eprs != NULL
186
			&& g_hash_table_size(session->private_data->eprs)) {
187
		t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)"EndpointReferences", NULL);
188
		context.parent = t;
189
		g_hash_table_foreach(session->private_data->eprs,
190
				(GHFunc)add_childnode_from_hashtable, &context);
191
	}
192
}
lasso/id-wsf-2.0/session.h
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_SESSION_H__
25
#define __LASSO_IDWSF2_SESSION_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29
#endif /* __cplusplus */
30

  
31
#include "../id-ff/session.h"
32
#include "../xml/saml-2.0/saml2_assertion.h"
33
#include "../xml/ws/wsa_endpoint_reference.h"
34

  
35
LASSO_EXPORT lasso_error_t lasso_session_add_endpoint_reference(LassoSession *session,
36
	LassoWsAddrEndpointReference *epr);
37

  
38
LASSO_EXPORT LassoWsAddrEndpointReference* lasso_session_get_endpoint_reference(
39
	LassoSession *session, const gchar *service_type);
40

  
41
LASSO_EXPORT LassoSaml2Assertion* lasso_session_get_assertion_identity_token(
42
	LassoSession *session, const gchar *service_type);
43

  
44
#ifdef __cplusplus
45
}
46
#endif /* __cplusplus */
47

  
48
#endif /* __LASSO_IDWSF2_SESSION_H__ */
49

  
lasso/id-wsf-2.0/sessionprivate.h
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_SERVERPRIVATE_H__
25
#define __LASSO_IDWSF2_SERVERPRIVATE_H__
26

  
27
#include "../utils.h"
28

  
29
#ifdef __cplusplus
30
extern "C" {
31
#endif /* __cplusplus */
32

  
33
#include "../id-ff/session.h"
34
#include <libxml/tree.h>
35

  
36
void lasso_session_id_wsf2_init_eprs(LassoSession *session, xmlNode *t);
37
void lasso_session_id_wsf2_dump_eprs(LassoSession *session, xmlNode *xmlnode);
38

  
39
#ifdef __cplusplus
40
}
41
#endif /* __cplusplus */
42

  
43
#endif /* __LASSO_IDWSF2_SERVERPRIVATE_H__ */
lasso/id-wsf-2.0/soap_binding.c
1
/* $Id: wsf_profile.c,v 1.45 2007/01/05 16:11:02 Exp $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#include "soap_binding.h"
25
#include "../xml/idwsf_strings.h"
26
#include "../xml/id-wsf-2.0/idwsf2_strings.h"
27
#include "../xml/id-wsf-2.0/sb2_sender.h"
28
#include "../xml/id-wsf-2.0/sb2_redirect_request.h"
29
#include "../xml/id-wsf-2.0/sb2_user_interaction_header.h"
30
#include "../xml/ws/wsa_attributed_uri.h"
31

  
32
#include "../utils.h"
33

  
34
#define get_header(test) \
35
	GList *i = NULL; \
36
 \
37
	if (! LASSO_IS_SOAP_ENVELOPE(soap_envelope)) \
38
		return NULL; \
39
	if (! LASSO_IS_SOAP_HEADER(soap_envelope->Header)) \
40
		return NULL; \
41
 \
42
	i = soap_envelope->Header->Other; \
43
	for (; i != NULL; i = g_list_next(i)) { \
44
		if (test(i->data)) { \
45
			break; \
46
		} \
47
	}
48

  
49
inline static LassoNode* _get_node(GList **list, GType node_type, const char *node_name,
50
		const char *node_namespace, const char *node_prefix, gboolean create);
51

  
52
/**
53
 * lasso_soap_envelope_sb2_get_provider_id:
54
 * @soap_envelope: a #LassoSoapEnvelope object
55
 *
56
 * Return the providerID contained in the sb2:Sender header.
57
 *
58
 * Return value: the providerID string or NULL if no sb2:Sender header is present.
59
 */
60
char *
61
lasso_soap_envelope_sb2_get_provider_id(LassoSoapEnvelope *soap_envelope)
62
{
63
	get_header(LASSO_IS_IDWSF2_SB2_SENDER);
64

  
65
	if (i)
66
		return g_strdup(((LassoIdWsf2Sb2Sender*)i->data)->providerID);
67
	else
68
		return NULL;
69
}
70

  
71
/**
72
 * lasso_soap_envelope_sb2_get_redirect_request_url:
73
 * @soap_envelope: a #LassoSoapEnvelope object
74
 *
75
 * <para>Return the redirect request URL from the sb2:RedirectRequest SOAP Fault detail.</para>
76
 *
77
 * <para>The WSC MUST verify that this URL belong to the WSP. You can do this by comparing the domain
78
 * with the one in the @LassoProfile.msg_url field</para>
79
 * <para>The WSC MUST redirect the User Agent to this URL with a GET or POST request. It MUST add a
80
 * parameter named ReturnToURL giving the URL where the WSP will send the User Agent after the
81
 * interaction. It MAY add an IDP parameter indicating to the WSP how to authenticate the principal
82
 * if no preexisting session with the User Agent exists</para>
83
 *<para>The WSP must check that the ReturnToURL belon to the WSP, by using the providerID URL for example.</para>
84
  <para>After the interaction the WSC must redirect the User Agent to the ReturnToURL URL adding a parameter named ResendMessage. If ResendMessage is 0 or false, it means that the principal refused to continue the process. Any other value means that the prinicpal accepted and so the WSC can try again its request.</para>
85
  <para>In order to succeed the request need to refer to the SOAP Fault response containing the RedirectRequest element. See lasso_soap_envelope_get_relates_to(), and #LassoWsAddrAttributedURI.</para>
86
 *
87
 * Return value:(transfer none)(allow-none): the redirect URL string or NULL if no sb2:RedirectRequest detail is present.
88
 */
89
const char *
90
lasso_soap_envelope_sb2_get_redirect_request_url(LassoSoapEnvelope *soap_envelope)
91
{
92
	LassoSoapFault *fault;
93
	LassoIdWsf2Sb2RedirectRequest *redirect_request;
94

  
95
	fault = lasso_soap_envelope_get_soap_fault(soap_envelope, FALSE);
96
	if (! fault || ! LASSO_IS_SOAP_DETAIL(fault->Detail))
97
		return NULL;
98

  
99
	redirect_request = (LassoIdWsf2Sb2RedirectRequest*) _get_node(&fault->Detail->any, LASSO_TYPE_IDWSF2_SB2_REDIRECT_REQUEST, NULL, NULL, NULL, FALSE);
100
	if (! redirect_request)
101
		return NULL;
102
	return redirect_request->redirectURL;
103
}
104

  
105
/**
106
 * lasso_soap_envelope_sb2_get_target_identity_header:
107
 * @soap_envelope: a #LassoSoapEnvelope object.
108
 *
109
 * Return the first sb2:TargetIdentity header.
110
 *
111
 * Return value: (transfer none): the first #LassoIdWsf2Sb2TargetIdentity object found in the
112
 * headers of the @soap_envelope, or NULL if none is found.
113
 */
114
LassoIdWsf2Sb2TargetIdentity*
115
lasso_soap_envelope_sb2_get_target_identity_header(LassoSoapEnvelope *soap_envelope)
116
{
117
	get_header(LASSO_IS_IDWSF2_SB2_TARGET_IDENTITY);
118

  
119
	if (i)
120
		return (LassoIdWsf2Sb2TargetIdentity*)i->data;
121
	else
122
		return NULL;
123
}
124

  
125

  
126
/**
127
 * lasso_soap_envelope_wssec_get_security_header_impl:
128
 * @soap_envelope: a #LassoSoapEnvelope object
129
 * @create: wether to create the header if not found
130
 *
131
 * Return value: (transfer none): the wsse:Security header found in the SOAP message, or NULL if
132
 * none is found, and creation was not allowed.
133
 */
134
static LassoWsSec1SecurityHeader*
135
lasso_soap_envelope_wssec_get_security_header_impl(LassoSoapEnvelope *soap_envelope,
136
		gboolean create)
137
{
138
	get_header(LASSO_IS_WSSE_SECURITY_HEADER);
139

  
140
	if (i) {
141
		return (LassoWsSec1SecurityHeader*)i->data;
142
	}
143

  
144
	if (create) {
145
		LassoWsSec1SecurityHeader *wssec_security = lasso_wsse_security_header_new();
146
		lasso_list_add_new_gobject (soap_envelope->Header->Other, wssec_security);
147
		return wssec_security;
148
	}
149

  
150
	return NULL;
151
}
152

  
153
/**
154
 * lasso_soap_envelope_wssec_get_security_header:
155
 * @soap_envelope: a #LassoSoapEnvelope object
156
 *
157
 * Return the first wsse:Security header found in the headers of @soap_envelope.
158
 *
159
 * Return value: (transfer none): the wsse:Security header found in the SOAP message, or NULL if
160
 * none is found.
161
 */
162
LassoWsSec1SecurityHeader*
163
lasso_soap_envelope_wssec_get_security_header(LassoSoapEnvelope *soap_envelope)
164
{
165
	return lasso_soap_envelope_wssec_get_security_header_impl (soap_envelope, FALSE);
166
}
167

  
168
/**
169
 * lasso_soap_envelope_add_security_token:
170
 * @soap_envelope: a #LassoSoapEnvelope object
171
 * @token: a #LassoNode to use as a security token
172
 *
173
 * Add @token as a security token to the headers of @soap_envelope using a
174
 * #LassoWsSec1SecurityHeader element as a container. Eventually create the
175
 * #LassoWsSec1SecurityHeader element if it does not exist already.
176
 */
177
void
178
lasso_soap_envelope_add_security_token(LassoSoapEnvelope *soap_envelope, LassoNode *token)
179
{
180
	LassoWsSec1SecurityHeader *wssec_security;
181

  
182
	wssec_security = lasso_soap_envelope_wssec_get_security_header_impl (soap_envelope, TRUE);
183
	g_return_if_fail (wssec_security != NULL);
184
	lasso_list_add_gobject(wssec_security->any, token);
185
}
186

  
187
/**
188
 * lasso_soap_envelope_get_saml2_security_token:
189
 * @soap_envelope: a #LassoSoapEnvelope object
190
 *
191
 * Return a SAML2 Assertion used as a security token if one is found in the headers of
192
 * @soap_envelope.
193
 *
194
 * Return value: (transfer none): a #LassoSaml2Assertion, or NULL if none is found.
195
 */
196
LassoSaml2Assertion*
197
lasso_soap_envelope_get_saml2_security_token(LassoSoapEnvelope *soap_envelope)
198
{
199
	const LassoWsSec1SecurityHeader *security;
200
	GList *it;
201

  
202
	security = lasso_soap_envelope_wssec_get_security_header (soap_envelope);
203
	if (! security)
204
		return NULL;
205
	lasso_foreach (it, security->any) {
206
		if (LASSO_IS_SAML2_ASSERTION (it->data)) {
207
			return (LassoSaml2Assertion*)g_object_ref(it->data);
208
		}
209
	}
210
	return NULL;
211
}
212

  
213
/**
214
 * lasso_soap_envelope_add_action_header:
215
 * @soap_envelope: a #LassoSoapEnvelope object
216
 * @action: the action targeted by this message
217
 *
218
 * Add an action header to a #LassoSoapEnvelope object.
219
 */
220
void
221
lasso_soap_envelope_add_action(LassoSoapEnvelope *soap_envelope, const char *action)
222
{
223
	LassoWsAddrAttributedURI *wsa_action;
224

  
225
	if (! LASSO_IS_SOAP_ENVELOPE(soap_envelope) || ! LASSO_IS_SOAP_HEADER(soap_envelope->Header))
226
		return;
227
	wsa_action = lasso_wsa_attributed_uri_new_with_string(action);
228
	lasso_node_set_custom_nodename(&wsa_action->parent, "Action");
229
	lasso_list_add_new_gobject(soap_envelope->Header->Other, wsa_action);
230
}
231

  
232
const char*
233
lasso_soap_envelope_get_action(LassoSoapEnvelope *soap_envelope)
234
{
235
	GList *i;
236

  
237
	if (! LASSO_IS_SOAP_ENVELOPE(soap_envelope) || ! LASSO_IS_SOAP_HEADER(soap_envelope->Header))
238
		return NULL;
239

  
240
	lasso_foreach(i, soap_envelope->Header->Other) {
241
		if (LASSO_IS_WSA_ATTRIBUTED_URI(i->data)
242
				&& lasso_strisequal(lasso_node_get_name((LassoNode *)i->data),"Action")) {
243
			return ((LassoWsAddrAttributedURI*)i->data)->content;
244
		}
245
	}
246
	return NULL;
247
}
248

  
249
/**
250
 * lasso_soap_envelope_add_to_body:
251
 * @soap_envelope: a #LassoSoapEnvelope object
252
 * @content: a #LassoNode object to add to the body of the SOAP message
253
 *
254
 * Add new content to the SOAP message body.
255
 */
256
void
257
lasso_soap_envelope_add_to_body(LassoSoapEnvelope *soap_envelope, LassoNode *content)
258
{
259
	if (!LASSO_IS_SOAP_ENVELOPE(soap_envelope) || !LASSO_IS_SOAP_BODY(soap_envelope->Body))
260
		return;
261
	lasso_list_add_gobject(soap_envelope->Body->any, content);
262
}
263

  
264
inline static LassoNode*
265
_get_node(GList **list, GType node_type, const char *node_name, const char *node_namespace,
266
		const char *node_prefix, gboolean create)
267
{
268
	GList *i;
269

  
270
	lasso_foreach(i, (*list)) {
271
		LassoNode *node = (LassoNode*)i->data;
272

  
273
		if (LASSO_IS_NODE(node) &&
274
		    (! node_type || ( G_IS_OBJECT(node) && G_OBJECT_TYPE(node) == node_type)) &&
275
		    (! node_name || lasso_strisequal(lasso_node_get_name(node),node_name)) &&
276
		    (! node_namespace ||
277
			     lasso_strisequal(lasso_node_get_namespace(node),node_namespace))) {
278
			return node;
279
		}
280
	}
281
	if (create) {
282
		LassoNode *node = (LassoNode*)g_object_new(node_type, NULL);
283
		if (! node) {
284
			return NULL;
285
		}
286
		if (lasso_strisnotequal(lasso_node_get_name(node),node_name)) {
287
			lasso_node_set_custom_nodename(node, node_name);
288
		}
289
		if (lasso_strisequal(lasso_node_get_namespace(node),node_namespace)) {
290
			lasso_node_set_custom_namespace(node, node_namespace, node_prefix);
291
		}
292
		lasso_list_add_new_gobject(*list, node);
293
		return node;
294
	}
295
	return NULL;
296
}
297

  
298
LassoNode*
299
_lasso_soap_envelope_get_header(LassoSoapEnvelope *soap_envelope, GType node_type,
300
		const char *node_name, const char *node_namespace, const char *node_prefix,
301
		gboolean create)
302
{
303
	if (! LASSO_IS_SOAP_ENVELOPE(soap_envelope) || !
304
			LASSO_IS_SOAP_HEADER(soap_envelope->Header)) {
305
		return NULL;
306
	}
307

  
308
	return _get_node(&soap_envelope->Header->Other, node_type, node_name, node_namespace,
309
			node_prefix, create);
310
}
311

  
312

  
313
/**
314
 * lasso_soap_envelope_get_message_id:
315
 * @soap_envelope: a #LassoSoapEnvelope object
316
 * @create:(default FALSE): whether to create the node if it is not found
317
 *
318
 * Return the WS-Addressing header MessageID content.
319
 *
320
 * Return value:(transfer none): a #LassoWsAddrAttributedURI object or NULL if none is found, and
321
 * creation was not allowed.
322
 */
323
LassoWsAddrAttributedURI*
324
lasso_soap_envelope_get_message_id(LassoSoapEnvelope *soap_envelope, gboolean create)
325
{
326
	return (LassoWsAddrAttributedURI*)_lasso_soap_envelope_get_header(soap_envelope,
327
			LASSO_TYPE_WSA_ATTRIBUTED_URI, LASSO_WSA_ELEMENT_MESSAGE_ID, NULL, NULL,
328
			create);
329
}
330

  
331
/**
332
 * lasso_soap_envelope_get_relates_to:
333
 * @soap_envelope: a #LassoSoapEnvelope object
334
 * @create:(default FALSE): whether to create the node if it is not found
335
 *
336
 *
337
 * Returns the RelatesTo WS-Addressing header, if it exists.
338
 *
339
 * Return value:(transfer none): a #LassoWsAddrAttributedURI object or NULL if none is found, and creation was not allowed.
340
 */
341
LassoWsAddrRelatesTo*
342
lasso_soap_envelope_get_relates_to(LassoSoapEnvelope *soap_envelope, gboolean create)
343
{
344
	return (LassoWsAddrRelatesTo*)_lasso_soap_envelope_get_header(soap_envelope,
345
			LASSO_TYPE_WSA_RELATES_TO, NULL, NULL, NULL, create);
346
}
347

  
348
/**
349
 * lasso_soap_envelope_set_relates_to:
350
 * @soap_envelope: a #LassoSoapEnvelope object
351
 * @value:(allow-none): the value to set into the new header
352
 * @relationship:(allow-none): kind of the relationship
353
 *
354
 * Set the value of the RelatesTo header, if it does not exist it is created. If @value is NULL, the
355
 * header is removed.
356
 */
357
void
358
lasso_soap_envelope_set_relates_to(LassoSoapEnvelope *soap_envelope, char *value, char *relationship)
359
{
360
	LassoWsAddrRelatesTo *relates_to;
361
	if (! LASSO_IS_SOAP_ENVELOPE(soap_envelope))
362
		return;
363

  
364

  
365
	relates_to = lasso_soap_envelope_get_relates_to(soap_envelope, TRUE);
366
	if (value) {
367
		g_return_if_fail(relates_to);
368
		lasso_assign_string(relates_to->content, value);
369
		lasso_assign_string(relates_to->RelationshipType, relationship);
370
	} else if (relates_to) {
371
		lasso_list_remove_gobject(soap_envelope->Header->Other, relates_to);
372
	}
373
}
374

  
375
/**
376
 * lasso_soap_envelope_get_body_content:
377
 * @soap_envelope: a #LassoSoapEnvelope object
378
 *
379
 * Return the body content of the @soap_envelope object.
380
 *
381
 * Return value:(element-type LassoNode): the content or NULL if the concent is empty or the object invalid.
382
 */
383
GList*
384
lasso_soap_envelope_get_body_content(LassoSoapEnvelope *soap_envelope) {
385
	if (LASSO_IS_SOAP_ENVELOPE(soap_envelope) && LASSO_IS_SOAP_BODY(soap_envelope->Body))
386
		return soap_envelope->Body->any;
387
	return NULL;
388
}
389

  
390
LassoSoapDetail *
391
lasso_soap_fault_get_detail(LassoSoapFault *soap_fault, gboolean create)
392
{
393
	if (! LASSO_IS_SOAP_FAULT(soap_fault))
394
		return NULL;
395

  
396
	if (soap_fault->Detail == NULL && create) {
397
		soap_fault->Detail = lasso_soap_detail_new();
398
	}
399
	return soap_fault->Detail;
400
}
401

  
402

  
403
/**
404
 * lasso_soap_fault_add_to_detail:
405
 * @soap_fault: a #LassoSoapFault object
406
 * @node: a node to add to the Detail sub-element of the @soap_fault object.
407
 *
408
 * Fill the detail part of a SOAP fault.
409
 */
410
void
411
lasso_soap_fault_add_to_detail(LassoSoapFault *soap_fault,
412
		LassoNode *node)
413
{
414
	LassoSoapDetail *detail;
415

  
416
	detail = lasso_soap_fault_get_detail(soap_fault, TRUE);
417
	if (detail) {
418
		lasso_list_add_gobject(detail->any, node);
419
	}
420
}
421

  
422
LassoIdWsf2Sb2UserInteractionHeader *
423
lasso_soap_envelope_get_sb2_user_interaction_header(LassoSoapEnvelope *soap_envelope, gboolean create)
424
{
425
	return (LassoIdWsf2Sb2UserInteractionHeader*)_lasso_soap_envelope_get_header(soap_envelope,
426
			LASSO_TYPE_IDWSF2_SB2_USER_INTERACTION_HEADER, NULL, NULL, NULL,
427
			create);
428
}
429

  
430
LassoIdWsf2Sb2UserInteractionHint
431
lasso_soap_envelope_get_sb2_user_interaction_hint(LassoSoapEnvelope *soap_envelope)
432
{
433
	const char *hint;
434
	LassoIdWsf2Sb2UserInteractionHeader *header;
435

  
436
	header = lasso_soap_envelope_get_sb2_user_interaction_header(soap_envelope, FALSE);
437
	if (header) {
438
		hint = header->interact;
439
		if (lasso_strisequal(hint,LASSO_SB2_USER_INTERACTION_INTERACT_IF_NEEDED))
440
			return LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_INTERACT_IF_NEEDED;
441
		if (lasso_strisequal(hint,LASSO_SB2_USER_INTERACTION_DO_NOT_INTERACT))
442
			return LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_DO_NOT_INTERACT;
443
		if (lasso_strisequal(hint,LASSO_SB2_USER_INTERACTION_DO_NOT_INTERACT_FOR_DATA))
444
			return LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_DO_NOT_INTERACT_FOR_DATA;
445

  
446
	}
447
	return LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_NONE;
448
}
449

  
450
void
451
lasso_soap_envelope_set_sb2_user_interaction_hint(LassoSoapEnvelope *soap_envelope,
452
		LassoIdWsf2Sb2UserInteractionHint hint)
453
{
454
	LassoIdWsf2Sb2UserInteractionHeader *user_interaction;
455

  
456
	user_interaction = lasso_soap_envelope_get_sb2_user_interaction_header(soap_envelope, TRUE);
457
	switch (hint) {
458
		case LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_INTERACT_IF_NEEDED:
459
			lasso_assign_string(user_interaction->interact,
460
					LASSO_SB2_USER_INTERACTION_INTERACT_IF_NEEDED);
461
			break;
462
		case LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_DO_NOT_INTERACT:
463
			lasso_assign_string(user_interaction->interact,
464
					LASSO_SB2_USER_INTERACTION_DO_NOT_INTERACT);
465
			break;
466
		case LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_DO_NOT_INTERACT_FOR_DATA:
467
			lasso_assign_string(user_interaction->interact,
468
					LASSO_SB2_USER_INTERACTION_DO_NOT_INTERACT_FOR_DATA);
469
			break;
470
		default:
471
			lasso_release_string(user_interaction->interact);
472
	}
473
}
474

  
475
/**
476
 * lasso_soap_envelope_get_soap_fault:
477
 * @soap_envelope: a #LassoSoapEnvelope
478
 * @create:(default FALSE): whether to create the SOAP Fault
479
 *
480
 * Return the first SOAP Fault in the Body of the soap message @soap_envelope.
481
 *
482
 * Return value:(transfer none)(allow-none): a #LassoSoapFault object or NULL.
483
 */
484
LassoSoapFault*
485
lasso_soap_envelope_get_soap_fault(LassoSoapEnvelope *soap_envelope, gboolean create)
486
{
487
	LassoSoapFault *fault;
488

  
489
	if (! LASSO_IS_SOAP_ENVELOPE(soap_envelope) || ! LASSO_SOAP_BODY(soap_envelope->Body))
490
		return NULL;
491

  
492
	fault = (LassoSoapFault*)_get_node(&soap_envelope->Body->any, LASSO_TYPE_SOAP_FAULT, NULL, NULL, NULL, create);
493

  
494
	return fault;
495
}
496

  
lasso/id-wsf-2.0/soap_binding.h
1
/* $Id: wsf_profile.h,v 1.13 2006/11/14 17:07:30 Exp $
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_IDWSF2_SOAP_BINDING_H__
25
#define __LASSO_IDWSF2_SOAP_BINDING_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29
#endif /* __cplusplus */
30

  
31
#include "../export.h"
32
#include "../xml/soap-1.1/soap_envelope.h"
33
#include "../xml/soap-1.1/soap_fault.h"
34
#include "../xml/id-wsf-2.0/sb2_target_identity.h"
35
#include "../xml/id-wsf-2.0/sb2_user_interaction_header.h"
36
#include "../xml/ws/wsse_security_header.h"
37
#include "../xml/ws/wsa_attributed_uri.h"
38
#include "../xml/ws/wsa_relates_to.h"
39
#include "../xml/saml-2.0/saml2_assertion.h"
40

  
41
typedef enum {
42
	LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_NONE,
43
	LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_INTERACT_IF_NEEDED,
44
	LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_DO_NOT_INTERACT,
45
	LASSO_IDWSF2_SB2_USER_INTERACTION_HINT_DO_NOT_INTERACT_FOR_DATA
46
} LassoIdWsf2Sb2UserInteractionHint;
47

  
48
LASSO_EXPORT char* lasso_soap_envelope_sb2_get_provider_id(LassoSoapEnvelope *soap_envelope);
49

  
50
LASSO_EXPORT const char* lasso_soap_envelope_sb2_get_redirect_request_url(
51
		LassoSoapEnvelope *soap_envelope);
52

  
53
LASSO_EXPORT LassoIdWsf2Sb2TargetIdentity* lasso_soap_envelope_sb2_get_target_identity_header(
54
		LassoSoapEnvelope *soap_envelope);
55

  
56
LASSO_EXPORT LassoWsSec1SecurityHeader* lasso_soap_envelope_wssec_get_security_header(
57
		LassoSoapEnvelope *soap_envelope);
58

  
59
LASSO_EXPORT void lasso_soap_envelope_add_security_token(LassoSoapEnvelope *soap_envelope,
60
		LassoNode *token);
61

  
62
LASSO_EXPORT LassoSaml2Assertion *lasso_soap_envelope_get_saml2_security_token(
63
		LassoSoapEnvelope *soap_envelope);
64

  
65
LASSO_EXPORT const char* lasso_soap_envelope_get_action(LassoSoapEnvelope *soap_envelope);
66

  
67
LASSO_EXPORT void lasso_soap_envelope_add_to_body(LassoSoapEnvelope *soap_envelope,
68
		LassoNode *content);
69

  
70
LASSO_EXPORT LassoWsAddrAttributedURI *lasso_soap_envelope_get_message_id(
71
		LassoSoapEnvelope *soap_envelope, gboolean create);
72

  
73
LASSO_EXPORT LassoWsAddrRelatesTo *lasso_soap_envelope_get_relates_to(LassoSoapEnvelope *envelope,
74
		gboolean create);
75

  
76
LASSO_EXPORT GList* lasso_soap_envelope_get_body_content(LassoSoapEnvelope *soap_envelope);
77

  
78
LASSO_EXPORT void lasso_soap_fault_add_to_detail(LassoSoapFault *soap_fault,
79
		LassoNode *node);
80

  
81
LASSO_EXPORT LassoIdWsf2Sb2UserInteractionHeader *
82
		lasso_soap_envelope_get_sb2_user_interaction_header(
83
				LassoSoapEnvelope *soap_envelope, gboolean create);
84

  
85
LASSO_EXPORT LassoIdWsf2Sb2UserInteractionHint
86
		lasso_soap_envelope_get_sb2_user_interaction_hint( LassoSoapEnvelope *soap_envelope);
87

  
88
LASSO_EXPORT void lasso_soap_envelope_set_sb2_user_interaction_hint(
89
		LassoSoapEnvelope *soap_envelope, LassoIdWsf2Sb2UserInteractionHint hint);
90

  
91
LASSO_EXPORT void lasso_soap_envelope_add_action(LassoSoapEnvelope *soap_envelope,
92
		const char *action);
93

  
94
LASSO_EXPORT LassoSoapDetail *lasso_soap_fault_get_detail(LassoSoapFault *soap_fault,
95
		gboolean create);
96

  
97
LASSO_EXPORT LassoSoapFault* lasso_soap_envelope_get_soap_fault(LassoSoapEnvelope *soap_envelope,
98
		gboolean create);
99

  
100
LASSO_EXPORT void lasso_soap_envelope_set_relates_to(LassoSoapEnvelope *soap_envelope, char *value, char *relationship);
101

  
102
#ifdef __cplusplus
103
}
104
#endif /* __cplusplus */
105

  
106
#endif /* __LASSO_IDWSF2_SOAP_BINDING_H__ */
107

  
lasso/id-wsf/Makefile.am
1
MAINTAINERCLEANFILES = Makefile.in
2
liblassoincludedir = $(includedir)/lasso/id-wsf
3

  
4
AM_CPPFLAGS = \
5
	-I$(top_builddir) \
6
	-I$(top_srcdir) \
7
	$(LASSO_CORE_CFLAGS) \
8
	-DG_LOG_DOMAIN=\"lasso\"
9

  
10
lasso_private_h_sources = \
11
	wsf_profile_private.h \
12
	id_ff_extensions_private.h
13

  
14
if WSF_ENABLED
15
noinst_LTLIBRARIES = liblasso-id-wsf.la
16
WSF_C_FILES = \
17
	authentication.c \
18
	discovery.c \
19
	interaction_profile_service.c \
20
	personal_profile_service.c \
21
	data_service.c \
22
	wsf_profile.c \
23
	wsf_utils.c \
24
	id_ff_extensions.c
25

  
26
WSF_H_FILES = \
27
	id_wsf.h \
28
	authentication.h \
29
	discovery.h \
30
	interaction_profile_service.h \
31
	personal_profile_service.h \
32
	data_service.h \
33
	wsf_profile.h \
34
	wsf_utils.h \
35
	id_ff_extensions.h
36
endif
37

  
38
liblasso_id_wsf_la_SOURCES = $(WSF_C_FILES)
39

  
40
liblassoinclude_HEADERS = $(WSF_H_FILES)
41

  
42
EXTRA_DIST = $(lasso_private_h_sources)
lasso/id-wsf/authentication.c
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#include "../utils.h"
25
#include "authentication.h"
26
#include "../xml/idwsf_strings.h"
27
#include "../xml/private.h"
28
#include "../xml/sa_sasl_request.h"
29
#include "../xml/sa_sasl_response.h"
30
#include "../xml/soap_binding_correlation.h"
31
#include <xmlsec/base64.h>
32

  
33
/**
34
 * SECTION:idwsf_authentication
35
 * @short_description: ID-WSF 1.0 Authentication service
36
 * @stability: Unstable
37
 *
38
 * The authentication service allows to authenticate uniformly using a SOAP encapsulated SASL
39
 * service. Ideally you can use any SASL profile.
40
 */
41

  
42
/* SASL client callbacks (for secret, login, password, ... ) */
43
static sasl_callback_t lasso_sasl_callbacks[5];
44

  
45
static int
46
lasso_sasl_cb_log(G_GNUC_UNUSED void* context, G_GNUC_UNUSED int priority, G_GNUC_UNUSED const char* message)
47
{
48
	return SASL_OK;
49
}
50

  
51
static int
52
lasso_sasl_cb_authname(void* context, G_GNUC_UNUSED int id, const char** result, unsigned* len)
53
{
54
	LassoUserAccount *account;
55
	int ret = SASL_FAIL;
56

  
57
	*result = NULL;
58
	if (len) *len = 0;
59

  
60
	account = (LassoUserAccount *)context;
61
	if (account != NULL && account->login != NULL) {
62
		*result = g_strdup(account->login);
63
		if (len) *len = strlen(account->login);
64
		ret = SASL_OK;
65
	}
66

  
67
	return ret;
68
}
69

  
70
static int
71
lasso_sasl_cb_pass(G_GNUC_UNUSED sasl_conn_t* conn, void* context, G_GNUC_UNUSED int id, sasl_secret_t** psecret)
72
{
73
	static sasl_secret_t *s;
74
	LassoUserAccount *account;
75
	int ret = SASL_FAIL;
76

  
77
	account = (LassoUserAccount *)context;
78
	if (account != NULL && account->password != NULL) {
79
		s = (sasl_secret_t*) g_malloc0(sizeof(sasl_secret_t) + strlen(account->password));
80

  
81
		strcpy((char*)s->data, account->password);
82
		s->len = strlen(account->password);
83

  
84
		*psecret = s;
85

  
86
		ret = SASL_OK;
87
	}
88

  
89
	return ret;
90
}
91

  
92
struct _LassoAuthenticationPrivate
93
{
94
	gboolean dispose_has_run;
95
};
96

  
97
static LassoSoapEnvelope*
98
lasso_authentication_build_soap_envelope_internal(const char *refToMessageId,
99
	const char *providerId)
100
{
101
	LassoSoapEnvelope *envelope;
102
	LassoSoapHeader *header;
103
	LassoSoapBody *body;
104
	LassoSoapBindingCorrelation *correlation;
105
	gchar *messageId, *timestamp;
106

  
107
	/* Body */
108
	body = lasso_soap_body_new();
109
	body->Id = lasso_build_unique_id(32);
110
	envelope = lasso_soap_envelope_new(body);
111

  
112
	/* Header */
113
	header = lasso_soap_header_new();
114
	envelope->Header = header;
115

  
116
	/* Correlation */
117
	messageId = lasso_build_unique_id(32);
118
	timestamp = lasso_get_current_time();
119
	correlation = lasso_soap_binding_correlation_new(messageId, timestamp);
120
	correlation->id = lasso_build_unique_id(32);
121
	if (refToMessageId != NULL)
122
		correlation->refToMessageID = g_strdup(refToMessageId);
123
	header->Other = g_list_append(header->Other, correlation);
124

  
125
	/* Provider */
126
	if (providerId) {
127
		LassoSoapBindingProvider *provider = lasso_soap_binding_provider_new(providerId);
128
		provider->id = lasso_build_unique_id(32);
129
		header->Other = g_list_append(header->Other, provider);
130
	}
131

  
132
	return envelope;
133
}
134
gint
135
lasso_authentication_client_start(LassoAuthentication *authentication)
136
{
137
	LassoSaSASLRequest *request;
138
	int res;
139
	const char *mechusing;
140
	const char *out;
141
	unsigned int outlen = 0;
142
	xmlChar *outbase64;
143

  
144
	/* Liberty part */
145
	request = LASSO_SA_SASL_REQUEST(LASSO_WSF_PROFILE(authentication)->request);
146

  
147
	/* sasl part */
148
	res = sasl_client_start(authentication->connection, /* same context from above */
149
				request->mechanism, /* list of mechanisms from the server */
150
				NULL, /* filled in if an interaction is needed */
151
				&out, /* filled in on success */
152
				&outlen, /* filled in on success */
153
				&mechusing);
154

  
155
	/* mechusing is th resulting best mech to use, so copy it in SASLRequest element */
156
	if (mechusing != NULL) {
157
		lasso_release(request->mechanism);
158
		request->mechanism = g_strdup(mechusing);
159
	}
160

  
161
	if (outlen > 0) {
162
		outbase64 = xmlSecBase64Encode((xmlChar*)out, outlen, 0);
163
		request->Data = g_list_append(request->Data, g_strdup((char*)outbase64));
164
		xmlFree(outbase64);
165
	}
166

  
167
	return res;
168
}
169

  
170
gint
171
lasso_authentication_client_step(LassoAuthentication *authentication)
172
{
173
	LassoSaSASLRequest *request;
174
	LassoSaSASLResponse *response;
175
	int res = 0;
176
	xmlChar *in = NULL;
177
	int inlen = 0;
178
	xmlChar *inbase64 = NULL;
179

  
180
	xmlChar *outbase64;
181
	const char *out;
182
	unsigned int outlen = 0;
183

  
184
	/* Liberty part */
185
	request = LASSO_SA_SASL_REQUEST(LASSO_WSF_PROFILE(authentication)->request);
186
	response = LASSO_SA_SASL_RESPONSE(LASSO_WSF_PROFILE(authentication)->response);
187

  
188
	/* sasl part */
189

  
190
	if (response->Data != NULL && response->Data->data != NULL) {
191
		inbase64 = response->Data->data;
192
		in = g_malloc(strlen((char*)inbase64));
193
		inlen = xmlSecBase64Decode(inbase64, in, strlen((char*)inbase64));
194

  
195
		res = sasl_client_step(authentication->connection, /* our context */
196
				(char*)in, /* the data from the server */
197
				inlen,     /* its length */
198
				NULL,      /* prompt_need */
199
				&out,      /* client response */
200
				&outlen);  /* its length */
201
		if (outlen > 0) {
202
			outbase64 = xmlSecBase64Encode((xmlChar*)out, outlen, 0);
203
			request->Data = g_list_append(request->Data, g_strdup((char*)outbase64));
204
			xmlFree(outbase64);
205
		}
206
	}
207

  
208
	return res;
209
}
210

  
211
void
212
lasso_authentication_destroy(LassoAuthentication *authentication)
213
{
214
	lasso_node_destroy(LASSO_NODE(authentication));
215
}
216

  
217
char*
218
lasso_authentication_get_mechanism_list(LassoAuthentication *authentication)
219
{
220
	int res;
221
	const char *result_string;
222
	unsigned int string_length;
223
	int number_of_mechanisms;
224

  
225
	if (authentication->connection == NULL) {
226
		return NULL;
227
	}
228

  
229
	res = sasl_listmech(authentication->connection,  /* The context for this connection */
230
			NULL,  /* not supported */
231
			"",   /* What to prepend the string with */
232
			" ",  /* What to separate mechanisms with */
233
			"",   /* What to append to the string */
234
			&result_string, /* The produced string. */
235
			&string_length, /* length of the string */
236
			&number_of_mechanisms); /* Number of mechanisms in
237
						   the string */
238
	if (result_string == NULL)
239
		return NULL;
240

  
241
	return g_strdup(result_string);
242
}
243

  
244
gint
245
lasso_authentication_init_request(LassoAuthentication *authentication,
246
		LassoDiscoDescription *description,
247
		const gchar *mechanisms,
248
		LassoUserAccount *account)
249
{
250
	LassoSoapEnvelope *envelope;
251
	LassoSaSASLRequest *request;
252
	int res;
253

  
254
	/* global callback for every connection */
255
	static sasl_callback_t global_callbacks[2];
256

  
257
	g_return_val_if_fail(LASSO_IS_AUTHENTICATION(authentication),
258
			LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
259
	g_return_val_if_fail(LASSO_IS_DISCO_DESCRIPTION(description),
260
			LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
261
	g_return_val_if_fail(mechanisms != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
262

  
263

  
264
	if (description->Endpoint != NULL) {
265
		LASSO_WSF_PROFILE(authentication)->msg_url = g_strdup(description->Endpoint);
266
	} else if (description->WsdlURI != NULL) {
267

  
268
	}
269

  
270
	/* liberty-idwsf-authn-svc-1.1.pdf - page 13 - lignes 342 / 343 :
271
	   In the case where a single SASL mechanism name is conveyed, the <SASLRequest> message
272
	   can contain a so-called initial response (see Section 5.1 of [RFC2222]) in the <Data>
273
	   element. */
274
	request = lasso_sa_sasl_request_new(mechanisms);
275
	LASSO_WSF_PROFILE(authentication)->request = LASSO_NODE(request);
276

  
277
	envelope = lasso_authentication_build_soap_envelope_internal(NULL, NULL);
278
	LASSO_WSF_PROFILE(authentication)->soap_envelope_request = envelope;
279
	if (envelope == NULL || envelope->Body == NULL || envelope->Body->any == NULL) {
280
		return critical_error(LASSO_PROFILE_ERROR_MISSING_REQUEST);
281
	}
282
	envelope->Body->any = g_list_append(envelope->Body->any, request);
283

  
284
	/* set up default logging callback */
285
	global_callbacks[0].id = SASL_CB_LOG;
286
	global_callbacks[0].proc = lasso_sasl_cb_log;
287
	global_callbacks[0].context = NULL;
288

  
289
	global_callbacks[1].id = SASL_CB_LIST_END;
290
	global_callbacks[1].proc = NULL;
291
	global_callbacks[1].context = NULL;
292

  
293
	sasl_client_init(global_callbacks);
294

  
295
	/* sasl client new connection */
296
	{
297
		sasl_callback_t* callback;
298

  
299
		callback = lasso_sasl_callbacks;
300

  
301
		callback->id = SASL_CB_AUTHNAME;
302
		callback->proc = &lasso_sasl_cb_authname;
303
		callback->context = account;
304
		callback++;
305

  
306
		callback->id = SASL_CB_USER;
307
		callback->proc = &lasso_sasl_cb_authname;
308
		callback->context = account;
309
		callback++;
310

  
311
		callback->id = SASL_CB_PASS;
312
		callback->proc = &lasso_sasl_cb_pass;
313
		callback->context = account;
314
		callback++;
315

  
316
		callback->id = SASL_CB_GETREALM;
317
		callback->proc = NULL;
318
		callback->context = NULL;
319
		callback++;
320

  
321
		callback->id = SASL_CB_LIST_END;
322
		callback->proc = NULL;
323
		callback->context = NULL;
324
	}
325

  
326
	res = sasl_client_new(LASSO_SA_SASL_SERVICE_NAME,
327
			NULL,
328
			NULL,
329
			NULL,
330
			lasso_sasl_callbacks, /* new connection callbacks (log, ...) */
331
			0,
332
			&authentication->connection);
333

  
334
	return res;
335
}
336

  
337

  
338
gint
339
lasso_authentication_process_request_msg(LassoAuthentication *authentication,
340
		const gchar *soap_msg)
341
{
342
	LassoSoapEnvelope *envelope;
343
	LassoSaSASLResponse *response;
344
	LassoUtilityStatus *status;
345
	LassoSoapBindingCorrelation *correlation;
346
	gchar *messageId;
347
	int res = 0;
348

  
349
	g_return_val_if_fail(LASSO_IS_AUTHENTICATION(authentication),
350
			LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
351
	g_return_val_if_fail(LASSO_IS_AUTHENTICATION(authentication),
352
			LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
353
	g_return_val_if_fail(soap_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
354

  
355
	/* if a previous request and response, then remove */
356
	if (LASSO_IS_SOAP_ENVELOPE(LASSO_WSF_PROFILE(authentication)->soap_envelope_response) \
357
			== TRUE) {
358
		lasso_node_destroy(LASSO_NODE(LASSO_WSF_PROFILE(authentication)->\
359
					soap_envelope_response));
360
		LASSO_WSF_PROFILE(authentication)->soap_envelope_response = NULL;
361
		LASSO_WSF_PROFILE(authentication)->response = NULL;
362
	}
363

  
364
	if (LASSO_IS_SOAP_ENVELOPE(LASSO_WSF_PROFILE(authentication)->soap_envelope_request) \
365
			== TRUE) {
366
		lasso_node_destroy(LASSO_NODE(LASSO_WSF_PROFILE(authentication)->\
367
					soap_envelope_request));
368
		LASSO_WSF_PROFILE(authentication)->soap_envelope_request = NULL;
369
		LASSO_WSF_PROFILE(authentication)->request = NULL;
370
	}
371

  
372
	envelope = LASSO_SOAP_ENVELOPE(lasso_node_new_from_dump(soap_msg));
373
	LASSO_WSF_PROFILE(authentication)->soap_envelope_request = envelope;
374
	LASSO_WSF_PROFILE(authentication)->request = LASSO_NODE(envelope->Body->any->data);
375

  
376
	correlation = envelope->Header->Other->data;
377
	messageId = correlation->messageID;
378
	envelope = lasso_authentication_build_soap_envelope_internal(messageId, NULL);
379
	LASSO_WSF_PROFILE(authentication)->soap_envelope_response = envelope;
380

  
381
	status = lasso_utility_status_new(LASSO_SA_STATUS_CODE_OK);
382
	response = lasso_sa_sasl_response_new(status);
383
	LASSO_WSF_PROFILE(authentication)->response = LASSO_NODE(response);
384
	if (envelope == NULL || envelope->Body == NULL || envelope->Body->any == NULL) {
385
		return critical_error(LASSO_PROFILE_ERROR_MISSING_RESPONSE);
386
	}
387
	envelope->Body->any = g_list_append(envelope->Body->any, response);
388

  
389
	/* liberty-idwsf-authn-svc-1.1.pdf - page 13 - lignes 359 / 361 :
390
	   <SASLRequest> message with multiple mechanism MUST NOT contain any "initial response"
391
	   data, and MUST be the initial SASL request. See Section 4.5.2.1.2 for details on the
392
	   returned <SASLResponse> message in this case. */
393

  
394
	/* liberty-idwsf-authn-svc-1.1.pdf - page 13 - lignes 380 / 384 :
395
	   A NULL string ("") in mechanism list SASLRequest indicates to the authentication server
396
	   that the client wishes to abort the authentication exchange. */
397

  
398
	return res;
399
}
400

  
401
gint
402
lasso_authentication_process_response_msg(LassoAuthentication *authentication,
403
		const gchar *soap_msg)
404
{
405
	LassoSoapEnvelope *envelope;
406
	LassoSaSASLRequest *request;
407
	LassoSaSASLResponse *response;
408
	LassoSoapBindingCorrelation *correlation;
409
	gchar *messageId;
410

  
411
	g_return_val_if_fail(LASSO_IS_AUTHENTICATION(authentication),
412
			LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
413
	g_return_val_if_fail(soap_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
414

  
415
	/* if a previous request or response, remove */
416
	if (LASSO_IS_SOAP_ENVELOPE(LASSO_WSF_PROFILE(authentication)->soap_envelope_request) \
417
			== TRUE) {
418
		lasso_node_destroy(LASSO_NODE(LASSO_WSF_PROFILE(authentication)->\
419
					soap_envelope_request));
420
		LASSO_WSF_PROFILE(authentication)->soap_envelope_request = NULL;
421
		LASSO_WSF_PROFILE(authentication)->request = NULL;
422
	}
423

  
424
	if (LASSO_IS_SOAP_ENVELOPE(LASSO_WSF_PROFILE(authentication)->soap_envelope_response) \
425
			== TRUE) {
426
		lasso_node_destroy(LASSO_NODE(LASSO_WSF_PROFILE(authentication)->\
427
					soap_envelope_response));
428
		LASSO_WSF_PROFILE(authentication)->soap_envelope_response = NULL;
429
		LASSO_WSF_PROFILE(authentication)->response = NULL;
430
	}
431

  
432
	envelope = LASSO_SOAP_ENVELOPE(lasso_node_new_from_dump(soap_msg));
433
	LASSO_WSF_PROFILE(authentication)->soap_envelope_response = envelope;
434

  
435
	if (envelope == NULL || envelope->Body == NULL || envelope->Body->any == NULL) {
436
		return critical_error(LASSO_PROFILE_ERROR_MISSING_RESPONSE);
437
	}
438
	response = envelope->Body->any->data;
439
	if (response == NULL) {
440
		return critical_error(LASSO_PROFILE_ERROR_MISSING_RESPONSE);
441
	}
442
	LASSO_WSF_PROFILE(authentication)->response = LASSO_NODE(response);
443

  
444
	if (response->Status == NULL || response->Status->code == NULL) {
445
		return critical_error(LASSO_PROFILE_ERROR_MISSING_STATUS_CODE);
446
	}
447

  
448
	/* if continue, init another request */
449
	if (g_str_equal(response->Status->code, LASSO_SA_STATUS_CODE_CONTINUE) == TRUE) {
450
		correlation = envelope->Header->Other->data;
451
		messageId = correlation->messageID;
452

  
453
		envelope = lasso_authentication_build_soap_envelope_internal(messageId, NULL);
454
		LASSO_WSF_PROFILE(authentication)->soap_envelope_request = envelope;
455

  
456
		request = lasso_sa_sasl_request_new(g_strdup(response->serverMechanism));
457
		LASSO_WSF_PROFILE(authentication)->request = LASSO_NODE(request);
458

  
459
		envelope->Body->any = g_list_append(envelope->Body->any, request);
460
	}
461

  
462
	return 0;
463
}
464

  
465
gint
466
lasso_authentication_server_start(LassoAuthentication *authentication)
467
{
468
	LassoSaSASLRequest *request;
469
	LassoSaSASLResponse *response;
470

  
471
	gchar *mechanisms, *chosen;
472
	gchar **server_mech_list, **client_mech_list, **smech, **cmech;
473
	int nbmech;
474

  
475
	char *inbase64;
476
	xmlChar *outbase64;
477

  
478
	char *in = NULL;
479
	int inlen = 0;
480

  
481
	const char *out;
482
	unsigned int outlen = 0;
483

  
484
	int res = 0;
485

  
486
	g_return_val_if_fail(LASSO_IS_AUTHENTICATION(authentication),
487
			LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
488

  
489
	res = sasl_server_init(NULL, "Lasso"); /* FIXME : should be a param */
490
	res = sasl_server_new(LASSO_SA_SASL_SERVICE_NAME,
491
			NULL,
492
			NULL,
493
			NULL,
494
			NULL,
495
			NULL,
496
			0,
497
			&authentication->connection);
498

  
499
	/* Liberty part */
500
	request = LASSO_SA_SASL_REQUEST(LASSO_WSF_PROFILE(authentication)->request);
501
	response = LASSO_SA_SASL_RESPONSE(LASSO_WSF_PROFILE(authentication)->response);
502

  
503
	/* if mechanism is NULL, then abort authentication exchange */
504
	chosen = NULL;
505
	nbmech = 0;
506
	if (g_str_equal(request->mechanism, "") == FALSE) {
507
		/* count nb client mechanism list */
508
		client_mech_list = g_strsplit(request->mechanism, " ", 0);
509
		cmech = client_mech_list;
510
		while (*cmech != NULL) {
511
			cmech++;
512
			nbmech++;
513
		}
514

  
515
		mechanisms  = lasso_authentication_get_mechanism_list(authentication);
516
		server_mech_list = g_strsplit(mechanisms, " ", 0);
517
		smech = server_mech_list;
518

  
519
		/* get chosen mechanism */
520
		while (*smech != NULL) {
521
			cmech = client_mech_list;
522
			while (*cmech != NULL) {
523
				if ( g_str_equal(*smech, *cmech) == TRUE) {
524
					chosen = g_strdup(*smech);
525
					break;
526
				}
527
				cmech++;
528
			}
529
			if (chosen != NULL)
530
				break;
531
			smech++;
532
		}
533
	}
534
	if (chosen == NULL) {
535
		lasso_release(response->Status->code);
536
		response->Status->code = g_strdup(LASSO_SA_STATUS_CODE_ABORT);
537
		return res;
538
	}
539

  
540
	if (nbmech > 1 && request->Data != NULL) {
541
		lasso_release(response->Status->code);
542
		response->Status->code = g_strdup(LASSO_SA_STATUS_CODE_ABORT);
543
		return res;
544
	}
545

  
546
	/* decode Data if not NULL */
547
	if (request->Data != NULL && request->Data->data != NULL) {
548
		inbase64 = request->Data->data;
549
		in = g_malloc(strlen(inbase64));
550
		inlen = xmlSecBase64Decode((xmlChar*)inbase64,
551
				(xmlChar*)in, strlen(inbase64));
552
	}
553

  
554
	/* process sasl request */
555
	res = sasl_server_start(authentication->connection,
556
				chosen,
557
				in,
558
				inlen,
559
				&out, /* Might not be NULL terminated */
560
				&outlen);
561

  
562
	/* set status code in SASLResponse message if not ok */
563
	if (res != SASL_OK) {
564
		lasso_release(response->Status->code);
565

  
566
		/* continue, set Data in response */
567
		if (res == SASL_CONTINUE) {
568
			response->Status->code = g_strdup(LASSO_SA_STATUS_CODE_CONTINUE);
569
			response->serverMechanism = g_strdup(request->mechanism);
570
			if (outlen > 0) {
571
				outbase64 = xmlSecBase64Encode((xmlChar*)out, outlen, 0);
572
				response->Data = g_list_append(response->Data,
573
						g_strdup((char*)outbase64));
574
				xmlFree(outbase64);
575
			}
576
		} else {
577
			/* abort authentication */
578
			response->Status->code = g_strdup(LASSO_SA_STATUS_CODE_ABORT);
579
		}
580
	}
581

  
582
	return res;
583
}
584

  
585
gint
586
lasso_authentication_server_step(LassoAuthentication *authentication)
587
{
588
	LassoSaSASLRequest *request;
589
	LassoSaSASLResponse *response;
590
	int res;
591
	char *in = NULL;
592
	int inlen = 0;
593
	const char *out;
594
	unsigned int outlen = 0;
595
	xmlChar *outbase64, *inbase64;
596

  
597
	g_return_val_if_fail(LASSO_IS_AUTHENTICATION(authentication),
598
			LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
599

  
600
	/* Liberty part */
601
	request = LASSO_SA_SASL_REQUEST(LASSO_WSF_PROFILE(authentication)->request);
602
	response = LASSO_SA_SASL_RESPONSE(LASSO_WSF_PROFILE(authentication)->response);
603

  
604
	/* If mechanism is NULL, thene client wants to abort authentication exchange */
605
	if (g_str_equal(request->mechanism, "") == TRUE) {
606
		lasso_release(response->Status->code);
607
		response->Status->code = g_strdup(LASSO_SA_STATUS_CODE_ABORT);
608

  
609
		return 0;
610
	}
611

  
612
	if (request->Data != NULL && request->Data->data != NULL) {
613
		inbase64 = request->Data->data;
614
		in = g_malloc(strlen((char*)inbase64));
615
		inlen = xmlSecBase64Decode(inbase64, (xmlChar*)in, strlen((char*)inbase64));
616
	}
617

  
618
	res = sasl_server_step(authentication->connection,
619
			in,      /* what the client gave */
620
			inlen,   /* it's length */
621
			&out,    /* Might not be NULL terminated */
622
			&outlen);
623

  
624
	if (res != SASL_OK) {
625
		lasso_release(response->Status->code);
626

  
627
		if (res == SASL_CONTINUE) {
628
			/* authentication exchange must continue */
629
			response->Status->code = g_strdup(LASSO_SA_STATUS_CODE_ABORT);
630

  
631
			if (outlen > 0) {
632
				outbase64 = xmlSecBase64Encode((xmlChar*)out, outlen, 0);
633
				response->Data = g_list_append(response->Data,
634
						g_strdup((char*)outbase64));
635
				xmlFree(outbase64);
636
			}
637
		} else  {
638
			/* authentication failed, abort exchange */
639
			response->Status->code = g_strdup(LASSO_SA_STATUS_CODE_ABORT);
640
		}
641
	}
642

  
643
	return res;
644
}
645

  
646

  
647
/*****************************************************************************/
648
/* private methods                                                           */
649
/*****************************************************************************/
650

  
651
static LassoNodeClass *parent_class = NULL;
652

  
653
static xmlNode*
654
get_xmlNode(LassoNode *node, gboolean lasso_dump)
655
{
656
	xmlNode *xmlnode;
657

  
658
	xmlnode = parent_class->get_xmlNode(node, lasso_dump);
659
	xmlNodeSetName(xmlnode, (xmlChar*)"Authentication");
660
	xmlSetProp(xmlnode, (xmlChar*)"AuthenticationDumpVersion", (xmlChar*)"2");
661

  
662
	return xmlnode;
663
}
664

  
665
static int
666
init_from_xml(LassoNode *node, xmlNode *xmlnode)
667
{
668
	int rc = 0;
669

  
670
	rc = parent_class->init_from_xml(node, xmlnode);
671
	if (rc) return rc;
672

  
673
	return 0;
674
}
675

  
676
/*****************************************************************************/
677
/* overrided parent class methods */
678
/*****************************************************************************/
679

  
680
static void
681
dispose(GObject *object)
682
{
683
	LassoAuthentication *authentication = LASSO_AUTHENTICATION(object);
684

  
685
	sasl_dispose(&authentication->connection);
686

  
687
	if (authentication->private_data->dispose_has_run == TRUE)
688
		return;
689
	authentication->private_data->dispose_has_run = TRUE;
690

  
691
	G_OBJECT_CLASS(parent_class)->dispose(object);
692
}
693

  
694
static void
695
finalize(GObject *object)
696
{
697
	LassoAuthentication *authentication = LASSO_AUTHENTICATION(object);
698
	lasso_release(authentication->private_data);
699
	authentication->private_data = NULL;
700
	G_OBJECT_CLASS(parent_class)->finalize(object);
701
}
702

  
703
/*****************************************************************************/
704
/* instance and class init functions */
705
/*****************************************************************************/
706

  
707
static void
708
instance_init(LassoAuthentication *authentication)
709
{
710
	authentication->private_data = g_new0(LassoAuthenticationPrivate, 1);
711
	authentication->private_data->dispose_has_run = FALSE;
712
}
713

  
714
static void
715
class_init(LassoAuthenticationClass *klass, void *unused G_GNUC_UNUSED)
716
{
717
	parent_class = g_type_class_peek_parent(klass);
718

  
719
	LASSO_NODE_CLASS(klass)->get_xmlNode = get_xmlNode;
720
	LASSO_NODE_CLASS(klass)->init_from_xml = init_from_xml;
721

  
722
	G_OBJECT_CLASS(klass)->dispose = dispose;
723
	G_OBJECT_CLASS(klass)->finalize = finalize;
724
}
725

  
726
GType
727
lasso_authentication_get_type()
728
{
729
	static GType this_type = 0;
730

  
731
	if (!this_type) {
732
		static const GTypeInfo this_info = {
733
			sizeof(LassoAuthenticationClass),
734
			NULL,
735
			NULL,
736
			(GClassInitFunc) class_init,
737
			NULL,
738
			NULL,
739
			sizeof(LassoAuthentication),
740
			0,
741
			(GInstanceInitFunc) instance_init,
742
			NULL
743
		};
744

  
745
		this_type = g_type_register_static(LASSO_TYPE_WSF_PROFILE,
746
				"LassoAuthentication", &this_info, 0);
747
	}
748
	return this_type;
749
}
750

  
751
LassoAuthentication*
752
lasso_authentication_new(LassoServer *server)
753
{
754
	LassoAuthentication *authentication = NULL;
755

  
756
	g_return_val_if_fail(LASSO_IS_SERVER(server), NULL);
757

  
758
	authentication = g_object_new(LASSO_TYPE_AUTHENTICATION, NULL);
759
	LASSO_WSF_PROFILE(authentication)->server = server;
760

  
761
	return authentication;
762
}
lasso/id-wsf/authentication.h
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
#ifndef __LASSO_AUTHENTICATION_H__
25
#define __LASSO_AUTHENTICATION_H__
26

  
27
#ifdef __cplusplus
28
extern "C" {
29

  
30
#endif /* __cplusplus */
31

  
32
#include <sasl/sasl.h>
33

  
34
#include "wsf_profile.h"
35
#include "../xml/disco_description.h"
36

  
37
#define LASSO_TYPE_AUTHENTICATION (lasso_authentication_get_type())
38
#define LASSO_AUTHENTICATION(obj) \
39
	(G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_AUTHENTICATION, LassoAuthentication))
40
#define LASSO_AUTHENTICATION_CLASS(klass) \
41
	(G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_AUTHENTICATION, LassoAuthenticationClass))
42
#define LASSO_IS_AUTHENTICATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_AUTHENTICATION))
43
#define LASSO_IS_AUTHENTICATION_CLASS(klass) \
44
	(G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_AUTHENTICATION))
45
#define LASSO_AUTHENTICATION_GET_CLASS(o) \
46
	(G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_AUTHENTICATION, LassoAuthenticationClass))
47

  
48
typedef struct _LassoAuthentication LassoAuthentication;
49
typedef struct _LassoAuthenticationClass LassoAuthenticationClass;
50
typedef struct _LassoAuthenticationPrivate LassoAuthenticationPrivate;
51

  
52
typedef struct LassoUserAccount LassoUserAccount;
53

  
54
typedef enum {
55
	LASSO_SASL_MECH_ANONYMOUS = 1,
56
	LASSO_SASL_MECH_PLAIN,
57
	LASSO_SASL_MECH_CRAM_MD5,
58
}LassoSaslMechanisms;
59

  
60
struct LassoUserAccount {
61
	char *login;
62
	char *password;
63
};
64

  
65
struct _LassoAuthentication {
66
	LassoWsfProfile parent;
67

  
68
	/* The SASL context kept for the life of the connection */
69
	sasl_conn_t *connection;
70
	sasl_interact_t **client_interact;
71

  
72
	/*< private >*/
73
	LassoAuthenticationPrivate *private_data;
74
};
75

  
76
struct _LassoAuthenticationClass {
77
	LassoWsfProfileClass parent;
78
};
79

  
80
LASSO_EXPORT GType lasso_authentication_get_type(void);
81

  
82
LASSO_EXPORT LassoAuthentication* lasso_authentication_new(LassoServer *server);
83

  
84
LASSO_EXPORT void lasso_authentication_destroy(LassoAuthentication *authentication);
85

  
86
LASSO_EXPORT lasso_error_t lasso_authentication_client_start(LassoAuthentication *authentication);
87

  
88
LASSO_EXPORT lasso_error_t lasso_authentication_client_step(LassoAuthentication *authentication);
89

  
90
LASSO_EXPORT char *lasso_authentication_get_mechanism_list(LassoAuthentication *authentication);
91

  
92
LASSO_EXPORT lasso_error_t lasso_authentication_init_request(LassoAuthentication *authentication,
93
						    LassoDiscoDescription *description,
94
						    const gchar *mechanisms,
95
						    LassoUserAccount *account);
96

  
97
LASSO_EXPORT lasso_error_t lasso_authentication_process_request_msg(LassoAuthentication *authentication,
98
							   const gchar *soap_msg);
99

  
100
LASSO_EXPORT lasso_error_t lasso_authentication_process_response_msg(LassoAuthentication *authentication,
101
							    const gchar *soap_msg);
102

  
103
LASSO_EXPORT lasso_error_t lasso_authentication_server_start(LassoAuthentication *authentication);
104

  
105
LASSO_EXPORT lasso_error_t lasso_authentication_server_step(LassoAuthentication *authentication);
106

  
107
#ifdef __cplusplus
108
}
109
#endif /* __cplusplus */
110

  
111
#endif /* __LASSO_AUTHENTICATION_H__ */
lasso/id-wsf/data_service.c
1
/* $Id$
2
 *
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
 *
5
 * Copyright (C) 2004-2007 Entr'ouvert
6
 * http://lasso.entrouvert.org
7
 *
8
 * Authors: See AUTHORS file in top-level directory.
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23

  
24
/**
25
 * SECTION:data_service
26
 * @short_description: ID-WSF Data Service profile
27
 *
28
 * DataService allows Attribute Consumers (WSC) to request an Attribute Provider (WSP) to get
29
 * or modify data about users with their consent.
30
 *
31
 * Following up on #LassoDiscovery first example, it created a @service object,
32
 * this is a #LassoDataService instance.  This example continues from that step
33
 * and retrieves the name of the principal:
34
 *
35
 * <informalexample>
36
 * <programlisting>
37
 * char *soap_answer;            // SOAP answer from data service
38
 * xmlNode *principal_name;      // libxml2 xmlNode with the principal name
39
 *
40
 * service = lasso_discovery_get_service(discovery);
41
 * lasso_data_service_init_query(service, "/pp:PP/pp:InformalName", NULL);
42
 * lasso_data_service_build_request_msg(service);
43
 *
44
 * // service must perform SOAP call to LASSO_WSF_PROFILE(service)->msg_url
45
 * // the SOAP message is LASSO_WSF_PROFILE(service)->msg_body.  The answer
46
 * // is stored in char* soap_answer;
47
 *
48
 * lasso_data_service_process_query_response_msg(service, soap_answer);
49
 * principal_name = lasso_data_service_get_answer(service, "/pp:PP/pp:InformalName");
50
 *
51
 * // app should probably then use xmlNodeGetContent libxml2 function to get
52
 * // access to node content.
53
 * </programlisting>
54
 * </informalexample>
55
 *
56
 */
57

  
58
#include "../xml/private.h"
59
#include "../utils.h"
60
#include <libxml/xpath.h>
61
#include <libxml/xpathInternals.h>
62

  
63
#include "discovery.h"
64
#include "data_service.h"
65
#include "../xml/idwsf_strings.h"
66
#include "../xml/dst_query.h"
67
#include "../xml/dst_query_response.h"
68
#include "../xml/dst_modify.h"
... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.